MjAwMS0wNC0wNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoYW5hbHl6ZV9jbGluaXRfYm9keSk6IFJldHVybiB0cnVlIGlmIHRoZSBzZWNvbmQgb3BlcmFuZAoJb2YgYSBNRVRIT0RfRVhQUiBpcyBub256ZXJvLgoKMjAwMS0wNC0wNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogTWFrZS1sYW5nLmluICgkKHNyY2RpcikvamF2YS9wYXJzZS1zY2FuLmMpOiBSdW4gYmlzb24gZnJvbSBidWlsZAoJZGlyZWN0b3J5LgoJKCQoc3JjZGlyKS9qYXZhL3BhcnNlLmMpOiBMaWtld2lzZS4KCjIwMDEtMDQtMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogZ2NqLnRleGk6IFVzZSBgd2hpY2gtZ2NqJyBpbnN0ZWFkIG9mIGB3aGljaC1nNzcuJwoJKHZlcnNpb24tZ2NjKTogSW5pdGlhbGl6ZWQuCgkod2hpY2gtZ2NqKTogTGlrZXdpc2UuCgoyMDAxLTA0LTA0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGphdmEtdHJlZS5oIChzdHJ1Y3QgbGFuZ19kZWNsKTogTmV3IG1hY3JvCglgREVDTF9GSVhFRF9DT05TVFJVQ1RPUl9QLicgTmV3IGZpZWxkIGBmaXhlZF9jdG9yLicKCSogcGFyc2UueSAoYnVpbGRfaW5zdGFuY2VfaW5pdGlhbGl6ZXIpOiBOZXcgZnVuY3Rpb24uCgkoYWRkX2luc3RhbmNlX2luaXRpYWxpemVyKTogVXNlIGl0LgoJKGphdmFfZml4X2NvbnN0cnVjdG9ycyk6IFNldCBgY3VycmVudF9jbGFzcycgYmVmb3JlIGZpeCBwYXNzLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBKdXN0IHJldHVybiBpZiBhbHJlYWR5IGZpeGVkLiBNb3ZlIGBzdXBlcigpJwoJaW52b2thdGlvbiBhaGVhZC4gVXNlIGBidWlsZF9pbnN0YW5jZV9pbml0aWFsaXplci4nCglGaXhlcyBQUiBqYXZhLzEzMTUuCgoyMDAxLTA0LTA0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KIAoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQYXNzIGZpZWxkJ3MKCURFQ0xfQ09OVEVYVCB0byBgbm90X2FjY2Vzc2libGVfcC4nCgkobm90X2FjY2Vzc2libGVfcCk6IENoYW5nZWQgcGFyYW1ldGVycyBvcmRlciBpbiBgaW5oZXJpdHNfZnJvbV9wJwoJaW52b2thdGlvbi4KCjIwMDEtMDMtMjcgIEFuZHJldyBIYWxleSAgPGFwaEBjYW1icmlkZ2UucmVkaGF0LmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgZmxhZ19jaGVja19yZWZlcmVuY2VzLgoKMjAwMS0wNC0wNCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQ09OU1RBTlRfVkFMVUVfUCk6ICBOZXcgbWFjcm8uCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgVXNlIENPTlNUQU5UX1ZBTFVFX1AuCgkqIHBhcnNlLnkgKG1heWJlX2J1aWxkX2NsYXNzX2luaXRfZm9yX2ZpZWxkKTogIE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUsIHJlc29sdmVfZmllbGRfYWNjZXNzKTogIFVzZQoJbWF5YmVfYnVpbGRfY2xhc3NfaW5pdF9mb3JfZmllbGQgaW5zdGVhZCBvZiBidWlsZF9jbGFzc19pbml0IAoJVGhpcyBkb2VzIG5vdCBkbyB0aGUgaW5pdCBpZiB0aGUgZmllbGQgaXMgY29tcGlsZS10aW1lLWNvbnN0YW50LgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogIFNpbXBsaWZ5LgoKCSogcGFyc2UueSAoZm9sZF9jb25zdGFudF9mb3JfaW5pdCk6ICBNZXJnZSB0ZXN0IGludG8gc3dpdGNoLgoKMjAwMS0wNC0wMyAgWmFjayBXZWluYmVyZyAgPHphY2t3QHN0YW5mb3JkLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoYnVmZmVyLm8sIGNoZWNrLWluaXQubywgY2xhc3Mubyk6IERvbid0IGRlcGVuZAoJb24gZ2Fuc2lkZWNsLmguCgkqIGJ1ZmZlci5jLCBqdmdlbm1haW4uYzogRG9uJ3QgaW5jbHVkZSBnYW5zaWRlY2wuaC4KCjIwMDEtMDQtMDIgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BzdGFuZm9yZC5lZHU+CgoJKiBleHByLmMgKHBvcF90eXBlXzApOiBTYXZlIHRoZSByZXN1bHQgb2YgdGhlIGZpcnN0CglsYW5nX3ByaW50YWJsZV9uYW1lIGNhbGwgaW4gYSBzY3JhdGNoIGJ1ZmZlciwgc28gaXQgCgl3b24ndCBiZSBjbG9iYmVyZWQgYnkgdGhlIHNlY29uZCBjYWxsLgoKMjAwMS0wMy0zMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKGFycmF5X3R5cGU6KTogUmV3cml0dGVuLgoJKHR5cGVfZGVjbGFyYXRpb246KTogYGVtcHR5X3N0YXRlbWVudCcgcmVwbGFjZXMgYFNDX1RLLicKCShjbGFzc19tZW1iZXJfZGVjbGFyYXRpb246KTogYGVtcHR5IHN0YXRlbWVudCcgYWRkZWQuCgkobWV0aG9kX2JvZHk6KTogU2ltcGxpZmllZC4KCShzdGF0aWNfaW5pdGlhbGl6ZXI6KTogTGlrZXdpc2UuCgkocHJpbWFyeV9ub19uZXdfYXJyYXk6KTogVXNlIGB0eXBlX2xpdGVyYWxzLicKCSh0eXBlX2xpdGVyYWxzOik6IE5ldyBydWxlLgoJKGRpbXM6KTogU2V0IGFuZCB1cGRhdGUgYGJyYWNrZXRfY291bnQuJwoJRml4ZXMgUFIgamF2YS8xMDc0LiBGaXhlcyBQUiBqYXZhLzI0MTIuCgoyMDAxLTAzLTI4ICBIYW5zIEJvZWhtICA8Ym9laG1AYWNtLm9yZz4KCgkqIGJvZWhtLmMgKFBST0NFRFVSRV9PQkpFQ1RfREVTQ1JJUFRPUik6IFNldCB0byB1c2UgYGJ1aWxkX2ludF8yLicKCShnZXRfYm9laG1fdHlwZV9kZXNjcmlwdG9yKTogU2V0IHR5cGUgb24gcmV0dXJuZWQgdmFsdWUgdG8gYmUgYQoJcG9pbnRlciBsZW5ndGggaW50ZWdlci4KCjIwMDEtMDMtMjggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGV4cHIuYyAocG9wX3R5cGVfMCk6IENhbGwgYGNvbmNhdCcgcmF0aGVyIHRoYW4gYnVpbGRpbmcgdGhlCglzdHJpbmcgbWFudWFsbHkuCgkocG9wX3R5cGUpOiBBZGQgZm9ybWF0IHNwZWNpZmllciBpbiBjYWxsIHRvIGBlcnJvcicuCgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEF2b2lkIGNhc3RpbmcgYXdheQoJY29uc3QtbmVzcy4KCjIwMDEtMDMtMjggIEplZmZyZXkgT2xkaGFtICA8b2xkaGFtQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBqdmdlbm1haW4uYyAoZG9fbWFuZ2xlX2NsYXNzbmFtZSk6IEVuZCBzdHJpbmcgY29uc3RhbnQgd2l0aCAnXDAnLgoKMjAwMS0wMy0yOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCglJQS02NCBBQkkgRXhjZXB0aW9uIEhhbmRsaW5nOgoJKiBNYWtlLWxhbmcuaW4gKGV4Y2VwdC5vKTogRG9uJ3QgZGVwZW5kIG9uIGVoLWNvbW1vbi5oLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBIYW5kbGUgRVhDX1BUUl9FWFBSLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKSBbdGhyb3dfbm9kZV06IE5vIF9Kdl9TamxqX1Rocm93LgoJW3NvZnRfZXhjZXB0aW9uaW5mb19jYWxsX25vZGVdOiBSZW1vdmUuCglbZWhfcGVyc29uYWxpdHlfbGliZnVuYywgbGFuZ19laF9ydW50aW1lX3R5cGVdOiBOZXcuCgkoZW5kX2phdmFfbWV0aG9kKTogTm8gZW1pdF9oYW5kbGVycy4KCSogZXhjZXB0LmMgKGphdmFfc2V0X2V4Y2VwdGlvbl9sYW5nX2NvZGUpOiBSZW1vdmUuCgkobWV0aG9kX2luaXRfZXhjZXB0aW9ucyk6IERvbid0IGNhbGwgaXQuCgkocHJlcGFyZV9laF90YWJsZV90eXBlKTogTm8gQ0FUQ0hfQUxMX1RZUEUuCgkoYnVpbGRfZXhjZXB0aW9uX29iamVjdF9yZWYpOiBOZXcuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBVcGRhdGUgZm9yIGV4Y2VwdC5oIG5hbWUgY2hhbmdlcy4KCShlbWl0X2hhbmRsZXJzLCBleHBhbmRfcmVzdW1lX2FmdGVyX2NhdGNoKTogUmVtb3ZlLgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IFVwZGF0ZSBmb3IgZXhjZXB0LmggbmFtZSBjaGFuZ2VzLgoJKHByb2Nlc3NfanZtX2luc3RydWN0aW9uKTogVXNlIGJ1aWxkX2V4Y2VwdGlvbl9vYmplY3RfcmVmLgoJKiBqYXZhLXRyZWUuaCAoSlRJX1NPRlRfRVhDRVBUSU9OSU5GT19DQUxMX05PREUpOiBSZW1vdmUuCgkoc29mdF9leGNlcHRpb25pbmZvX2NhbGxfbm9kZSk6IFJlbW92ZS4KCShidWlsZF9leGNlcHRpb25fb2JqZWN0X3JlZik6IERlY2xhcmUuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucykgW0NBTExfRVhQUl06IE5vCglzb2Z0X2V4Y2VwdGlvbmluZm9fY2FsbF9ub2RlLiAgTW92ZSBwcm9jZXNzaW5nIC4uLgoJW0VYQ19QVFJfRVhQUl06IC4uLiBoZXJlLgoJKiBwYXJzZS5oIChCVUlMRF9BU1NJR05fRVhDRVBUSU9OX0lORk8pOiBSZW1vdmUgZGVhZCBjb2RlLgoJKiBwYXJzZS55IChjYXRjaF9jbGF1c2VfcGFyYW1ldGVyKTogVXNlIGJ1aWxkX2V4Y2VwdGlvbl9vYmplY3RfcmVmLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBObyBqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlIG9yCgllbWl0X2hhbmRsZXJzLgoJKGJ1aWxkX2RvdF9jbGFzc19tZXRob2QpOiBVc2UgYnVpbGRfZXhjZXB0aW9uX29iamVjdF9yZWYuCgkodHJ5X3JlZmVyZW5jZV9hc3NpZ25jb252KTogQ2hlY2sgRVhDX1BUUl9FWFBSIG5vdAoJc29mdF9leGNlcHRpb25pbmZvX2NhbGxfbm9kZS4KCjIwMDEtMDMtMjggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CgoJKiBqYXZhLXRyZWUuaCAodGhyb3dfbm9kZSk6IERlZmluZSBhcyBhIHNpbmdsZSBtZW1iZXIgb2YKCWphdmFfZ2xvYmFsX3RyZWVzIGluc3RlYWQgb2YgYSBzZXBhcmF0ZSBhcnJheS4KCShKVElfVEhST1dfTk9ERSk6IE5ldy4KCSogZGVjbC5jICh0aHJvd19ub2RlKTogRG9uJ3QgZGVjbGFyZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXQgYSBzY2FsYXIgdGhyb3dfbm9kZS4KCURvbid0IHJlZ2lzdGVyIGl0IGZvciBnYy4KCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogUmVmZXJlbmNlIHNjYWxhciB0aHJvd19ub2RlLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXRocm93KTogTGlrZXdpc2UuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IExpa2V3aXNlLgoJKiBwYXJzZS5oIChCVUlMRF9USFJPVyk6IExpa2V3aXNlLgoKMjAwMS0wMy0yOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGRlY2wuYyAoZW5kX2phdmFfbWV0aG9kKTogRG8gbm90IHNhdmUgYW5kIHJlc3RvcmUKCWZsYWdfbm9uX2NhbGxfZXhjZXB0aW9ucy4KCSogcGFyc2UueSAoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKiBsYW5nLmMgKGZsYWdfZXhjZXB0aW9ucyk6IERvbid0IGRlY2xhcmUuCgkoamF2YV9pbml0X29wdGlvbnMpOiBTZXQgZmxhZ19ub25fY2FsbF9leGNlcHRpb25zLiAgU2V0CglmbGFnX2V4Y2VwdGlvbnMgaGVyZSAuLi4KCShqYXZhX2luaXQpOiAuLi4gbm90IGhlcmUuCgoyMDAxLTAzLTI3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgoKCSogZXhwci5jLCBwYXJzZS5oOiBVc2UgVVNJTkdfU0pMSl9FWENFUFRJT05TIGluc3RlYWQgb2YKCWV4Y2VwdGlvbnNfdmlhX2xvbmdqbXAuCgoJKiBsYW5nLmMgKGZsYWdfbmV3X2V4Y2VwdGlvbnMpOiBEb24ndCBkZWNsYXJlIGl0LgoJKGphdmFfaW5pdF9vcHRpb25zKTogT3Igc2V0IGl0LgoKMjAwMS0wMy0yNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KCgkqIGRlY2wuYyAoZW5kX2phdmFfbWV0aG9kKTogUmVuYW1lIGFzeW5jaHJvbm91c19leGNlcHRpb25zIHRvCglmbGFnX25vbl9jYWxsX2V4Y2VwdGlvbnMuCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCjIwMDEtMDMtMjcgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbjogRGVwZW5kIG9uICQoU1lTVEVNX0gpLCBub3Qgc3lzdGVtLmguCgoyMDAxLTAzLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcGFyc2UuaCAoREVDTF9FTkRfU09VUkNFX0xJTkUpOiBEb24ndCByZWx5IG9uIERFQ0xfRlJBTUVfU0laRS4KCjIwMDEtMDMtMjYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogcGFyc2UueSAoZmluZF9hc19pbm5lcl9jbGFzcyk6IEZvbGxvdyBjdXJyZW50IHBhY2thZ2UKCWluZGljYXRpb25zIG5vdCB0byBtaXN0YWtpbmdseSBsb2FkIGFuIHVucmVsYXRlZCBjbGFzcy4KCjIwMDEtMDMtMjUgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbnN0YW50cy5jIChQVVROKTogVXNlIG1lbWNweSwgbm90IGJjb3B5LgoKCSogbGV4LmMgKGphdmFfcmVhZF9jaGFyKTogVXNlIG1lbW1vdmUsIG5vdCBiY29weS4KCgkqIHBhcnNlLnkgKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdW1lKTogVXNlIG1lbWNweSwgbm90IGJjb3B5LgoKMjAwMS0wMy0yMyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgUmVwbGFjZSAzIHBvcF90eXBlIGJ5IFBPUF9UWVBFCgltYWNybyBmb3IgYmV0dGVyIGVycm9yIHBpbi1wb2ludGluZy4KCSogamF2YS10cmVlLmg6ICBGaXggdHlwbyBpbiBjb21tZW50LgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIENoYW5nZXMgdG8gVFJZX0ZJTkFMTFlfRVhQUi4KCURvbid0IGluY2x1ZGUganNyL2dvdG8gaW4gZXhjZXB0aW9uIHJhbmdlLgoJQ2hlY2sgaWYgc3RhcnQgYW5kIGVuZCBvZiBleGNlcHRpb24gcmFuZ2UgYXJlIHRoZSBzYW1lIChhbHNvIFRSWV9FWFBSKS4KCURvbid0IGVtaXQganNyIGFmdGVyIHRyeV9ibG9jayBpZiBDQU5fQ09NUExFVEVfTk9STUFMTFkgaXMgZmFsc2UuCglIb3dldmVyLCBkbyBlbWl0IHRoZSBmb2xsb3dpbmcgZ290byBldmVuIGlmIHRyeV9ibG9jayBpcyBlbXB0eS4KCURlZmVyIGZyZWVpbmcgZXhjZXB0aW9uX2RlY2wgdW50aWwgYWZ0ZXIgdGhlIGZpbmFsaXplciwgdG8gbWFrZQoJc3VyZSB0aGUgbG9jYWwgaXNuJ3QgcmV1c2VkIGluIHRoZSBmaW5hbGl6ZXIuICBGaXhlcyBQUiBqYXZhLzEyMDguCgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6ICBJZiB0aGUgdHJ5LWNsYXVzZSBpcyBlbXB0eSwganVzdAoJcmV0dXJuIHRoZSBmaW5hbGx5LWNsYXVzZSBhbmQgdmljZSB2ZXJzYS4KCjIwMDEtMDMtMjMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogZ2NqLnRleGkgKElucHV0IE9wdGlvbnMpOiBkb2N1bWVudGVkIHRoZSBjaGVjayBmb3IgYXR0cmlidXRlCglgZ251LmdjYy5nY2NqLWNvbXBpbGVkJyBhbmQgdGhlIGAtZmZvcmNlLWNsYXNzZXMtYXJjaGl2ZS1jaGVjaycgZmxhZy4KCSogamF2YS10cmVlLmggKGZsYWdfZm9yY2VfY2xhc3Nlc19hcmNoaXZlX2NoZWNrKTogRGVjbGFyZWQgZXh0ZXJuLgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX0dDSkNPTVBJTEVEX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCShqY2ZfcGFyc2UpOiBDaGVjayBmb3IgdGhlIHJpZ2h0IGNsYXNzZXMgYXJjaGl2ZSBpZiBuZWNlc3NhcnkuCgkqIGpjZi1yZWFkZXIuYyAoZ2V0X2F0dHJpYnV0ZSk6IERlZmluZSBgTUFUQ0hfQVRUUklCVVRFJyBhbmQgdXNlIGl0LgoJKGpjZl9wYXJzZV9maWVsZHMpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCSogamNmLXdyaXRlLmMgKGFwcGVuZF9nY2pfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IENvbXB1dGUgdGhlIGF0dHJpYnV0ZSBjb3VudCwgaW52b2tlCglgYXBwZW5kX2djal9hdHRyaWJ1dGUnLgoJKiBqY2YuaCAodHlwZWRlZiBzdHJ1Y3QgSkNGKTogYHNlZW5faW5femlwJyBhbmQgYGphdmFfc291cmNlJwoJdHVybmVkIGludG8gYml0IGZpZWxkcy4gTmV3IGJpdCBmaWVsZCBgcmlnaHRfemlwLicKCShKQ0ZfWkVSTyk6IFNldCBgcmlnaHRfemlwJyB0byB6ZXJvLgoJKiBsYW5nLW9wdGlvbnMuaCAoLWZmb3JjZS1jbGFzc2VzLWFyY2hpdmUtY2hlY2spOiBBZGRlZCBmbGFnLgoJKiBsYW5nLmMgKGZsYWdfZm9yY2VfY2xhc3Nlc19hcmNoaXZlX2NoZWNrKTogTmV3IGZsYWcuCgkobGFuZ19mX29wdGlvbnMpOiBOZXcgZW50cnkgYGZvcmNlLWNsYXNzZXMtYXJjaGl2ZS1jaGVjay4nCglGaXhlcyBQUiBqYXZhLzEyMTMuCgoyMDAxLTAyLTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KCgkqIGdjai50ZXhpIChDb25maWd1cmUtdGltZSBPcHRpb25zKTogQWRkIC1mY2hlY2stcmVmZXJlbmNlcy4KCSogZXhwci5jIChidWlsZF9qYXZhX2luZGlyZWN0X3JlZik6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2NoZWNrX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9qYXZhX2FycmF5X2xlbmd0aF9hY2Nlc3MpOiBVc2UgYnVpbGRfamF2YV9pbmRpcmVjdF9yZWYgdG8KCWNoZWNrIGZvciBudWxsIHJlZmVyZW5jZXMuCgkoYnVpbGRfamF2YV9hcnJheWFjY2Vzcyk6IExpa2V3aXNlLgoJKGJ1aWxkX2dldF9jbGFzcyk6IExpa2V3aXNlLgoJKGJ1aWxkX2ZpZWxkX3JlZik6IExpa2V3aXNlLgoJKGludm9rZV9idWlsZF9kdGFibGUpOiBMaWtld2lzZS4KCShidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBMaWtld2lzZS4KCSogbGFuZy5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZCBmbGFnX2NoZWNrX3JlZmVyZW5jZXMuCgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IEFkZCBmbGFnX2NoZWNrX3JlZmVyZW5jZXMuCgkqIGphdmEtdHJlZS5oIChmbGFnX2NoZWNrX3JlZmVyZW5jZXMpOiBOZXcgdmFyaWFibGUuCgkqIGxhbmcuYyAoZmxhZ19jaGVja19yZWZlcmVuY2VzKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6IFVzZSBqYXZhX2NoZWNrX3JlZmVyZW5jZS4JCgkocGF0Y2hfYXNzaWdubWVudCk6IEFsbG93IGZvciBleHRyYSBuZXN0aW5nIGluCglfSnZfQ2hlY2tBcnJheVN0b3JlLgoKMjAwMS0wMy0yMyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRzKTogVXBkYXRlIGZyb20gdGhlIGRlZmluaXRpdmUgbGlzdCBpbiBjcC9sZXguYy4KCSogbGV4LmMgKGN4eF9rZXl3b3Jkcyk6IExpa2V3aXNlLgoKMjAwMS0wMy0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogQnJvYWRlbiBgbGVuZ3RoJwoJcmVjb2duaXRpb24uIEhlbHAgTU9ESUZZX0VYUFIgYmUgcmVzb2x2ZWQgYXMgZXhwcmVzc2lvbiBuYW1lcy4KCUZpeGVzIFBSIGphdmEvMjA2Ni4gRml4ZXMgUFIgamF2YS8yNDAwLgoKMjAwMS0wMy0yMSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBnamF2YWguYyAocHJvY2Vzc19maWxlKTogTWFyayBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgd2l0aCAKCSJfX2F0dHJpYnV0ZV9fICgoamF2YV9pbnRlcmZhY2UpKSIuCgoyMDAxLTAzLTIxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzcyk6IEZpeGVkIHB1c2hfc3VwZXJfZmllbGQncyBzZWNvbmQKCWFyZ3VtZW50LiBGaXhlcyBQUiBqYXZhLzIzMzMuCgkoamRlcF9yZXNvbHZlX2NsYXNzKTogUmVzZXQgVFlQRV9TSVpFIGlmIGBlcnJvcl9tYXJrX25vZGUnLCBpdCdzCgl0b28gZWFybHkgdG8gbGF5IGlubmVyY2xhc3NlcyBvdXQuCgoyMDAxLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBsZXguYyAoamF2YV9yZWFkX3VuaWNvZGUpOiBPbmx5IGFjY2VwdCBsZWFkaW5nIGB1J3MuCgoyMDAxLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBqY2YtcGFyc2UuYyAocmVhZF9jbGFzcyk6IEluaXRpYWxpemUgYGNsYXNzJy4KCjIwMDEtMDMtMjAgIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY2FybmVnaWVtZWxsb24uZWR1PgoKCSogamNmX3BhcnNlLmMgKGpjZl9wYXJzZSk6IEVsaW1pbmF0ZSB1bnVzZWQgdmFyaWFibGUuCgoyMDAxLTAzLTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfY2xhc3NfcmVmKTogVXNlIFNFVF9ERUNMX0FTU0VNQkxFUl9OQU1FLgoJKGxheW91dF9jbGFzcyk6IExpa2V3aXNlLgoJKGxheW91dF9jbGFzc19tZXRob2QpOiBMaWtld2lzZS4KCShlbWl0X3JlZ2lzdGVyX2NsYXNzZXMpOiBMaWtld2lzZS4KCSogZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoZ2l2ZV9uYW1lX3RvX2xvY2Fscyk6IExpa2V3aXNlLgoKMjAwMS0wMy0xOSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBqY2YtcGFyc2UuYyAobG9hZF9pbm5lcl9jbGFzc2VzKTogIENoZWNrIENMQVNTX0xPQURFRF9QCgliZWZvcmUgdHJ5aW5nIHRvIGxvYWQgYW4gaW5uZXIgY2xhc3MuCgoJRml4ZXMgdG8gcHJvY2VzcyB0byBjb21tYW5kLWxpbmUgLmNsYXNzIGZpbGVzIGluIHR3byBwYXNzZXMuCgkqIGphdmEtdHJlZS5oIChKQVZBX0ZJTEVfUCwgQ0xBU1NfRklMRV9QLCBaSVBfRklMRV9QKTogIE5ldyBmbGFncy4KCShDTEFTU19GUk9NX0NVUlJFTlRMWV9DT01QSUxFRF9TT1VSQ0VfUCk6ICBSZW5hbWUgdG8gLi4KCShDTEFTU19GUk9NX0NVUlJFTlRMWV9DT01QSUxFRF9QKTogIC4uLiBiZWNhdXNlIGl0IGlzIG1vcmUgZ2VuZXJhbCBub3cuCgkqIGNsYXNzLmMgKGlzX2NvbXBpbGVkX2NsYXNzKTogIEZpeCBmb3IgcmVuYW1lZCBmbGFnLgoJKiBwYXJzZS55IChtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiAgTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogIEFsc28gc2V0IGlmIGNvbXBpbGluZyAuY2xhc3MgZmlsZXMuCgkqIGpjZi1wYXJzZS5jIChyZWFkX2NsYXNzKTsgIFJlYWQgY3VycmVudF9jbGFzcy4KCShqY2ZfcGFyc2UpOiAgTWFrZSBzdGF0aWMuCgkobG9hZF9pbm5lcl9jbGFzc2VzKTogIE5ldyBmdW5jdGlvbiwgd2l0aCBjb2RlIG1vdmVkIGZyb20gamNmX3BhcnNlLAoJYmVjYXVzZSB3ZSBuZWVkIHRvIGlubmVyIGNsYXNzZXMgYWZ0ZXIgdGhlIGNvbW1hbmQtbGluZSBmaWxlcyBhcmUgcmVhZC4KCSh5eXBhcnNlKTogIFNldCBmaW5wdXQgdG8gTlVMTCB3aGVuIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjbG9zZWQuCglSZWR1Y2UgdXNlIG9mIG1haW5famNmIChiYXNpY2FsbHkgb25seSBmb3IgYXJjaGl2ZSkgYW5kCgl1c2UgZmlucHV0IGluc3RlYWQgb2YgbWFpbl9qY2YtPnJlYWRfc3RhdGUuCglJbmxpbmUgamNmX2ZpZ3VyZV9maWxlX3R5cGUgaW50byB5eXBhcnNlLgoJU2V0IEpBVkFfRklMRV9QLCBDTEFTU19GSUxFX1AsIG9yIFpJUF9GSUxFX1Agb24gZmlsZW5hbWUgbGlzdCBuYW1lLgoJRGVmZXIgbG9hZF9pbm5lcl9jbGFzc2VzIGFuZCBwYXJzZV9jbGFzc19maWxlIHRvIGEgc2Vjb25kIHBhc3MsCglhZnRlciB3ZSd2ZSBjb3JyZWN0bHkgbWFwcGVkIGNvbW1hbmQtbGluZSAuY2xhcyBmaWVscyB0byBjbGFzc2VzLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogIFJlbW92ZWQuCgkqIGpjZi5oIChKQ0ZfWklQLCBKQ0ZfQ0xBU1MsIEpDRl9TT1VSQ0UpOiAgUmVtb3ZlZCBmbGFncy4KCShKQ0ZfWkVSTyk6ICBBbHNvIGNsZWFyIHppcGQgZmllbGQuCgkqIHppcGZpbGUuaDogIENvbmRpdGlvbmFsaXplIG9uIEpDRl9IIGluc3JlYWQgb2YgSkNGX1pJUC4KCjIwMDEtMDMtMTggIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY2FybmVnaWVtZWxsb24uZWR1PgoKCSogamNmLXBhcnNlLmMgKHl5cGFyc2UpOiBDaGFuZ2UgY2ggZnJvbSBjaGFyICogdG8gY2hhci4KCjIwMDEtMDMtMTkgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogIENoZWNrIGZvciAuemlwIGFuZCAuamFyIGZpbGVzLgoJQWRkIGNvbnN0cnVjdGVkIGZpbGVsaXN0LWZpbGUgYXQgZW5kLCBmb2xsb3dpbmcgLXhqYXZhLiAgVGh1cyBhbnkgLm8KCWFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlIC14amF2YS4gIEFsc28gd3JhcAoJZXhwbGljaXQgQEZJTEUgd2l0aCAteGphdmEgYW5kIC14bm9uZS4KCjIwMDEtMDMtMTkgIEFuZHJldyBIYWxleSAgPGFwaEBjYW1icmlkZ2UucmVkaGF0LmNvbT4KCiAgICAgICAgKiBjbGFzcy5jIChidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogQ2FsbCBtYWtlX2RlY2xfcnRsKCkgYWZ0ZXIKICAgICAgICBzZXR0aW5nIHRoZSBERUNMX0VYVEVSTkFMIGZsYWcuCgoyMDAxLTAzLTE3ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGRlY2wuYyAoY2xlYXJfYmluZGluZ19sZXZlbCk6ICBGaXggaW5pdGlhbGl6ZXIgKGJyb2tlIDAzLTE1KS4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgZW1pdHRpbmcgaWluYwoJd2hlbiByZXN1bHQgaXMgaXMgbmVlZGVkICh0YXJnZXQgaXMgU1RBQ0tfVEFSR0VUKS4KCgkqIHBhcnNlLmggKEpERVBfU09MVik6ICBSZW1vdmVkLgoJKiBwYXJzZS55IChyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUpOiAgVXNlIEpERVBfVE9fUkVTT0xWRSBpbnN0ZWFkLgoKCSogcGFyc2UueSAoaW5jb21wbGV0ZV9jbGFzc19saXN0KTogUmVtb3ZlZC4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogRG9uJ3QgdXNlIG9yIHNldCBpbmNvbXBsZXRlX2NsYXNzX2xpc3QuCglJdCBkb2Vzbid0IHdvcmsgaWYgcmVzb2x2ZV9jbGFzcyBjaGFuZ2VzIHRoZSBuYW1lIG9mIGFuIGFycmF5IHR5cGUKCXRoYXQgaXMgb24gdGhlIGxpc3QgYW5kIHRoZW4gc29tZW9uZSBlbHNlIGxvb2tzIGZvciB0aGUgbW9kaWZpZWQgbmFtZS4KCUFsc28sIHNlZW1zIGxpYWJsZSB0byBicmVhayB3aGVuIGNvbXBpbGluZyBtdWx0aXBsZSBzb3VyY2UgZmlsZXMgYXQKCW9uY2UuICBTbyB0aGUgc2ltcGxlc3QgaXMgdG8ganVzdCByZW1vdmUgaW5jb21wbGV0ZV9jbGFzc19saXN0IC0KCWl0IGlzIG9ubHkgYSBtaW5vciBzcGFjZSB3aW4gYW5kIGl0IGlzIG5vdCBldmVuIGNsZWFyIGl0IHNhdmVzIHRpbWUuCgoJKiBwYXJzZS55IChyZXNvbHZlX2NsYXNzKTogIFJlbW92ZSB1bm5lZWRlZCBwcm9tb3RlX3R5cGUuCgoyMDAxLTAzLTE1ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGphdmEtdHJlZS5oIChCTE9DS19JU19JTVBMSUNJVCk6ICBOZXcgZmxhZy4KCSogcGFyc2UuaCAoQkxPQ0tfRVhQUl9PUklHSU4pOiAgUmVtb3ZlZCBtYWNyby4KCSogcGFyc2UueSAoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMsIG1heWJlX2Fic29yYl9zY29waW5nX2Jsb2Nrcyk6CglVc2UgQkxPQ0tfSVNfSU1QTElDSVQgcmF0aGVyIHRoYW4gQkxPQ0tfRVhQUl9PUklHSU4uCgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6ICBTZXQvcmVzZXQgaW5wdXRfZmlsZW5hbWUgZm9yIHNvdXJjZSBmaWxlLgoJKiBwYXJzZS55IChqYXZhX2V4cGFuZF9jbGFzc2VzKTogIExpa2V3aXNlLgoKCSogcGFyc2UueSAoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogIFdhcyBvbmx5IGNhbGxlZCBvbmNlIGFuZCBoYWQgYQoJbWlzbGVhZGluZyBuYW1lLCBzbyBpbmxpbmUgaW4gY2FsbGVyIGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZC4KCShlbnRlcl9hX2Jsb2NrKTogIExpa2V3aXNlIGlubGluZSBpbiBlbnRlcl9ibG9jayBhbmQgcmVtb3ZlLgoKCVJlbW92ZSBqdW5rIGZyb20gd2hlbiBnY2MvamF2YSB3YXMgY3JlYXRlZCAoYnkgY29weWluZyBmcm9tIEMvQysrKS4KCSogZGVjbC5jIChrZWVwX25leHRfbGV2ZWxfZmxhZywga2VlcF9uZXh0X2lmX3N1YmJsb2Nrcyk6ICBSZW1vdmUuCgkoc3RydWN0IGJpbmRpbmdfbGV2ZWwpOiAgUmVtb3ZlIGZpZWxkcyBrZWVwLCBrZWVwX2lmX3N1YmJsb2NrcywKCW1vcmVfY2xlYW51cHNfb2ssIGhhdmVfY2xlYW51cHMgKHdoaWNoIGhhdmUgbmV2ZXIgYmVlbiB1c2VkKS4KCShwdXNobGV2ZWwsIHBvcGxldmVsKTogIFJlbW92ZSByZWxhdGVkIHVzZWxlc3MgY29kZS4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6ICBUaGUgY2xhc3NfZHRhYmxlX2RlY2wgKGkuZS4gdGhlCgl2dGFibGUgZm9yIENsYXNzKSBzaG91bGQgYmUgZXh0ZXJuYWwsIGV4Y2VwdCB3aGVuIGNvbXBpbGluZyBDbGFzcy4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6ICBGaXggLUMgaGFuZGxpbmcuCglDaGVjayAtc2F2ZS10ZW1wcyB0byBzZWUgaWYgdGVtcCBARklMRSBzaG91bGQgYmUgZGVsZXRlZC4KCUZvbGxvdy11cCB0by9maXggZm9yIEZlYnJ1YXJ5IDE2IHBhdGNoLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIEJldHRlciBlcnJvciBtc2dzIGZvciBkdXAuCgkodHlwZV9zdGFja19kdXApOiAgUmVtb3ZlIG5vLWxvbmdlciBuZWRlZCBlcnJvciBjaGVjay4KCjIwMDEtMDMtMTUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogbWFuZ2xlLmMgKG1hbmdsZV9yZWNvcmRfdHlwZSk6IFJlbmFtZSAnZnJvbV9wb2ludGVyJyBhcmd1bWVudAoJdG8gJ2Zvcl9wb2ludGVyJy4gSWYgdGhpcyB0eXBlIGlzIGZvciBhIHBvaW50ZXIgKGFyZ3VtZW50KSBtYW5nbGluZywKCWRvbid0IHN1cnJvdW5kIHRoZSBlbGVtZW50IHdpdGggJ04uLkUnIGlmIHRoZSB0eXBlIG5hbWUgaXMgCgl1bnF1YWxpZmllZC4KCjIwMDEtMDMtMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogVXNlIENPUFlfREVDTF9SVEwsCglERUNMX1JUTF9TRVRfUCwgZXRjLgoJKG1ha2VfbWV0aG9kX3ZhbHVlKTogTGlrZXdpc2UuCgkoZ2V0X2Rpc3BhdGNoX3RhYmxlKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKHB1c2hfanZtX3Nsb3QpOiBVc2UgQ09QWV9ERUNMX1JUTCwgREVDTF9SVExfU0VUX1AsIGV0Yy4KCjIwMDEtMDMtMDcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGNvbmZpZy1sYW5nLmluIChsYW5nX3JlcXVpcmVzKTogRGVmaW5lLgoKMjAwMS0wMy0wNyAgQnJhZCBMdWNpZXIgIDxsdWNpZXJAbWF0aC5wdXJkdWUuZWR1PgoKCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBDaGVjayBmbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnMsCglub3QgZmxhZ19mYXN0X21hdGguCgoyMDAxLTAzLTA1ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCglGaXggYSBwcm9ibGVtIHdoZXJlIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiBhcHBsaWVkIHRvCgljbGFzc19kdGFibGVfZGVjbCBjYXVzZXMgcHJvYmxlbXMgYmVjYXVzZSBpdCB3YXMgZG9uZSB0b28gZWFybHksCgliZWZvcmUgb3V0cHV0IGZpbGUgd2FzIG9wZW5lZC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBSZW1vdmUgaW5pdCBvZiBjbGFzc19kdGFibGVfZGVjbC4KCSogY2xhc3MuYyAoY2xhc3NfZHRhYmxlX2RlY2wpOiAgQWRkIG1hY3JvIC0gZWxlbWVudCBvZiBjbGFzc19yb290cy4KCShtYWtlX2NsYXNzX2RhdGEpOiAgRGVmaW5lIGNsYXNzX2R0YWJsZV9kZWNsLgoJKiBqYXZhLXRyZWUuaCAoSlRJX0NMQVNTX0RUQUJMRV9ERUNMLCBjbGFzc19kdGFibGVfZGVjbCk6ICBSZW1vdmVkLgoKMjAwMS0wMy0wMSAgWmFjayBXZWluYmVyZyAgPHphY2t3QHN0YW5mb3JkLmVkdT4KCgkqIGphdmEvY2xhc3MuYywgamF2YS9kZWNsLmMsIGphdmEvamF2YS10cmVlLmg6IFJlcGxhY2UgYWxsCgl1c2VzIG9mICdib29sZWFuJyB3aXRoICdib29sJy4KCjIwMDEtMDMtMDEgIFphY2sgV2VpbmJlcmcgIDx6YWNrd0BzdGFuZm9yZC5lZHU+CgoJKiBsYW5nLXNwZWNzLmg6IEFkZCB6ZXJvIGluaXRpYWxpemVyIGZvciBjcHBfc3BlYyBmaWVsZCB0byBhbGwKCWFycmF5IGVsZW1lbnRzLgoKMjAwMS0wMi0xNiAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJSGFuZGxlIGNvbXBpbGluZyBtdWx0aXBsZSBpbnB1dCBmaWxlcyBhdCBvbmNlLCBhbmQgQEZJTEUgc3ludGF4LgoJKiBnY2oudGV4aTogIFVwZGF0ZWQgZG9jdW1lbnRhdGlvbiB0byBtYXRjaC4KCSogamF2YS10cmVlLmggKGZsYWdfZmlsZWxpc3RfZmlsZSwgaW5pdF9zcmNfcGFyc2UpOiAgTmV3IGRlY2xhcmF0aW9ucy4KCSogamNmLXBhcnNlLmMgKHBhcnNlX3NvdXJjZV9maWxlKTogIFNwbGl0IGludG8gLi4uCgkocGFyc2Vfc291cmNlX2ZpbGVfMSk6ICBOZXcgZnVuY3Rpb24gLSBhbmQ6CgkocGFyc2Vfc291cmNlX2ZpbGVfMik6ICBOZXcgZnVuY3Rpb24uCgkoeXlwYXJzZSk6ICBPbiAtZmZpbGVsaXN0LWZpbGUsIG9wZW4gYW5kIHNjYW4gbmFtZWQgZmlsZS4KCU9uIGZpcnN0IHBhc3Mgb3ZlciBmaWxlcywgb25seSBkbyBwYXJzZV9zb3VyY2VfZmlsZV8xLgoJQSBuZXcgc2Vjb25kIHBhc3MgY2FsbHMgcGFyc2Vfc291cmNlX2ZpbGVfMiBmb3IgZWFjaCBmaWxlIHRvIGNvbXBpbGUuCgkoaW5pdF9qY2ZfcGFyc2UpOiAgQ2FsbCBpbml0X3NyY19wYXJzZS4KCSoganZzcGVjLmMgKElORElSRUNUX0ZJTEVfQVJHKTogIE5ldyBmbGFnLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogIFN1cHBvcnQgQEZJTEVMSVNULUZJTEUgc3ludGF4LCBhcyB3ZWxsCglhcyBtdWx0aXBsZSBpbnB1dCBmaWxlIGNvbWJpbmVkIGluIG9uZSBjb21waWxhdGlvbi4KCSogbGFuZy1vcHRpb25zLmg6ICBBZGQgLWZmaWxlbGlzdC1maWxlCgkqIGxhbmcuYyAoZmxhZ19maWxlbGlzdF9maWxlKTogIE5ldyBmbGFnIHZhcmlhYmxlLgoJKGxhbmdfZl9vcHRpb25zKTogIEhhbmRsZSAtZmZpbGVsaXN0LWZpbGUuCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogRG9uJ3QgY2xlYXIgY3R4cC0+aW5jb21wbGV0ZV9jbGFzcy4KCSogcGFyc2UuaCAoc3RydWN0IHBhcnNlX2N0eHQpOiAgUmVtb3ZlIGZpZWxkcyBpbmNvbXBsZXRlX2NsYXNzIGFuZAoJZ2NsYXNzX2xpc3QgLSB1c2UgZ2xvYmFsIGZpZWxkcyBvZiBzcmNfcGFyc2Vfcm9vdHMgaW5zdGVhZC4KCSogcGFyc2UueSAoc3JjX3BhcnNlX3Jvb3RzKTogIE5ldyBhcnJheS4KCShpbmNvbXBsZXRlX2NsYXNzX2xpc3QsIGdjbGFzc19saXN0KTogIE5ldyBtYWNyb3MuCgkocHVzaF9wYXJzZXJfY29udGV4dCwgamF2YV9wb3BfcGFyc2VyX2NvbnRleHQsCglqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3VtZSk6ICBEb24ndCBmaWRkbGUgd2l0aCBkZWxldGVkIGZpZWxkcy4KCSh2YXJpb3VzKTogIFVzZSBpbmNvbXBsZXRlX2NsYXNzIGdjbGFzc19saXN0IGFuZCBnbG9iYWwgbWFjcm9zCglpbnN0ZWFkIG9mIHBhcnNlX2N0eHQgZmllbGRzIC0gdGhlIGxpc3RzIGFyZSBnbG9iYWwuCgkoaW5pdF9zcmNfcGFyc2UpOiAgTmV3IGZ1bmN0aW9uLgoKRnJpIEZlYiAyMyAxNToyODozOSAyMDAxICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogZGVjbC5jIChzZXRfYmxvY2spOiBTZXQgTkFNRVMgYW5kIEJMT0NLUyBmcm9tIEJMT0NLLgoKMjAwMS0wMi0yMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChjaGVja19pbm5lcl9jbGFzc19hY2Nlc3MpOiBNb3ZlZCBkZWNsYXJhdGlvbiBvZiBsb2NhbAoJYGVuY2xvc2luZ19kZWNsX3R5cGUnIHRvIHRoZSByaWdodCBsb2NhdGlvbi4KCjIwMDEtMDItMTkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogcGFyc2UueSAocGFyc2VyX2NoZWNrX3N1cGVyX2ludGVyZmFjZSk6IERvbid0IGNhbGwgCgljaGVja19wa2dfY2xhc3NfYWNjZXNzIGZvciBhbiBpbm5lciBpbnRlcmZhY2UuCgkocGFyc2VyX2NoZWNrX3N1cGVyKTogRG9uJ3QgY2FsbCBjaGVja19wa2dfY2xhc3NfYWNjZXNzIGZvciBpbm5lciAKCWNsYXNzLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBTaW1wbGlmeSBlbmNsb3NpbmcgdHlwZSBsb29wLiBEb24ndCBjYWxsIAoJY2hlY2tfcGtnX2NsYXNzX2FjY2VzcyBpZiBDTCBhbmQgREVDTCBhcmUgbm90IHNldC4KCShmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kKTogU2V0IERFQ0wgaWYgY2xhc3NfdHlwZSBuZWVkZWQgdG8gYmUKCWxvYWRlZC4gRG9uJ3QgY2FsbCBjaGVja19wa2dfY2xhc3NfYWNjZXNzIGZvciBhbiBpbm5lciBjbGFzcy4KCShjaGVja19pbm5lcl9jbGFzc19hY2Nlc3MpOiBSZXdyaXR0ZW4gdG8gaW1wbGVtZW50IG1lbWJlciBhY2Nlc3MKCXJ1bGVzIGFzIHBlciBzcGVjIDYuNi4xLgoJKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MpOiBIYW5kbGUgdGhlIGVtcHR5IHBhY2thZ2UgY29ycmVjdGx5LgoJKGluX3NhbWVfcGFja2FnZSk6IE5ldyBmdW5jdGlvbi4gRGV0ZXJtaW5lIGlmIHR3byBjbGFzc2VzIGFyZSBpbiB0aGUKCXNhbWUgcGFja2FnZS4KCjIwMDEtMDItMTggIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IERvbid0IHRyeSB0byBwb2tlIGEgcHVibGljIGBjbG9uZScKCW1ldGhvZCBpbnRvIGFycmF5IHR5cGVzLgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEJ5cGFzcyBhY2Nlc3MgY2hlY2sgb24gY2xvbmUgY2FsbAoJdG8gYXJyYXkgaW5zdGFuY2UuCgkKMjAwMS0wMi0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBDaGVjayBmb3IgYXJyYXlzIHdoZW4gdHJ5aW5nIGZvbGQgdG8KCWZhbHNlLgoKMjAwMS0wMi0xNSAgSmltIE1leWVyaW5nICA8bWV5ZXJpbmdAbHVjZW50LmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS5pbnN0YWxsLWNvbW1vbik6IERlcGVuZCBvbiBgaW5zdGFsbGRpcnMnLgoJKGphdmEuaW5zdGFsbC1pbmZvKTogTGlrZXdpc2UuCgoyMDAxLTAyLTE1ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBNb2RpZnkgcnVsZSB0byBtYXRjaCB0aGF0IG9mIGNwL2crK3NwZWMuby4KCjIwMDEtMDItMTQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KICAgICAgICAgICAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJRml4IGZvciBQUiBqYXZhLzEyNjEuCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiBBZGQgcHVibGljIGBjbG9uZScgbWV0aG9kIHRvCglhcnJheXMuCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBjdXJyZW50X2NsYXNzCgl3aGVuIGNoZWNraW5nIGZvciBpbmFjY2Vzc2liaWxpdHkuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBGaXhlZCBlcnJvciBtZXNzYWdlIHdoZW4gYWNjZXNzaWJpbGl0eQoJZGVuaWVkLiAgQWRkZWQgYGZyb21fc3VwZXInIGFyZ3VtZW50LgoKMjAwMS0wMi0xNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2NsYXNzKTogRG9uJ3QgYnVpbGQgYSBmYWtlIGRlY2wuIFVzZSB0aGUgb25lCglhbHJlYWR5IGJ1aWx0LgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogQnVpbGQgYW5kIGFzc2lnbiBkZWNsIHRvIGFycmF5Cgl0eXBlLgoKMjAwMS0wMi0xNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBwYXJzZS55IChub3RfYWNjZXNzaWJsZV9wKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIEFkZGVkIGV4dHJhCglgd2hlcmUnIGFyZ3VtZW50LiBVc2UgaXQgdG8gZW5mb3JjZSBwcm90ZWN0ZWQgYWNjZXNzIHJ1bGVzLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEFkZGVkIGV4dHJhIGFyZ3VtZW50IHRvCglub3RfYWNjZXNzaWJsZV9wLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogVXNlIGFyZ3VtZW50IGBwcmltYXJ5JyB0byBwcm92aWRlCglub3RfYWNjZXNzaWJsZV9wIHdpdGggYW4gZXh0cmEgYXJndW1lbnQuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBBZGRlZCBleHRyYSBhcmd1bWVudCB0byBub3RfYWNjZXNzaWJsZV9wLgoJKHNlYXJjaF9hcHBsaWNhYmxlX21ldGhvZF9saXN0KTogTGlrZXdpc2UuCgoyMDAxLTAyLTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFRyeSB0byByZXNvbHZlIGFzCglhbiBpbm5lciBjbGFzcyBhY2Nlc3Mgb25seSBpZiBgZGVjbCcgaXMgYSBUWVBFX0RFQ0wuCgoyMDAxLTAyLTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY2xhc3Nkb2xsYXJfaWRlbnRpZmllcl9ub2RlKTogSW5pdGlhbGl6ZS4KCSogamF2YS10cmVlLmggKGVudW0gamF2YV90cmVlX2luZGV4KTogTmV3IGVudHJ5IAoJYEpUSV9DTEFTU0RPTExBUl9JREVOVElGSUVSX05PREUuJwoJKGNsYXNzZG9sbGFyX2lkZW50aWZpZXJfbm9kZSk6IE5ldyBtYWNyby4KCShJRF9DTEFTU0RPTExBUl9QKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGJ1aWxkX2RvdF9jbGFzc19tZXRob2QpOiBVc2UgYGNsYXNzZG9sbGFyX2lkZW50aWZpZXJfbm9kZS4nCgkoYnVpbGRfZG90X2NsYXNzX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogYGNsYXNzJCcgY2FuJ3QgYmUKCWluaGVyaXRlZC4KCjIwMDEtMDItMDkgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEvbWFuZ2xlX25hbWUubyk6IEFkZCAnbWFrZScgcHJlcmVxcy4KCjIwMDEtMDItMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0ByZWRoYXQuY29tPgoKCSogTWFua2UtbGFuZy5pbiAoSlZHRU5NQUlOX09CSlMpOiBBZGRlZCBgZXJyb3JzLm8nCgkqIGp2Z2VubWFpbi5jIChlcnJvcik6IFJldmVyc2VkIDIwMDEtMDItMDkgcGF0Y2guIGBlcnJvcicgaXMgbm93Cglnb25lLgoKMjAwMS0wMi0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQHJlZGhhdC5jb20+CgoJKiBtYW5nbGVfbmFtZSAoYXBwZW5kX3VuaWNvZGVfbWFuZ2xlZF9uYW1lKTogRW1pdCBgXycgb3IgYFUnCglvdXRzaWRlIG9mIHRoZSBgX19VJyBzZXF1ZW5jZSB0b28uCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBDb3VudCBgXycgb3IgYFUnIG91dHNpZGUgb2YgdGhlIGBfX1UnCglzZXF1ZW5jZSB0b28uCgoyMDAxLTAyLTA5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AcmVkaGF0LmNvbT4KCgkqIGp2Z2VubWFpbi5jIChlcnJvcik6IFJldmVyc2VkIDIwMDEtMDItMDEgZGVsZXRpb24uCgoyMDAxLTAyLTA4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9PQkpTKTogQWRkZWQgamF2YS9tYW5nbGVfbmFtZS5vCgkoSlZHRU5NQUlOX09CSlMpOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmggKGFwcGVuZF9ncHBfbWFuZ2xlZF9uYW1lKTogTmV3IHByb3RvdHlwZS4JCgkqIGpjZi1wYXJzZS5jIChnZ2NfbWFya19qY2YpOiBBcmd1bWVudCBub3cgYHZvaWQgKi4nCglSZW1vdmVkIGNhc3QgY2FsbGluZyBgZ2NjX2FkZF9yb290LicKCSoganZnZW5tYWluLmMgKG1hbmdsZV9vYnN0YWNrKTogTmV3IGdsb2JhbCwgaW5pdGlhbGl6ZWQuCgkobWFpbik6IFVzZSBpdC4KCShkb19tYW5nbGVfY2xhc3MpOiBDb25zdGlmeSBsb2NhbCBgcHRyLicKCVJlbW92ZWQgbWFjcm8gYE1BTkdMRV9OQU1FLicgUmVtb3ZlZCBjYXN0IGluIGBmb3IuJyBDYWxsCglhcHBlbmRfZ3BwX21hbmdsZV9uYW1lIGFuZCB1cGRhdGUgYGNvdW50JyBpZiBuZWNlc3NhcnkuCglVc2UgYG1hbmdsZV9vYnN0YWNrLicKCSogbWFuZ2xlLmMgKGFwcGVuZF91bmljb2RlX21hbmdsZWRfbmFtZSk6IFJlbW92ZWQuCgkoYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUpOiBMaWtld2lzZS4KCSh1bmljb2RlX21hbmdsaW5nX2xlbmd0aCk6IExpa2V3aXNlLgoJKG1hbmdsZV9tZW1iZXJfbmFtZSk6IFJldHVybiB0eXBlIHNldCB0byBgdm9pZC4nCgkobWFuZ2xlX2ZpZWxkX2RlY2wpOiBEb24ndCBhcHBlbmQgYFUnIGluIGVzY2FwZWQgbmFtZXMuCgkobWFuZ2xlX21ldGhvZF9kZWNsKTogTGlrZXdpc2UuCgkobWFuZ2xlX21lbWJlcl9uYW1lKTogSnVzdCB1c2UgYGFwcGVuZF9ncHBfbWFuZ2xlZF9uYW1lLicKCSogbWFuZ2xlX25hbWUuYzogTmV3IGZpbGUuCgoyMDAxLTAyLTA3ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBGaXggVFJZX0ZJTkFMTFlfRVhQUiBsb2dpYy4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6ICBEb24ndCBjYWxsIGRvbmVfYWx0ZXJuYXRpdmUgYWZ0ZXIKCXByb2Nlc3NpbmcgbG9vcCBjb2RlLCBhcyBhIExPT1BfRVhQUiBuZXZlciB0ZXJtaW5hdGVzIG5vcm1hbGx5LgoKMjAwMS0wMi0wOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogZ2NqLnRleGk6IENoYW5nZSBzb3VyY2VzLnJlZGhhdC5jb20gcmVmZXJlbmNlIHRvIGdjYy5nbnUub3JnLgoKMjAwMS0wMi0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX1NZTlRIRVRJQ19BVFRSSUJVVEUpOiBEb24ndCBoYW5kbGUgZmllbGQKCURFQ0xzLgoKMjAwMS0wMi0wNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogbGV4LmMgKGphdmFfbmV3X2xleGVyKTogTG9uZ2VyIGVycm9yIG1lc3NhZ2UuCgoyMDAxLTAyLTA1ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBjb21tZXJjZW9uZS5jb20+CgkgICAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHJpbV9hcnJheV90eXBlKTogQWRkZWQgbGVhZGluZyBjb21tZW50LgoJKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IE1vdmVkIGxvY2FscyBvdXQgb2YKCWJsb2NrLiBBbHdheXMgY3JlYXRlIHRoZSBgZGF0YScgZmllbGQsIGZpeGVkIGFsaWdubWVudCB0byBtYXRjaAoJQysrLgoKMjAwMS0wMi0wNCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBEb24ndCBib3RoZXIgcmVjb21wdXRpbmcKCWBsZW5ndGgnLiAgVXNlIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgbm90IG1ha2VfZGVjbF9ydGwuCglGaXhlcyBQUiBqYXZhLzE4NjYuCgoyMDAxLTAyLTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHByb2Nlc3NfaW1wb3J0cyk6IFNhdmUgdGhlIG9yaWdpbmFsIG5hbWUgb2YgdGhlIGltcG9ydAoJZm9yIGJldHRlciBlcnJvciByZXBvcnQuCgoyMDAxLTAyLTA0ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBBZGQgRFJJVkVSX0RFRklORVMgdG8gdGhlIGxpc3QKCW9mIG1hY3JvcyB1c2VkIHdoZW4gY29tcGlsaW5nIGp2c3BlYy5jLgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBMaW5rIHdpdGggdGhlIHNoYXJlZAoJbGliZ2NjIGJ5IGRlZmF1bHQuCgpTdW4gRmViICA0IDE1OjUyOjQ0IDIwMDEgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBDYWxsIGludGVybmFsX2Vycm9yIGluc3RlYWQgb2YgZmF0YWwuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiBMaWtld2lzZS4KCSogbWFuZ2xlLmMgKGphdmFfbWFuZ2xlX2RlY2wpOiBMaWtld2lzZS4KCSogcGFyc2UueSAobWFrZV9uZXN0ZWRfY2xhc3NfbmFtZSwgamF2YV9jb21wbGV0ZV9saHMpOiBMaWtld2lzZS4KCShvcGVyYXRvcl9zdHJpbmcpOiBMaWtld2lzZS4KCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogQ2FsbCBhYm9ydCBpbnN0ZWFkIG9mIGZhdGFsLgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYpOiBMaWtld2lzZS4KCSogY29uc3RhbnRzLmMgKHdyaXRlX2NvbnN0YW50X3Bvb2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChzdGFydF9qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKiBleHByLmMgKHB1c2hfdHlwZSwgamF2YV9zdGFja19wb3AsIGphdmFfc3RhY2tfc3dhcCk6IExpa2V3aXNlLgoJKGphdmFfc3RhY2tfZHVwLCBlbmNvZGVfbmV3YXJyYXlfdHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2Vzcyk6IExpa2V3aXNlLgoJKGJ1aWxkX2phdmFfY2hlY2tfaW5kZXhlZF90eXBlLCBleHBhbmRfamF2YV9wdXNoYyk6IExpa2V3aXNlLgoJKGJ1aWxkX2phdmFfc29mdF9kaXZtb2QsIGJ1aWxkX2ludm9rZWludGVyZmFjZSk6IExpa2V3aXNlLgoJKiBqYXZhLXRyZWUuaCAoSU5ORVJfQ0xBU1NfUCk6IExpa2V3aXNlLgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc2lnbmF0dXJlLCBnZXRfbmFtZV9jb25zdGFudCk6IExpa2V3aXNlLgoJKGdpdmVfbmFtZV90b19jbGFzcywgZ2V0X2NsYXNzX2NvbnN0YW50KTogTGlrZXdpc2UuCgkqIGpjZi13cml0ZS5jIChDSEVDS19QVVQsIENIRUNLX09QLCBnZXRfYWNjZXNzX2ZsYWdzKTogTGlrZXdpc2UuCgkoZmluZF9jb25zdGFudF9pbmRleCwgZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiBMaWtld2lzZS4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucywgcGVyZm9ybV9yZWxvY2F0aW9ucyk6IExpa2V3aXNlLgoJKiBsZXguYyAoamF2YV91bmdldF91bmljb2RlLCBqYXZhX2xleCk6IExpa2V3aXNlLgoJKiBtYW5nbGUuYyAobWFuZ2xlX3R5cGUsIG1hbmdsZV9yZWNvcmRfdHlwZSk6IExpa2V3aXNlLgoJKG1hbmdsZV9wb2ludGVyX3R5cGUsIG1hbmdsZV9hcnJheV90eXBlLCBpbml0X21hbmdsaW5nKTogTGlrZXdpc2UuCgkoZmluaXNoX21hbmdsaW5nKTogTGlrZXdpc2UuCgkqIHBhcnNlLmggKE1BUktfRklOQUxfUEFSTVMpOiBMaWtld2lzZS4KCSogcGFyc2UueSAocG9wX2N1cnJlbnRfb3NiLCB1bnJlYWNoYWJsZV9zdG10X2Vycm9yKTogTGlrZXdpc2UuCgkob2J0YWluX2luY29tcGxldGVfdHlwZSwgamF2YV9jb21wbGV0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBMaWtld2lzZS4KCShjdXRfaWRlbnRpZmllcl9pbl9xdWFsaWZpZWQsIGNoZWNrX2RlcHJlY2F0aW9uKTogTGlrZXdpc2UuCgkocGF0Y2hfaW52b2tlLCBmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBMaWtld2lzZS4KCShqYXZhX2NvbXBsZXRlX2xocywgbG9va3VwX25hbWVfaW5fYmxvY2tzKTogTGlrZXdpc2UuCgkoY2hlY2tfZmluYWxfdmFyaWFibGVfaW5kaXJlY3RfYXNzaWdubWVudCwgYnVpbGRfdW5hcnlvcCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoc2V0X2xvY2FsX3R5cGUsIHBhcnNlX3NpZ25hdHVyZV90eXBlKTogTGlrZXdpc2UuCgkocGFyc2Vfc2lnbmF0dXJlX3N0cmluZywgYnVpbGRfamF2YV9zaWduYXR1cmUpOiBMaWtld2lzZTsKCShzZXRfamF2YV9zaWduYXR1cmUpOiBMaWtld2lzZS4KCSogdmVyaWZ5LmMgKHR5cGVfc3RhY2tfZHVwLCBDSEVDS19QQ19JTl9SQU5HRSk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogQ2FsbCBmYXRhbF9lcnJvciBpbnN0ZWFkIG9mIGZhdGFsLgoJKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiBMaWtld2lzZS4KCSogZXhwci5jIChidWlsZF9rbm93bl9tZXRob2RfcmVmLCBleHBhbmRfaW52b2tlKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQsIGpjZl9wYXJzZSk6IExpa2V3aXNlLgoJKiBsZXguYyAoamF2YV9uZXdfbmV3X2xleGVyKTogTGlrZXdpc2UuCgkqIGp2LXNjYW4uYyAobWFpbik6IExpa2V3aXNlLgoJKGZhdGFsX2Vycm9yKTogUmVuYW1lZCBmcm9tIGZhdGFsLgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6IENhbGwgZmF0YWxfaW9fZXJyb3IgaW5zdGVhZCBvZgoJcGZhdGFsX3dpdGhfbmFtZS4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBDYWxsIGZhdGFsX2lvX2Vycm9yLCBub3QgZmF0YWwuCgkoeXlwYXJzZSk6IExpa2V3aXNlLgoJKiBqY2Ytd3JpdGUuYyAobWFrZV9jbGFzc19maWxlX25hbWUsIHdyaXRlX2NsYXNzZmlsZSk6IExpa2V3aXNlLgoJKiBsZXguYyAoamF2YV9nZXRfbGluZV9jb2wpOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmMgKGxvYWRfY2xhc3MpOiBNYWtlIGVycm9ycyBub24tZmF0YWwuCgkqIGxleC5jIChieXRlc3dhcF9pbml0LCBuZWVkX2J5dGVzd2FwKTogT25seSAjaWZkZWYgSEFWRV9JQ09OVi4KCQoyMDAxLTAyLTAxICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGp2Z2VubWFpbi5jIChjbGFzc19tYW5nbGluZ19zdWZmaXgpOiBSZW1vdmUgdW51c2VkIHN0cmluZy4KCShlcnJvcik6IFJlbW92ZSB1bnVzZWQgZnVuY3Rpb24uCgkobWFpbik6IERvbid0IHVzZSAiX19hdHRyaWJ1dGVfXyBhbGlhcyIgb24gZ2VuZXJhdGVkIGNsYXNzIHN5bWJvbC4KCjIwMDEtMDEtMzAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGluaXRfamNmX3BhcnNlKTogQWRkZWQgY2FzdCB0byBnZ2NfYWRkX3Jvb3QncyBsYXN0Cglhcmd1bWVudC4KCSogcGFyc2UueSAoZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbik6IENvZGUgYWNjb3VudGluZyBmb3IgV0ZMZWQKCW1ldGhvZCBERUNMX05BTUVzIGRlbGV0ZWQuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogTGlrZXdpc2UuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IExheW91dCByZXNvbHZlZCB0eXBlLgoJKiB0eXBlY2suYyAobG9va3VwX2RvKTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwuCgoyMDAxLTAxLTMwICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGphdmEtdHJlZS5oOiBSZW1vdmUgSlRJX0lOVEVHRVJfTkVHQVRJVkVfT05FX05PREUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2UgaW50ZWdlcl9taW51c19vbmVfbm9kZSwgbm90CglpbnRlZ2VyX25lZ2F0aXZlX29uZV9ub2RlLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYmlub3ApOiBMaWtld2lzZS4KCjIwMDEtMDEtMjQgIEplZmYgU3R1cm0gIDxqZWZmLnN0dXJtQGNvbW1lcmNlb25lLmNvbT4KCgkqIHpleHRyYWN0LmMgKHJlYWRfemlwX2FyY2hpdmUpOiBSZWFkIGZpbGVfb2Zmc2V0IGJlZm9yZSB3cml0aW5nCgl6aXBkIGFuZCBjb25zZXF1ZW50bHkgY2xvYmJlcmluZyB0aGUgaGVhZGVyIGNvbnRlbnRzLgoKMjAwMS0wMS0yNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluOiBSZW1vdmUgYWxsIGRlcGVuZGVuY2llcyBvbiBkZWZhdWx0cy5oLgoJKiBkZWNsLmM6IERvbid0IGluY2x1ZGUgZGVmYXVsdHMuaC4KCSogZXhwci5jOiBMaWtld2lzZS4KCSogcGFyc2UueTogTGlrZXdpc2UuCgoyMDAxLTAxLTI1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIENoYW5nZUxvZyAoMjAwMS0wMS0yMSk6IEZpeGVkIHR5cG8uCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc19tZXRob2QpOiBDb2RlIGFjY291bnRpbmcgZm9yIFdGTGVkCgltZXRob2QgREVDTF9OQU1FcyBkZWxldGVkLgoJKiBjb25zdGFudC5jIChmaW5kX21ldGhvZHJlZl9pbmRleCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGxhbmdfbWFya190cmVlKTogTWFyayBgd2ZsJyBmaWVsZCBpbiBzdHJ1Y3QgbGFuZ19kZWNsLgoJKiBqYXZhLXRyZWUuaCAoREVDTF9GVU5DVElPTl9XRkwpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBgd2ZsJy4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogUHJvdG90eXBlIGRlbGV0ZWQuCgkqIG1hbmdsZS5jIChtYW5nbGVfbWV0aG9kX2RlY2wpOiBDb2RlIGFjY291bnRpbmcgZm9yIFdGTGVkCgltZXRob2QgREVDTF9OQU1FcyBkZWxldGVkLgoJKiBwYXJzZS5oIChHRVRfTUVUSE9EX05BTUUpOiBNYWNybyBkZWxldGVkLgoJKiBwYXJzZS55IChyZXNldF9tZXRob2RfbmFtZSk6IERlbGV0ZWQuCgkobWV0aG9kX2hlYWRlcik6IFNldCBERUNMX0ZVTkNUSU9OX1dGTC4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyKTogQ29kZSBhY2NvdW50aW5nIGZvciBXRkxlZCBtZXRob2QKCURFQ0xfTkFNRXMgZGVsZXRlZC4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogRGVsZXRlZC4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogQ29kZSBhY2NvdW50aW5nIGZvciBXRkxlZCBtZXRob2QKCURFQ0xfTkFNRXMgZGVsZXRlZC4gVXNlIERFQ0xfRlVOQ1RJT05fV0ZMLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogTGlrZXdpc2UuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogTGlrZXdpc2UuCgkoamF2YV9leHBhbmRfY2xhc3Nlcyk6IERvbid0IGNhbGwgYHJlc2V0X21ldGhvZF9uYW1lLicKCShzZWFyY2hfYXBwbGljYWJsZV9tZXRob2RfbGlzdCk6IFVzZSBERUNMX05BTUVzIGluc3RlYWQgb2YKCUdFVF9NRVRIT0RfTkFNRS4KCSogdHlwZWNrLmMgKGxvb2t1cF9kbyk6IENvZGUgYWNjb3VudGluZyBmb3IgV0ZMZWQgbWV0aG9kCglERUNMX05BTUVzIGRlbGV0ZWQuCgoyMDAxLTAxLTI1ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6IENoZWNrIGZvciBFT0YgZnJvbSBnZXRjIGZpcnN0LgoKMjAwMS0wMS0yMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBEb24ndCBsYXkgdGhlIHN1cGVyY2xhc3Mgb3V0IGlmIGl0J3MKCWFscmVhZHkgYmVpbmcgbGFpZCBvdXQuCgkqIGpjZi1wYXJzZS5jIChoYW5kbGVfaW5uZXJjbGFzc19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoSEFORExFX0lOTkVSQ0xBU1NFU19BVFRSSUJVVEUpOiBJbnZva2UKCWhhbmRsZV9pbm5lcmNsYXNzZXNfYXR0cmlidXRlLgoJKGpjZl9wYXJzZSk6IERvbid0IGxvYWQgYW4gaW5uZXJjbGFzc2VzIGlmIGl0J3MgYWxyZWFkeSBiZWluZwoJbGFpZCBvdXQuCgkqIGpjZi13cml0ZS5jIChhcHBlbmRfaW5uZXJjbGFzc19hdHRyaWJ1dGVfZW50cnkpOiBTdGF0aWMKCWBhbm9ueW1vdXNfbmFtZScgYW5kIGl0cyBpbml0aWFsaXphdGlvbiBkZWxldGVkLiBgb2NpaScgYW5kIGBpbmknCgl0byBiZSB6ZXJvIGZvciBhbm9ueW1vdXMgY2xhc3Nlcy4KCjIwMDEtMDEtMjMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X2NvbnN0YW50X3ZhbHVlKTogU2V0IERFQ0xfRklFTERfRklOQUxfSVVEIGlmCgluZWNlc3NhcnkuCgkqIGpjZi1wYXJzZS5jIChzZXRfc291cmNlX2ZpbGVuYW1lKTogVXNlCglNQVlCRV9DUkVBVEVfVkFSX0xBTkdfREVDTF9TUEVDSUZJQyBpZiBuZWNlc3NhcnkuCgoyMDAxLTAxLTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoYnVpbGRfam5pX3N0dWIpOiBTZXQgREVDTF9DT05URVhUIG9uIGBtZXRoX3Zhcicgc28gaXQKCWdldHMgYSB1bmlxdWUgYXNtIG5hbWUuCgoyMDAxLTAxLTIzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChIQU5ETEVfRU5EX01FVEhPRFMpOiBOdWxsaWZ5IGN1cnJlbnRfbWV0aG9kLgoJKEhBTkRMRV9TVEFSVF9GSUVMRCk6IEludm9rZSBNQVlCRV9DUkVBVEVfVkFSX0xBTkdfREVDTF9TUEVDSUZJQwoJaWYgbmVjZXNzYXJ5LgoJKEhBTkRMRV9TWU5USEVUSUNfQVRUUklCVVRFKTogTmV3IG1hY3JvLgoJKiBqY2YtcmVhZGVyLmMgKGdldF9hdHRyaWJ1dGUpOiBIYW5kbGUgYFN5bnRoZXRpYycgYXR0cmlidXRlLgoJKiBwYXJzZS55IChsb29rdXBfcGFja2FnZV90eXBlX2FuZF9zZXRfbmV4dCk6IERlbGV0ZWQuCgkocmVzb2x2ZV9wYWNrYWdlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjb2RlLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IGBmaW5pdCQnIGNhbid0IGJlCiAJaW5oZXJpdGVkLgoJKiB2ZXJpZnkuYyAocG9wX2FyZ3VtZW50X3R5cGVzKTogQWRkZWQgbWlzc2luZyBwcm90b3R5cGUuCgoyMDAxLTAxLTIzICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGNvbmZpZy1sYW5nLmluOiBEaXNhYmxlIGphdmEgYnkgZGVmYXVsdC4KCjIwMDEtMDEtMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGdjai50ZXhpIChDb3B5aW5nKTogTmV3IG5vZGUuCglBZGRlZCBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCglWYXJpb3VzIGZpeGVzIHRvIGFsbG93IGNvbXBpbGluZyBhIGNvbXByZXNzZWQgLmphci8uemlwIGFyY2hpdmUuCgkqIHppcGZpbGUuaCAoc3RydWN0IFppcEZpbGVDYWNoZSk6ICBSZXBsYWNlIGJ5IHN0cnVjdCBaaXBGaWxlLgoJKHN0cnVjdCBaaXBGaWxlKTogIEFkZCBmaWVsZHMgbmFtZSBhbmQgbmV4dCAoZnJvbSAgWmlwRmlsZUNhY2hlKS4KCShzdHJ1Y3QgWmlwRGlyZWN0b3J5KTogIE5ldyBmaWVsZCB6aXBmIHBvaW50cyB0byBvd25pbmcgWmlwRmlsZS4KCSogamNmLmggKHN0cnVjdCBaaXBEaXJlY3RvcnkpOiAgQWRkIGZvcndhcmQgZGVjbGFyYXRpb24uCgkoc3RydWN0IEpDRik6ICAgRGVjbGFyZSB6aXBkIGZpZWxkIHRvIGhhdmUgdHlwZSBzdHJ1Y3QgWmlwRGlyZWN0b3J5LgoJUmVtb3ZlIHNlZW5faW5femlwIGFuZCB6aXBfb2Zmc2V0IGZpZWxkcy4KCShKQ0ZfU0VFTl9JTl9aSVApOiAgTmV3IG1hY3JvLgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogIFNldCBaaXBEaXJlY3RvcnkncyB6aXBmIGZpZWxkLgoJKiBqY2YtaW8uYzogIENoYW5nZSBhbGwgWmlwRmlsZUNhY2hlIHRvIFppcEZpbGUuCgkocmVhZF96aXBfbWVtYmVyKTogIE5ldyBmdW5jdGlvbi4KCShvcGVuX2luX3ppcCk6ICBDYWxsIHJlYWRfemlwX21lbWJlci4KCSogamNmLXBhcnNlLmMgKGZpbmRfaW5fY3VycmVudF96aXApOiAgUmVtb3ZlIGZ1bmN0aW9uLgoJKHJlYWRfY2xhc3MpOiAgTWVyZ2UgaW4gZmluZF9pbl9jdXJyZW50X3ppcCBmdW5jdGlvbmFsaXR5LgoJQ2FsbCByZWFkX3ppcF9tZW1iZXIgaWYgbmVlZGVkLgoJKHBhcnNlX3ppcF9maWxlX2VudHJpZXMpOiAgVXNlIHJlYWRfemlwX21lbWJlci4KCShwcm9jZXNzX3ppcF9kaXIpOiAgVXBkYXRlIGZvciByZW1vdmVkIGFuZCBhZGRlZCBKQ0YgZmllbGRzLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogIFJlLXVzZSwgZG9uJ3QgY29weSBpbml0aWFsIFppcEZpbGUgc3RydWN0LgoKMjAwMS0wMS0yMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJTWlub3Igb3B0aW1pemF0aW9uIG9mIHN0YXRpYyBnZ2Mgcm9vdHMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9yb290cyk6ICBOZXcgc3RhdGljIGZpZWxkLgoJKGN1cnJlbnRfZmllbGQsIGN1cnJlbnRfbWV0aG9kLCBjdXJyZW50X2ZpbGVfbGlzdCk6ICBSZXBsYWNlIGJ5IG1hY3JvcwoJbmFtaW5nIGZpZWxkcyBvZiBwYXJzZV9yb290cy4KCShpbml0X2pjZl9wYXJzZSk6ICBDb21iaW5lIDMgZ2djX2FkZF90cmVlX3Jvb3QgY2FsbHMgdG8gMS4KCSogY2xhc3MuYyAoY2xhc3Nfcm9vdHMpOiAgTmV3IHN0YXRpYyBmaWVsZC4KCShyZWdpc3RlcmVkX2NsYXNzLCBmaWVsZHNfaWRlbnQsIGluZm9faWRlbnQsIGNsYXNzX2xpc3QpOgoJTmV3IG1hY3JvcyBuYW1pbmcgZmllbGRzIG9mIHBhcnNlX3Jvb3RzLgoJKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiAgRG9uJ3QgcmVnaXN0ZXIgcm9vdHMgaGVyZS4KCShsYXlvdXRfY2xhc3MpOiAgU3RhdGljIGZpZWxkIGxpc3QgcmVwbGFjZWQgYnkgbWFjcm8gY2xhc3NfbGlzdC4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiAgQ2FsbCBnZ2NfYWRkX3RyZWVfcm9vdCBmb3IgNCByb290cy4KCUluaXRpYWxpemUgZmllbGRzX2lkZW50IGFuZCBpbmZvX2lkZW50IGhlcmUuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnZ2NfbWFya19qY2YpOiAgTmV3IGZ1bmN0aW9uLgoJKGluaXRfamNmX3BhcnNlKTogIFJlZ2lzdGVyIGN1cnJlbnRfamNmIGFzIGdnYyByb290LgoKMjAwMS0wMS0yMSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBsYW5nLmMgKHB1dF9kZWNsX25vZGUpOiAgUHJpbnQgbWV0aG9kJ3MgbmFtZS4KCjIwMDEtMDEtMjEgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogdmVyaWZ5LmMgKFZFUklGSUNBVElPTl9FUlJPUl9XSVRIX0lOREVYKTogIE5ldyBtYWNyby4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBVc2UgaXQsIGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMgb24gbG9hZHMuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIHZlcmlmeS5jIChtZXJnZV90eXBlX3N0YXRlKTogIFN0aWxsIG1heSBoYXZlIHRvIG1lcmdlIGV2ZW4gaWYKCUxBQkVMX1ZFUklGSUVEIChsYWJlbCkuCgoyMDAxLTAxLTIxICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIHBhcnNlLnkgKG1ldGhvZF9oZWFkZXIpOiAgRG9uJ3Qgc2V0IHRoZSBERUNMX05BTUUgb2YgYSBGVU5DVElPTl9ERUNMCgl0byBhIEVYUFJfV0lUSF9GSUxFX0xPQ0FUSU9OIC0gdGhhdCBpcyBqdXN0IHRvbyBmcmFnaWxlIGFuZCB3cm9uZy4KCjIwMDEtMDEtMTkgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogZXhwci5jIChwb3BfdHlwZV8wKTogIE9ubHkgcmV0dXJuIG9iamVjdF9wdHJfdHlwZV9ub2RlIG9uIG1pc21hdGNoCglpZiBleHBldGluZyBhbiBpbnRlcmZhY2UgdHlwZS4gIFJlZmluZXMgVG9tJ3MgY2hhbmdlIG9mIDIwMDAtMDktMTIuCgoyMDAxLTAxLTE4ICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGdjai50ZXhpIChJbnB1dCBPcHRpb25zKTogTWVudGlvbiAuamF2YSBmaWxlcy4KCjIwMDEtMDEtMTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogbGFuZy1vcHRpb25zLmggKC1XdW5zdXBwb3J0ZWQtamRrMTEpOiBSZW1vdmVkLgoJKiBsYW5nLmMgKGZsYWdfbm90X292ZXJyaWRpbmcpOiBEZWxldGVkLgoJKGZsYWdfc3RhdGljX2xvY2FsX2pkazFfMSk6IExpa2V3aXNlLgoJKGxhbmdfV19vcHRpb25zKTogUmVtb3ZlZCAidW5zdXBwb3J0ZWQtamRrMTEiIGVudHJ5LgoJKiBwYXJzZS55IChqYXZhX2NoZWNrX21ldGhvZHMpOiBSZW1vdmVkIGRlYWQgY29kZS4KCjIwMDEtMDEtMTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCglDaGFuZ2VzIHN1Z2dlc3RlZCBieSBQZXIgQm90aG5lcjoKCSogZ2NqLnRleGkgKElucHV0IE9wdGlvbnMpOiBEb24ndCBtZW50aW9uIGlucHV0IGZpbGVzLgoJKENvZGUgR2VuZXJhdGlvbik6IFVwZGF0ZWQgLS1tYWluIGluZm9ybWF0aW9uLgoJKEludm9raW5nIGpjZi1kdW1wKTogTWVudGlvbiB0aGF0IC0tamF2YXAgaXMgaW5jb21wbGV0ZS4KCUZyb20gQWxleGFuZHJlIFBldGl0LUJpYW5jbzoKCShXYXJuaW5ncyk6IERvbid0IG1lbnRpb24gLVd1bnN1cHBvcnRlZC1qZGsxMS4KCU15IHN0dWZmOgoJKENvbXBhdGliaWxpdHkpOiBNZW50aW9uIEpESyAxLjItbmVzcyBvZiBsaWJyYXJpZXMuCgkoUmVzb3VyY2VzKTogTWVudGlvbiByZXNvdXJjZXMgdXNlZCB3aGVuIHdyaXRpbmcgZ2NqLgoKMjAwMS0wMS0xNyAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgoKCSogZ2NqLnRleGk6IE5ldyBmaWxlLgoJKiBNYWtlLWxhbmcuaW4gKCQoc3JjZGlyKS9qYXZhL2djai5pbmZvKTogTmV3IHRhcmdldC4KCShqYXZhLmluZm8pOiBEZXBlbmQgb24gZ2NqLmluZm8uCgkoamF2YS9nY2ouZHZpKTogTmV3IHRhcmdldC4KCShqYXZhLmR2aSk6IERlcGVuZCBvbiBnY2ouZHZpLgoJKGphdmEuaW5zdGFsbC1pbmZvKTogV3JvdGUuCgoyMDAxLTAxLTE2ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBhcHBuZXQuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBVc2UgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRCBhZnRlcgoJaGF2aW5nIGNhbGxlZCBtYWtlX2RlY2xfcnRsLgoKMjAwMS0wMS0xNCAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJVmFyaW91cyBwYXRjaGVzIHRvIGVtaXQgYmV0dGVyIG1lc3NhZ2VzIG9uIHZlcmlmaWNhdGlvbiBlcnJvcnMuCgkqIGV4cHIuYyAocHVzaF90eXBlXzApOiAgUmV0dXJuIGVycm9yIGluZGljYXRpb24gb24gc3RhY2sgb3ZlcmZsb3csCglpbnN0ZWFkIG9mIGNhbGxpbmZnIGZhdGFsLgoJKHB1c2hfdHlwZSk6ICBOb3cganVzdCBjYWxsIHB1c2hfdHlwZV8wIChuZCBmYXRhbCBvbiBvdmVyZmxvdykuCgkocG9wX3R5cGVfMCk6ICBSZXR1cm4gZGV0YWlsZWQgZXJyb3IgbWVzc2FnZSAoaW4gYSBjaGFyKiogYXJndW1lbnQpLgoJKHBvcF90eXBlKTogIElmIHBvcF90eXBlXzAgZmFpbHMsIHByaW50IGVycm9yIG1lc3NhZ2UuCgkocG9wX2FyZ3VtZW50X3R5cGVzKTogIE1vdmVkIHRvIHZlcmlmeS5jLgoJKiB2ZXJpZnkuYyAocG9wX2FyZ3VtZW50X3R5cGVzKTogIE1vdmVkIGZyb20gZXhwci5jLgoJUmV0dXJuIGEgKHBvc3NpYmxlKSBlcnJvciBtZXNzYWdlLCByYXRoZXIgdGhhbiB2b2lkLgoJKFBPUF9UWVBFLCBQT1BfVFlQRV9DT05WLCBQVVNIX1RZUEUsIFBVU0hfUEVORElORyk6ICBOZXcgbWFjcm9zLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb24pOiAgVXNlIG5ldyBtYWNyb3MsIGltcHJvdmluZyBlcnJvciBtZXNzYWdlcy4KCUZvciBjYXNlIE9QQ09ERV9hc3RvcmUgdXNlIG9iamVjdF9wdHJfdHlwZV9ub2RlLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9VTkRFUkZMT1csIFRZUEVfVU5FWFBFQ1RFRCk6ICBOZXcgbWFjcm9zLgoJKHBvcF90eXBlXzAsIHB1c2hfdHlwZV8wLCBwb3BfYXJndW1lbnRfdHlwZXMpOiAgVXBkYXRlIGFjY29yZGluZ2x5LgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMgY2FzZSBFWFBSX1dJVEhfRklMRV9MT0NBVElPTik6IElmIGJvZHkgaXMKCWNvbnN0YW50LCByZXR1cm4gYm9keSB3aXRob3V0IHdyYXBwZXIuICAoSW1wcm92ZXMgY29uc3RhbnQgZm9sZGluZy4pCgkqIGxleC5jIChidWlsZF93Zmxfbm9kZSk6ICBDbGVhciBUUkVFX1RZUEUgZnJvbSByZXR1cm5lZCBub2RlLgoKMjAwMS0wMS0xMyAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogIEFzc2lnbmluZyB0byBhIGZpbmFsIGZpZWxkIG91dHNpZGUKCWFuIGluaXRpYWxpemVyIGRvZXMgbm90IHZpb2xhdGUgSlZNIHNwZWMsIHNvIHNob3VsZCBiZSB3YXJuaW5nLCBub3QKCWVycm9yLiAgKFN1bidzIHZlcmlmaWVyIGRvZXMgbm90IGNvbXBsYWluIC0gdGhvdWdoIE1pY3JvU29mdCdzIGRvZXMuKQoJCjIwMDEtMDEtMTIgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIGdqYXZhaC5jICh2ZXJzaW9uKSwgamNmLWR1bXAuYyAodmVyc2lvbik6IFVwZGF0ZSBjb3B5cmlnaHQgeWVhcgoJdG8gMjAwMS4KCjIwMDEtMDEtMTEgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogcGFyc2UueSAocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBQZXJtaXQgaW5zdGFuY2UgdmFyaWFibGVzIGZyb20KCWVuY2xvc2luZyBjb250ZXh0IGluIHN1cGVyIGNvbnN0cnVjdG9yIGNhbGwuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogUGVybWl0IGVuY2xvc2luZyBjbGFzcydzIHF1YWxpZmllZAoJInRoaXMiIGluIHN1cGVyIGNvbnN0cnVjdG9yIGNhbGwuCgoyMDAxLTAxLTEwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfdXRmOF9yZWYpOiBSZW1vdmUgbGFzdCBhcmd1bWVudCBpbiBjYWxsIHRvCgltYWtlX2RlY2xfcnRsOyB1c2UgbWFrZV9mdW5jdGlvbl9ydGwgaW5zdGVhZCBvZiBtYWtlX2RlY2xfcnRsLgoJKGJ1aWxkX2NsYXNzX3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX3N0YXRpY19maWVsZF9yZWYpOiBMaWtld2lzZS4KCShnZXRfZGlzcGF0Y2hfdGFibGUpOiBMaWtld2lzZS4KCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogTGlrZXdpc2UuCgkoZW1pdF9yZWdpc3Rlcl9jbGFzc2VzKTogTGlrZXdpc2UuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiBMaWtld2lzZS4KCShjcmVhdGVfcHJpbWl0aXZlX3Z0YWJsZSk6IExpa2V3aXNlLgoJKiBleHByLmMgKGJ1aWxkX2tub3duX21ldGhvZF9kZWYpOiBMaWtld2lzZS4KCShidWlsZF9qbmlfc3R1Yik6IExpa2V3aXNlLgoJKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IExpa2V3aXNlLgoJCjIwMDEtMDEtMTAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KCgkqIGp2c3BlYy5jIChqdmdlbm1haW5fc3BlYyk6IE9taXQgLWZlbmNvZGluZyBmcm9tIGNjMSBpbnZvY2F0aW9uLgoKMjAwMS0wMS0wOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAobGFuZ19wcmludGFibGVfbmFtZV93bHMpOiBOZXcgcHJvdG90eXBlLgoJKiBsYW5nLmMgKHB1dF9kZWNsX25hbWUpOiBSZW1vdmVkIGRlYWQgY29kZS4gVXNlIERFQ0xfQ09OVEVYVAoJcmF0aGVyIHRoYW4gYGN1cnJlbnRfY2xhc3MnIHRvIHByaW50IHR5cGUgbmFtZS4gRG9uJ3QgcHJlcGVuZCB0eXBlCgluYW1lcyB3aGVuIHByaW50aW5nIGNvbnN0cnVjdG9yIG5hbWVzLgoJKGxhbmdfcHJpbnRhYmxlX25hbWVfd2xzKTogTmV3IGZ1bmN0aW9uLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IFBhc3MgTlVMTCBgZmlsZScgYXJndW1lbnQgdG8KCWBidWlsZF9leHByX3dmbCcsIGFsd2F5IHNldCBFWFBSX1dGTF9GSUxFTkFNRV9OT0RFLgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IE1lc3NhZ2UgdHVuZWQgZm9yIGNvbnN0cnVjdG9ycy4KCShub3RfYWNjZXNzaWJsZV9wKTogR3JhbnQgYHByaXZhdGUnIGFjY2VzcyBmcm9tIHdpdGhpbgoJZW5jbG9zaW5nIGNvbnRleHRzLgoJCjIwMDEtMDEtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCUFsbCBmaWxlcyB3aXRoIHVwZGF0ZWQgY29weXJpZ2h0IHdoZW4gYXBwbGljYWJsZS4KCSogTWFrZS1sYW5nLmluIChKVkdFTk1BSU5fT0JTKTogUmVtb3ZlZCBqYXZhL21hbmdsZS5vLgoJKiBjbGFzcy5jIChtYW5nbGVfY2xhc3NfZmllbGQpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGFwcGVuZF9ncHBfbWFuZ2xlZF90eXBlLCBtYW5nbGVfc3RhdGljX2ZpZWxkLCBtYW5nbGVfZmllbGQpOiBMaWtld2lzZS4KCSh1dGY4X2NtcCwgY3h4X2tleXdvcmRfcCk6IE1vdmVkIHRvIGxleC5jLgoJKGJ1aWxkX2NsYXNzX3JlZik6IENhbGwgYGphdmFfbWFuZ2xlX2NsYXNzX2ZpZWxkJyBpbnN0ZWFkIG9mCglgbWFuZ2xlX2NsYXNzX2ZpZWxkLicKCShidWlsZF9kdGFibGVfZGVjbCk6IFJld3JpdHRlbiB0byBjYWxsIGBqYXZhX21hbmdsZV92dGFibGUuJwoJKGxheW91dF9jbGFzcyk6IENhbGwgYGphdmFfbWFuZ2xlX2RlY2wnIGluc3RlYWQgb2YgCglgbWFuZ2xlX3N0YXRpY19maWVsZC4nCgkoY3h4X2tleXdvcmRzKTogSW5pdGlhbGl6ZWQgc3RhdGljIGFycmF5IG1vdmVkIHRvIGBsZXguYy4nCgkobGF5b3V0X2NsYXNzX21ldGhvZCk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBTaW1wbGlmaWVkIHRvCgljYWxsIGBqYXZhX21hbmdsZV9kZWNsLicgTG9jYWwgYHB0cicgbW92ZWQgaW4gZm9yIGxvb3AgYm9keS4KCSogZGVjbC5jIChsYW5nX21hcmtfdHJlZSk6IE1hcmsgZmllbGQgYHBhY2thZ2VfbGlzdC4nCgkqIGphdmEtdHJlZS5oIChUWVBFX1BBQ0tBR0VfTElTVCk6IE5ldyBtYWNyby4KCShzdHJ1Y3QgbGFuZ190eXBlKTogTmV3IGZpZWxkIGBwYWNrYWdlX2xpc3QuJwoJKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogUHJvdG90eXBlIHJlbW92ZWQuCgkoYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUsIGFwcGVuZF9ncHBfbWFuZ2xlZF9jbGFzc3R5cGUsCgllbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lKTogTGlrZXdpc2UuCgkoY3h4X2tleXdvcmRfcCk6IE5ldyBwcm90b3R5cGUuCgkoamF2YV9tYW5nbGVfZGVjbCwgamF2YV9tYW5nbGVfY2xhc3NfZmllbGQsCglqYXZhX21hbmdsZV9jbGFzc19maWVsZF9mcm9tX3N0cmluZywgamF2YV9tYW5nbGVfdnRhYmxlKTogTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogQ29uc3RpZnkgYGZpbGUnIGFyZ3VtZW50IHRvCglgYnVpbGRfZXhwcl93ZmwuJwoJKiBqdmdlbm1haW4uYyAobWFpbl9tZXRob2RfcHJlZml4KTogR2xvYmFsIHZhcmlhYmxlIHJlbW92ZWQuCgkobWFpbl9tZXRob2Rfc3VmZml4KTogTGlrZXdpc2UuCgkoZG9fbWFuZ2xlX2NsYXNzbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogQ2FsbCBpdC4gRm9ybWF0IGNoYW5nZWQgdG8gYWNjb21vZGF0ZSBuZXcgbWFuZ2xpbmcgc2NoZW1lLgoJKiBsZXguYzogKHV0ZjhfY21wKTogQ29uZGl0aW9uYWxseSBwcm90b3R5cGVkLgoJKGN4eF9rZXl3b3Jkcyk6IE1vdmVkIGZyb20gY2xhc3MuYywgY29uZGl0aW9uYWxseSBkZWZpbmVkLgoJKHV0ZjhfY21wLCBjeHhfa2V5d29yZF9wKTogTGlrZXdpc2UuCgkqIG1hbmdsZS5jIChvYnN0YWNrLmgsIGdnYy5oKTogSW5jbHVkZWQuCgkobWFuZ2xlX2ZpZWxkX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkobWFuZ2xlX21ldGhvZF9kZWNsLCBtYW5nbGVfdHlwZSwgbWFuZ2xlX3BvaW50ZXJfdHlwZSwKCW1hbmdsZV9hcnJheV90eXBlLCBtYW5nbGVfcmVjb3JkX3R5cGUsCglmaW5kX2NvbXByZXNzaW9uX3BvaW50ZXJfbWF0Y2gsIGZpbmRfY29tcHJlc3Npb25fYXJyYXlfbWF0Y2gsCglmaW5kX2NvbXByZXNzaW9uX3JlY29yZF9tYXRjaCwKCWZpbmRfY29tcHJlc3Npb25fYXJyYXlfdGVtcGxhdGVfbWF0Y2gsIHNldF90eXBlX3BhY2thZ2VfbGlzdCwKCWVudHJ5X21hdGNoX3BvaW50ZXJfcCwgZW1pdF9jb21wcmVzc2lvbl9zdHJpbmcsIGluaXRfbWFuZ2xpbmcsCglmaW5pc2hfbWFuZ2xpbmcsIGNvbXByZXNzaW9uX3RhYmxlX2FkZCwgbWFuZ2xlX21lbWJlcl9uYW1lKTogTGlrZXdpc2UuCgkobWFuZ2xlX29ic3RhY2spOiBOZXcgZ2xvYmFsLgoJKE1BTkdMRV9SQVdfU1RSSU5HKTogTmV3IG1hY3JvLgoJKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogVHVybmVkIHN0YXRpYy4KCShhcHBlbmRfdW5pY29kZV9tYW5nbGVkX25hbWUpOiBSZW5hbWVkIGZyb20KCWBlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLicgIFR1cm5lZCBzdGF0aWMuIGBtYW5nbGVfb2JzdGFjaycKCXJlcGxhY2VzIGBvYnN0YWNrJywgcmVtb3ZlZCBmcm9tIHRoZSBwYXJhbWV0ZXIgbGlzdC4KCShhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSk6IFR1cm5lZCBzdGF0aWMuIGBtYW5nbGVfb2JzdGFjaycKCXJlcGxhY2VzIHBhcmFtZXRlciBgb2JzdGFjaycsIHJlbW92ZWQgZnJvbSB0aGUgcGFyYW1ldGVyIGxpc3QuIENhbGwgCglgYXBwZW5kX3VuaWNvZGVfbWFuZ2xlZF9uYW1lJyBpbnN0ZWFkIG9mIGBlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLgoJKGFwcGVuZF9ncHBfbWFuZ2xlZF9jbGFzc3R5cGUpOiBSZW1vdmVkLgoJKGNvbXByZXNzaW9uX3RhYmxlLCBjb21wcmVzc2lvbl9uZXh0KTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkqIHBhcnNlLnkgKHRlbXBvcmFyeV9vYnN0YWNrKTogRXh0ZXJuIGRlY2xhcmF0aW9uIHJlbW92ZWQuCgoyMDAxLTAxLTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Jpbm9wKTogQ29tcHV0ZSBtaXNzaW5nIHR5cGUgaW4gZXJyb3Igc2l0dWF0aW9ucy4KCjIwMDEtMDEtMDUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUHVzaCBpbml0aWFsIHZhbHVlIGZvciAiYXJyYXljbGFzcyIuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgbmV3IGNsYXNzIGZpZWxkICJhcnJheWNsYXNzIi4KCjIwMDEtMDEtMDUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCUZyb20gcGF0aGFAc29mdGxhYi5lcmljc3Nvbi5zZToKCSogcGFyc2UueSAoc3dpdGNoX2xhYmVsKTogVXNlIGJ1aWxkLCBub3QgYnVpbGQxLCB0byBjb25zdHJ1Y3QgCglERUZBVUxUX0VYUFIuCgoyMDAxLTAxLTA0ICBOZWlsIEJvb3RoICA8bmVpbEBkYWlrb2t1eWEuZGVtb24uY28udWs+CgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IENoYW5nZSAtTUEgdG8gLU1QLgoJKiBqY2YtZGVwZW5kLmMgKGpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQsIGpjZl9kZXBlbmRlbmN5X3NldF90YXJnZXQpOgoJVXBkYXRlIHRvIG5ldyBwcm90b3R5cGU7IGRvIHF1b3RlIHRhcmdldHMuCgkoamNmX2RlcGVuZGVuY3lfd3JpdGUpOiBVcGRhdGUuCgoyMDAwLTEyLTIyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCglTaG9ydGVuIHByaW1pdGl2ZSBhcnJheSBhbGxvY2F0aW9uIHBhdGg6CgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2UgX0p2X05ld1ByaW1BcnJheSBub3QgX0p2X05ld0FycmF5Cgl0byBjcmVhdGUgbmV3IHByaW1pdGl2ZSBhcnJheXMuCgkqIGV4cHIuYyAoYnVpbGRfbmV3YXJyYXkpOiBJZiBnZW5lcmF0aW5nIG5hdGl2ZSBjb2RlLCBjYWxsIAoJc29mdF9uZXdhcnJheV9ub2RlIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIHByaW1pdGl2ZSBUWVBFIGlkZW50aWZpZXIKCWluc3RlYWQgb2YgdHlwZV92YWx1ZS4KCQoyMDAwLTEyLTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCglGaXggZm9yIFBScyBnY2ovMzEyIGFuZCBnY2ovMjUzOgoJKiBwYXJzZS55ICh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBMb2FkIGNsYXNzZXMgZm9yIHNvdXJjZSBhbmQKCWRlc3QgaWYgdGhleSBhcm4ndCBhbHJlYWR5LgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBDYWxsIG1heWJlX2xheW91dF9zdXBlcl9jbGFzcyBvbiAKCXN1cGVyaW50ZXJmYWNlcyBhbHNvLCBidXQgb25seSBpZiBjb21waWxpbmcgZnJvbSBieXRlY29kZS4KCglGaXggZm9yIFBSIGdjai8zNzM6CgkqIHBhcnNlLnkgKGNyZWF0ZV9jbGFzcyk6IFNldCBBQ0NfU1RBVElDIGlmIGNsYXNzIGlzIGRlY2xhcmVkIGluIGFuCglpbnRlcmZhY2UuCgoyMDAwLTEyLTE1ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IFNldCB3Zmxfb3BlcmF0b3IgaWYgbm90IGFscmVhZHkKCXNldC4KCjIwMDAtMTItMTQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzKTogQ2hhbmdlIHRlc3QgdG8gY29ycmVjdGx5IGRldGVjdAoJYml0bWFwIG92ZXJmbG93LgoKMjAwMC0xMi0xNSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgoKCSogY29uZmlnLWxhbmcuaW4gKGxhbmdfZGlycyk6IEFkZGVkLgoKMjAwMC0xMi0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChlbmRfYXJ0aWZpY2lhbF9tZXRob2RfYm9keSk6IEZpeGVkIHVuZGVmaW5lZCBiZWhhdmlvci4KCUNyZWRpdHMgZ28gdG8gcnRoIGZvciBmaW5kaW5nIGl0LgoKMjAwMC0xMi0xMyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfc3RhdGljX2ZpbmFsX3ZhcmlhYmxlX2Fzc2lnbm1lbnRfZmxhZyk6IEZpeCBzcGVsbGluZy4KCjIwMDAtMTEtMDcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9MRVhfQyk6IEFkZGVkIGNoYXJ0YWJsZXMuaC4KCSogbGV4LmMgKGphdmFfaWdub3JhYmxlX2NvbnRyb2xfcCk6IFJlbW92ZWQuCgkoamF2YV9sZXR0ZXJfb3JfZGlnaXRfcCk6IFJlbW92ZWQuCgkoamF2YV9zdGFydF9jaGFyX3ApOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9yZWFkX2NoYXIpOiBSZXR1cm4gYGludCcsIG5vdCBgdW5pY29kZV90Jy4gIENoYW5nZWQKCWNhbGxlcnMuCgkoamF2YV9yZWFkX3VuaWNvZGUpOiBMaWtld2lzZS4KCShqYXZhX3JlYWRfdW5pY29kZV9jb2xsYXBzaW5nX3Rlcm1pbmF0b3JzKTogTGlrZXdpc2UuCgkoamF2YV9nZXRfdW5pY29kZSk6IExpa2V3aXNlLgoJKGphdmFfbmV3X2xleGVyKTogSW5pdGlhbGl6ZSBoaXRfZW9mLgoJKGphdmFfcGFyc2VfZW5kX2NvbW1lbnQpOiBUYWtlIGBpbnQnIGFyZ3VtZW50LgoJKGphdmFfcGFyc2VfZG9jX3NlY3Rpb24pOiBMaWtld2lzZS4KCShqYXZhX3BhcnNlX2VzY2FwZV9zZXF1ZW5jZSk6IERvbid0IGFsbG93IGJhY2tsYXNoLW5ld2xpbmUuCglSZXR1cm4gYGludCcuCgkqIGxleC5oIChKQVZBX0RJR0lUX1ApOiBSZW1vdmVkLgoJKF9KQVZBX0xFVFRFUl9PUl9ESUdJVF9QKTogUmVtb3ZlZC4KCShfSkFWQV9JREVOVElGSUVSX0lHTk9SQUJMRSk6IFJlbW92ZWQuCgkoSkFWQV9TVEFSVF9DSEFSX1ApOiBSZW5hbWVkIGZyb20gSkFWQV9JRF9DSEFSX1AuCgkoSkFWQV9QQVJUX0NIQVJfUCk6IE5ldyBtYWNyby4KCShVRU9GKTogTm93IC0xLgoJKEpBVkFfQ0hBUl9FUlJPUik6IE5vdyAtMi4KCShqYXZhX2xleGVyKTogTmV3IGZpZWxkIGBoaXRfZW9mJy4KCSogY2hhcnRhYmxlcy5oOiBOZXcgZmlsZS4KCSogZ2VuLXRhYmxlLnBsOiBuZXcgZmlsZS4KCjIwMDAtMTEtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KICAgICAgICAgICAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IE9ubHkgYWxsb3cgY29tcG91bmQgYXNzaWdubWVudCBvZgoJcmVmZXJlbmNlIHR5cGUgaWYgdHlwZSBpcyBTdHJpbmcuCgoyMDAwLTEyLTA5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS9qY2YtcGF0aC5vOik6IGxpYmdjai5qYXIgcmVwbGFjZXMgbGliZ2NqLnppcC4KCWpjZi1wYXRoLmM6IExpa2V3aXNlLgoKMjAwMC0xMi0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CgoJKiB6aXBmaWxlLmggKFppcERpcmVjdG9yeSk6IERlY2xhcmUgc2l6ZSwgdW5jb21wcmVzc2VkX3NpemUsCglmaWxlc3RhcnQgYW5kIGZpbGVuYW1lX2xlbmd0aCBhcyBpbnQgdmFsdWVzLgoKMjAwMC0xMi0wNyAgTW8gRGVKb25nICA8bWRlam9uZ0ByZWRoYXQuY29tPgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiBDb3JyZWN0IHRoZSBsb2dpYyB0aGF0IHRlc3RzIHRvIHNlZSBpZiBhCgkuamF2YSBmaWxlIGlzIG5ld2VyIHRoYW4gaXRzIC5jbGFzcyBmaWxlLiBUaGUgY29tcGlsZXIgd2FzCglpbmNvcnJlY3RseSBwcmludGluZyBhIHdhcm5pbmcgd2hlbiBmaWxlIG1vZCB0aW1lcyB3ZXJlIGVxdWFsLgoKMjAwMC0xMi0wNyAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LnN0YW5mb3JkLmVkdT4KCgkqIGp2Z2VubWFpbi5jOiBVc2UgSVNQUklOVCBub3QgaXNhc2NpaS4KCjIwMDAtMTItMDYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZW5kX2FydGlmaWNpYWxfbWV0aG9kX2JvZHkpOiBGaXhlZCB0eXBvLgoKMjAwMC0xMi0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IFBpY2sgdGhlIGNvcnJlY3QgZW5jbG9zaW5nCgljb250ZXh0IHdoZW4gY3JlYXRpbmcgaW5uZXIgY2xhc3MgaW5zdGFuY2VzLgoJRml4ZXMgZ2NqLzMzMi4KCjIwMDAtMTEtMjYgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIGdqYXZhaC5jICh2ZXJzaW9uKSwgamNmLWR1bXAuYyAodmVyc2lvbiksIGp2LXNjYW4uYyAodmVyc2lvbik6CglVcGRhdGUgY29weXJpZ2h0IHllYXIgdG8gMjAwMC4KCjIwMDAtMTEtMjMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogamNmLXBhcnNlLmMgKGluaXRfamNmX3BhcnNlKTogUmVnaXN0ZXIgY3VycmVudF9maWxlX2xpc3Qgcm9vdC4KCU1vdmUgY3VycmVudF9maWxlX2xpc3Qgb3V0IG9mIHl5cGFyc2UgYW5kIG1ha2UgaXQgc3RhdGljLgoKCSogZXhwci5jOiBEZWNsYXJlIHF1aWNrX3N0YWNrIGFuZCB0cmVlX2xpc3RfZnJlZV9saXN0IGFzIHN0YXRpYwoJKGluaXRfZXhwcl9wcm9jZXNzaW5nKTogUmVnaXN0ZXIgcXVpY2tfc3RhY2sgYW5kCgl0cmVlX2xpc3RfZnJlZV9saXN0IHJvb3RzLgoKMjAwMC0xMS0yMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3MpOiBOZXcgbG9jYWwgYGRlY2xfY3R4JywgdXNlCglpdC4gQ2hlY2sgZm9yIGZpZWxkJ3MgY29udGV4dCBhbmQgY3VycmVudCBjbGFzcyBpbW1lZGlhdGUgb3V0ZXIKCWNvbnRleHQgaW5oZXJpdGFuY2UuCgkob3V0ZXJfZmllbGRfYWNjZXNzX3ApOiBDb25zaWRlciBmaWVsZHMgaW5oZXJpdGVkIGZyb20gdGhlIGxhc3QKCWVuY2xvc2luZyBjb250ZXh0LgoJKGJ1aWxkX2FjY2Vzc190b190aGlzbik6IFN0b3AgYXQgdGhlIGxhc3QgZW5jbG9zaW5nIGNvbnRleHQgaWYKCW5lY2Vzc2FyeS4KCUZpeGVzIGdjai8zNjcuCgpUaHUgTm92IDIzIDAyOjE5OjE0IDIwMDAgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQHJlZGhhdC5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGp2c3BlYy5vKTogRGVwZW5kIG9uICQoQ09ORklHX0gpLgoKMjAwMC0xMS0yMiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBqY2YtcGFyc2UuYyAoZ2V0X2NvbnN0YW50KTogQ2FsbCBVVDhfQ0hBUl9MRU5HVEggb24gYHV0ZjgnLCBub3QgdGhlCglzY3JhdGNoIGJ1ZmZlci4KCjIwMDAtMTEtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2LXNjYW4uYyAoaGVscCk6IERvY3VtZW50IC0tY29tcGxleGl0eS4KCShvcHRpb25zKTogQWRkZWQgLS1jb21wbGV4aXR5LgoJKGZsYWdfY29tcGxleGl0eSk6IE5ldyBnbG9iYWwuCgkobWFpbik6IENhbGwgYHJlcG9ydCcuCgkqIHBhcnNlLXNjYW4ueSAoY29tcGxleGl0eSk6IE5ldyBnbG9iYWwuCgkoaWZfdGhlbl9zdGF0ZW1lbnQsIGlmX3RoZW5fZWxzZV9zdGF0ZW1lbnQsCglpZl90aGVuX2Vsc2Vfc3RhdGVtZW50X25zaSwgc3dpdGNoX2Jsb2NrX3N0YXRlbWVudF9ncm91cCwKCXdoaWxlX2V4cHJlc3Npb24sIGRvX3N0YXRlbWVudCwgZm9yX2JlZ2luLCBjb250aW51ZV9zdGF0ZW1lbnQsCgl0aHJvd19zdGF0ZW1lbnQsIGNhdGNoX2NsYXVzZSwgZmluYWxseSwgbWV0aG9kX2ludm9jYXRpb24sCgljb25kaXRpb25hbF9hbmRfZXhwcmVzc2lvbiwgY29uZGl0aW9uYWxfb3JfZXhwcmVzc2lvbiwKCWNvbmRpdGlvbmFsX2V4cHJlc3Npb24pOiBVcGRhdGUgY29tcGxleGl0eS4KCShyZXNldF9yZXBvcnQpOiBSZXNldCBjb21wbGV4aXR5LgoJKHJlcG9ydCk6IE5ldyBmdW5jdGlvbi4KCjIwMDAtMTEtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jICh5eWxleCk6IEFkZGVkIFNUUklDVF9USyBjYXNlLgoJKiBwYXJzZS55IChTVFJJQ1RfVEspOiBBZGRlZC4KCSogcGFyc2Utc2Nhbi55IChTVFJJQ1RfVEspOiBBZGRlZC4KCSogTWFrZS1sYW5nLmluICgkKHNyY2RpcikvamF2YS9rZXl3b3JkLmgpOiBBZGRlZCBtaXNzaW5nIGBcJyBhbmQKCWA7Jy4gIFVzZSA0LCBub3QgMywgd2l0aCAtayBvcHRpb24uICBDb3JyZWN0bHkgcmVuYW1lIHJlc3VsdGluZwoJZmlsZS4KCSoga2V5d29yZC5oOiBSZWJ1aWx0LgoJKiBrZXl3b3JkLmdwZXJmIChzdHJpY3RmcCk6IEFkZGVkLgoKMjAwMC0xMS0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKHl5bGV4KTogUmVjb2duaXplIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50cyB3aXRoIGxlYWRpbmcKCTAuCgoyMDAwLTExLTE5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBqYXZhLXRyZWUuaCAoY3ljbGljX2luaGVyaXRhbmNlX3JlcG9ydCk6IENvbnN0aWZ5LgoJKiBwYXJzZS55IChjeWNsaWNfaW5oZXJpdGFuY2VfcmVwb3J0KTogTGlrZXdpc2UuCgoyMDAwLTExLTE3ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuc3RhbmZvcmQuZWR1PgoKCSogcGFyc2UueSAoZ29hbCk6IFJlbW92ZSBjYWxsIHRvIGdnY19hZGRfc3RyaW5nX3Jvb3QuCgoyMDAwLTExLTE2ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuc3RhbmZvcmQuZWR1PgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCksIHBhcnNlLnkgKGRvX21lcmdlX3N0cmluZ19jc3RlKToKCUNyZWF0ZSBzdHJpbmcgaW4gc2NyYXRjaCBidWZmZXIsIHRoZW4gcGFzcyB0byBidWlsZF9zdHJpbmcuCgoyMDAwLTExLTEzICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwYXJzZS55IChpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dCk6IEFkZAoJQVRUUklCVVRFX1BSSU5URi4KCjIwMDAtMTEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogamNmLXBhcnNlLmMgKHByb2Nlc3NfemlwX2Rpcik6IEFkZCBmaW5wdXQgcGFyYW1ldGVyLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogQ2FsbCBwcm9jZXNzX3ppcF9kaXIgd2l0aCBhcHByb3ByaWF0ZQoJYXJndW1lbnQuCgoyMDAwLTExLTEwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBkZWNsLmMgKGNvcHlfbGFuZ19kZWNsKTogVXNlIG1lbWNweSwgbm90IGJjb3B5LgoJKiBqY2YtcGFyc2UuYyAoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBMaWtld2lzZS4KCjIwMDAtMTEtMDkgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBhcnNlLnkgKGNyZWF0ZV9uZXdfcGFyc2VyX2NvbnRleHQpOiBVc2UgbWVtc2V0ICgpIGluc3RlYWQgb2YKCWJ6ZXJvICgpLgoKMjAwMC0xMS0wOCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByb2Nlc3NfZmlsZSk6IE9ubHkgaW5jbHVkZSBnY2ovY25pLmggd2hlbiBnZW5lcmF0aW5nCglDTkkgc3R1YnMuCgoyMDAwLTExLTA3ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBleHByLmMgKG5vdGVfaW5zdHJ1Y3Rpb25zKSwgamNmLWlvLmMgKGZpbmRfY2xhc3MpLCBqY2YtcGFyc2UuYwoJKGluaXRfb3V0Z29pbmdfY3Bvb2wpLCBsZXguYyAoamF2YV9pbml0X2xleCk6IFVzZSBtZW1zZXQgKCkKCWluc3RlYWQgb2YgYnplcm8gKCkuCgoyMDAwLTExLTA1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsZXguaCAoSkFWQV9GTE9BVF9SQU5HRV9FUlJPUik6IFR5cG8gZml4LgoJKiBsZXguYyAoSVNfWkVSTyk6IE5ldyBkZWZpbmUuCgkoamF2YV9wZXJmb3JtX2F0b2YpOiBFcnJvciBvbiBmbG9hdGluZyBwb2ludCB1bmRlcmZsb3cuCgoyMDAwLTExLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9wYXJzZV9lc2NhcGVfc2VxdWVuY2UpOiBPbmx5IHJlYWQgdHdvIG9jdGFsCgljaGFyYWN0ZXJzIGlmIHRoZSBmaXJzdCBvbmUgaXMgZ3JlYXRlciB0aGFuIDMuICBEb24ndCBhbGxvdwoJIm9jdGFsIiBudW1iZXJzIHRvIGluY2x1ZGUgdGhlIGRpZ2l0cyA4IG9yIDkuCgoyMDAwLTExLTA1ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuZGlzdGRpcik6IFJlbW92ZS4KCjIwMDAtMTEtMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS5kdmkpOiBOZXcgdGFyZ2V0LgoJUGFydGlhbCBmaXggZm9yIFBSIG90aGVyLzU2Ny4KCgkqIGxhbmctb3B0aW9ucy5oOiBNZW50aW9uIC1Xb3V0LW9mLWRhdGUuCgkqIGpjZi1kdW1wLmMgKGZsYWdfbmV3ZXIpOiBOZXcgZ2xvYmFsLgoJKiBnamF2YWguYyAoZmxhZ19uZXdlcik6IE5ldyBnbG9iYWwuCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogT25seSB3YXJuIHdoZW4gZmxhZ19uZXdlciBzZXQuCgkqIGxhbmcuYyAoZmxhZ19uZXdlcik6IE5ldyBnbG9iYWwuCgkoc3RydWN0IHN0cmluZ19vcHRpb24pOiBOZXcgZGVjbGFyYXRpb24uCgkobGFuZ19XX29wdGlvbnMpOiBOZXcgZ2xvYmFsLgoJKHByb2Nlc3Nfb3B0aW9uX3dpdGhfbm8pOiBOZXcgZnVuY3Rpb24uCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogVXNlIGl0LgoKCSogY2xhc3MuYyAoY3h4X2tleXdvcmRfcCk6IEFjY2VwdCBrZXl3b3JkcyB3aXRoIHRyYWlsaW5nIGAkJ3MuCgkqIGdqYXZhaC5jIChjeHhfa2V5d29yZF9zdWJzdCk6IEhhbmRsZSBhbnkgbnVtYmVyIG9mIHRyYWlsaW5nCglgJCcuCgoJKiBsZXguaCAoX0pBVkFfSURFTlRJRklFUl9JR05PUkFCTEUpOiBOZXcgbWFjcm8uCgkoSkFWQV9JRF9DSEFSX1ApOiBBbHNvIHRyeSBqYXZhX2lnbm9yYWJsZV9jb250cm9sX3AuCgkqIGxleC5jIChqYXZhX3JlYWRfdW5pY29kZSk6IFJlbW92ZWQgYHRlcm1fY29udGV4dCcgYXJndW1lbnQuCglSZWNvZ25pemUgYW55IG51bWJlciBvZiBgdScgaW4gYFx1Jy4KCShqYXZhX3JlYWRfdW5pY29kZV9jb2xsYXBzaW5nX3Rlcm1pbmF0b3JzKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfZ2V0X3VuaWNvZGUpOiBVc2UgaXQuCgkoamF2YV9saW5ldGVybWluYXRvcik6IFJlbW92ZWQuCgkoeXlsZXgpOiBQcm9kdWNlIGVycm9yIGlmIGNoYXJhY3RlciBsaXRlcmFsIGlzIG5ld2xpbmUgb3Igc2luZ2xlCglxdW90ZS4gIFJldHVybiBpZiBlb2YgZm91bmQgaW4gbWlkZGxlIG9mIGAvLycgY29tbWVudC4gIEVPRiBpbgoJYC8vJyBjb21tZW50IGlzIG9ubHkgYW4gZXJyb3IgaWYgcGVkYW50aWMuCgkoamF2YV9pZ25vcmFibGVfY29udHJvbF9wKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfcGFyc2VfZW5kX2NvbW1lbnQpOiBSZXR1cm4gaWYgZW9mIGZvdW5kIGluIG1pZGRsZSBvZgoJY29tbWVudC4KCUluY2x1ZGUgZmxhZ3MuaC4KCSoganYtc2Nhbi5jIChwZWRhbnRpYyk6IE5ldyBnbG9iYWwuCgoyMDAwLTEwLTMxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG91dGVyX2ZpZWxkX2FjY2Vzc19wKTogSW5oZXJpdGVkIGZpZWxkcyBhcmVuJ3QKCWNvbnNpZGVyIG91dGVyIGZpZWxkcy4KCShtYXliZV9idWlsZF90aGlzbl9hY2Nlc3NfbWV0aG9kKTogVXNlCglQVVJFX0lOTkVSX0NMQVNTX1RZUEVfUCBpbnN0ZWFkIG9mIElOTkVSX0NMQVNTX1RZUEVfUC4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFRyaWdnZXIgYW4gZXJyb3IgaWYgYSBzdGF0aWMgZmllbGQKCWlzIGJlaW5nIGFjY2Vzc2VkIGFzIGFuIG91dGVyIGZpZWxkLgoKMjAwMC0xMC0yOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKExJQkdDSl9aSVBfRklMRSk6IERlZmluZSB3aXRoIGAkKHByZWZpeCknLgoJRml4ZXMgZ2NqLzM2NS4KCjIwMDAtMTAtMjcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5zdGFuZm9yZC5lZHU+CgoJKiBNYWtlLWxhbmcuaW46IE1vdmUgYWxsIGJ1aWxkIHJ1bGVzIGhlcmUgZnJvbSBNYWtlZmlsZS5pbiwKCWFkYXB0IHRvIG5ldyBjb250ZXh0LiAgV3JhcCBhbGwgcnVsZXMgdGhhdCBjaGFuZ2UgdGhlIGN1cnJlbnQKCWRpcmVjdG9yeSBpbiBwYXJlbnRoZXNlcy4gIEV4cHVuZ2UgYWxsIHJlZmVyZW5jZXMgdG8gJChQKS4KCVdoZW4gb25lIGNvbW1hbmQgZGVwZW5kcyBvbiBhbm90aGVyIGFuZCB0aGV5J3JlIHJ1biBhbGwgYXQKCW9uY2UsIHVzZSAmJiB0byBzZXBhcmF0ZSB0aGVtLCBub3QgOy4gIEFkZCBPVVRQVVRfT1BUSU9OIHRvCglhbGwgb2JqZWN0LWZpbGUgZ2VuZXJhdGlvbiBydWxlcy4gIERlbGV0ZSBvYnNvbGV0ZSB2YXJpYWJsZXMuCgoJKiBNYWtlZmlsZS5pbjogRGVsZXRlLgoJKiBjb25maWctbGFuZy5pbjogRGVsZXRlIG91dHB1dHM9IGxpbmUuCgoyMDAwLTEwLTI1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogTlVMTGlmeSB0aGlzX2FyZyB3aGVuIGFscmVhZHkKCWluc2VydGVkLgoJKG1heWJlX3VzZV9hY2Nlc3NfbWV0aG9kKTogSGFuZGxlIGNhbGwgdG8gbWV0aG9kcyB1bnJlbGF0ZWQgdG8gdGhlCgljdXJyZW50IGNsYXNzLiBGaXhlZCBjb21tZW50LgoJRml4ZXMgZ2NqLzM2MS4KCjIwMDAtMTAtMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKICAgICAgICogcGFyc2UuaCAoSU5ORVJfRU5DTE9TSU5HX1NDT1BFX0NIRUNLKTogQ2hlY2sgaW5oZXJpdGVkIHR5cGUgaW4KICAgICAgIHNjb3BlLgoKMjAwMC0xMC0yNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbmV3X2xleGVyKTogSW5pdGlhbGl6ZSBuZXcgZmllbGRzLiAgV29yayBhcm91bmQKCWJyb2tlbiBpY29udigpIGltcGxlbWVudGF0aW9ucy4KCShqYXZhX3JlYWRfY2hhcik6IFN3YXAgYnl0ZXMgaWYgcmVxdWlyZWQuICBVc2UgZmFsbGJhY2sgZGVjb2RlciBpZgoJcmVxdWlyZWQuCgkoYnl0ZXN3YXBfaW5pdCwgbmVlZF9ieXRlc3dhcCk6IE5ldyBnbG9iYWxzLgoJKGphdmFfZGVzdHJveV9sZXhlcik6IE9ubHkgY2xvc2UgaWNvbnYgaGFuZGxlIGlmIGl0IGlzIGluIHVzZS4KCSogbGV4LmggKGphdmFfbGV4ZXIpOiBOZXcgZmllbGRzIHJlYWRfYW55dGhpbmcsIGJ5dGVfc3dhcCwKCXVzZV9mYWxsYmFjay4KCU1hZGUgb3V0X2J1ZmZlciB1bnNpZ25lZC4KCjIwMDAtMTAtMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVnaXN0ZXJfaW5jb21wbGV0ZV90eXBlKTogSW5jbHVkZSBKREVQX0ZJRUxEIGFzIGEgY2FzZQoJd2hlcmUgYW4gZW5jbG9zaW5nIGNvbnRleHQgY2FuIGJlIHNldCBvbiB0aGUgamRlcC4KCShkb19yZXNvbHZlX2NsYXNzKTogRml4ZWQgaWRlbnRhdGlvbi4KCjIwMDAtMTAtMjEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChORUVEX1BFRUtfQVRUUklCVVRFLCBORUVEX1NLSVBfQVRUUklCVVRFKTogRGVmaW5lCgoJKiBqY2YtcmVhZGVyLmMgKHBlZWtfYXR0cmlidXRlLCBza2lwX2F0dHJpYnV0ZSk6IE9ubHkgZGVmaW5lCgl3aGVuIHJlcXVlc3RlZC4KCgkqIHBhcnNlLmggKHl5ZXJyb3IpOiBJZiBKQzFfTElURSwgbWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCgkqIHZlcmlmeS5jIChDSEVDS19QQ19JTl9SQU5HRSk6IENhc3QgcmVzdWx0IG9mIHN0bXQtZXhwciB0byB2b2lkLgoKMjAwMC0xMC0xOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoT1AxKTogVXBkYXRlIGBsYXN0X2JjJy4KCShzdHJ1Y3QgamNmX2Jsb2NrKTogRml4ZWQgaW5kZW50YXRpb24gYW5kIHR5cG8gaW4gY29tbWVudHMuICBOZXcKCWZpZWxkIGBsYXN0X2JjJy4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEluc2VydCBgbm9wJyBpZiBganNyJyBpbW1lZGlhdGVseQoJZm9sbG93cyBgbW9uaXRvcmVudGVyJy4KCSogcGFyc2UueSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IE5ldyBsb2NhbCBgdG1wJy4gQ2FsbAoJYHBhdGNoX3N0cmluZycuCglGaXhlcyBnY2ovMjMyLgoKMjAwMC0xMC0xNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogUmVjb2duaXplIC1NRiBhbmQgLU1ULgoJKiBsYW5nLXNwZWNzLmg6IEFkZGVkICV7TUF9LCAle01GKn0sICV7TVQqfS4KCSogbGFuZy1vcHRpb25zLmg6IEFkZGVkIC1NQSwgLU1ULCAtTUYuLgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlY29nbml6ZSAtTUEsIC1NVCwgLU1GLgoJKERFUEVORF9UQVJHRVRfU0VUKTogTmV3IG1hY3JvLgoJKERFUEVORF9GSUxFX0FMUkVBRFlfU0VUKTogTGlrZXdpc2UuCgkoaW5pdF9wYXJzZSk6IEhhbmRsZSBuZXcgZmxhZ3MuCgkqIGpjZi5oIChqY2ZfZGVwZW5kZW5jeV9wcmludF9kdW1taWVzKTogRGVjbGFyZS4KCSogTWFrZS1sYW5nLmluIChzLWphdmEpOiBBZGRlZCBta2RlcHMuby4KCSogTWFrZWZpbGUuaW4gKEJBQ0tFTkQpOiBBZGRlZCBta2RlcHMuby4KCSguLi9nY2poJChleGVleHQpKTogQWRkZWQgbWtkZXBzLm8uCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCkpOiBBZGRlZCBta2RlcHMuby4KCSogamNmLWRlcGVuZC5jOiBJbmNsdWRlIG1rZGVwcy5oLgoJKHN0cnVjdCBlbnRyeSwgZGVwZW5kZW5jaWVzLCB0YXJnZXRzLCBNQVhfT1VUUFVUX0NPTFVNTlMsCglhZGRfZW50cnkpOiBSZW1vdmVkLgoJKGpjZl9kZXBlbmRlbmN5X3Jlc2V0KTogUmV3cm90ZS4KCShkZXBlbmRlbmNpZXMpOiBOZXcgZ2xvYmFsLgoJKGpjZl9kZXBlbmRlbmN5X3NldF90YXJnZXQpOiBSZXdyb3RlLgoJKGpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQpOiBMaWtld2lzZS4KCShqY2ZfZGVwZW5kZW5jeV9hZGRfZmlsZSk6IExpa2V3aXNlLgoJKG11bmdlKTogUmVtb3ZlZC4KCShwcmludF9lbnRzKTogUmVtb3ZlZC4KCShqY2ZfZGVwZW5kZW5jeV93cml0ZSk6IFJld3JvdGUuCgkocHJpbnRfZHVtbWllcyk6IE5ldyBnbG9iYWwuCgkoamNmX2RlcGVuZGVuY3lfcHJpbnRfZHVtbWllcyk6IE5ldyBmdW5jdGlvbgoJKGpjZl9kZXBlbmRlbmN5X3dyaXRlKTogQ2FsbCBkZXBzX2R1bW15X3RhcmdldHMgaWYgcmVxdWlyZWQuCgoyMDAwLTEwLTE4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChhZGRfY2xhc3NfZGVjbCk6IFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlcyBgdG5hbWUnLAoJYHRsZW4nIGFuZCBgbmFtZV9pbmRleCcuCgkqIGphdmEtdHJlZS5oIChCVUlMRF9GSUxFTkFNRV9JREVOVElGSUVSX05PREUpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2Vfc291cmNlKTogVXNlIGl0IGFuZCBzZXQgRVhQUl9XRkxfRklMRU5BTUUKCWluIGB3Zmxfb3BlcmF0b3InIHdpdGggdmFsdWUuCgkoeXlwYXJzZSk6IFVzZSBCVUlMRF9GSUxFTkFNRV9JREVOVElGSUVSX05PREUuCgkoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBGaXhlZCBpZGVudGF0aW9uLgoJKiBsZXguYyAoamF2YV9nZXRfbGluZV9jb2wpOiBVc2UgRU9GLiBUdW5lZCBgXicgcGxhY2VtZW50LgoJKiBwYXJzZS55IChhbmFseXplX2NsaW5pdF9ib2R5KTogTmV3IGZ1bmN0aW9uLgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBSZXNldCBgY3VycmVudF9zdGF0aWNfYmxvY2snLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwpOiBTZXQgRVhQUl9XRkxfRklJTEVOQU1FX05PREUgaW4KCWB3Zmxfb3BlcmF0b3InIHdpdGggbmV3IHZhbHVlLgoJKGxvb2t1cF9jbCk6IFVzZSBFWFBSX1dGTF9GSUxFTkFNRS4KCShtYXliZV95YW5rX2NsaW5pdCk6IEhhbmRsZSBib2d1cyA8Y2xpbml0PiBib2RpZXMsIGNhbGwKCWFuYWx5emVfY2xpbml0X2JvZHkuCgkoYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzKTogQWNjZXNzIHRvIHRoaXMkPG4+IGJ1aWx0IGZyb20KCWN1cnJlbnRfY2xhc3MsIG5vdCBpdHMgb3V0ZXIgY29udGV4dC4KCShidWlsZF9hY2Nlc3NfdG9fdGhpc24pOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIFRpZGllZCB0aGluZ3MgdXAuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIGBULnRoaXMnIGFuZCBgVC50aGlzLmYoKScuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBVc2UgYGlzX3N0YXRpY19mbGFnJyB3aGVuIGFscmVhZHkKCWluaXRpYWxpemVkLgoJKHBhdGNoX25ld2FycmF5KTogUmVtb3ZlZCBhc3NpZ25tZW50IGluIHRlcm5hcnkgb3BlcmF0b3IuCgoyMDAwLTEwLTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChmcmVlX2VoX3Jhbmdlcyk6IERvbid0IGZyZWUgYHdob2xlX3JhbmdlJy4KCjIwMDAtMTAtMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaW5pdF9jbGFzc19wcm9jZXNzaW5nIGJlZm9yZQoJYW55dGhpbmcgZWxzZS4KCjIwMDAtMTAtMTMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBVc2UKCUxPQ0FMX0ZJTkFMX1AuCgkqIGRlY2wuYyAocHVzaF9qdm1fc2xvdCk6IFVzZSBNQVlCRV9DUkVBVEVfVkFSX0xBTkdfREVDTF9TUEVDSUZJQy4KCShnaXZlX25hbWVfdG9fbG9jYWxzKTogTGlrZXdpc2UuCgkobGFuZ19tYXJrX3RyZWUpOiBIYW5kbGUgRklFTERfREVDTC4gUmVnaXN0ZXIgYGFtJyBhbmQgYHdmbCcKCWZpZWxkcyBpbiBsYW5nX2RlY2xfdmFyLgoJKiBqYXZhLXRyZWUuaCAoREVDTF9GVU5DVElPTl9TWU5USEVUSUNfQ1RPUiwKCURFQ0xfRlVOQ1RJT05fQUxMX0ZJTkFMX0lOSVRJQUxJWkVEKTogTmV3IG1hY3Jvcy4KCShGSUVMRF9JTk5FUl9BQ0NFU1MpOiBSZW1vdmVkIHVnbHkgY2FzdCwgbWFjcm8gcmV3cml0dGVuLgoJKEZJRUxEX0lOTkVSX0FDQ0VTU19QLCBERUNMX0ZJRUxEX0ZJTkFMX0lVRCwgREVDTF9GSUVMRF9GSU5BTF9MSUlDLAoJREVDTF9GSUVMRF9GSU5BTF9JRVJSLCBERUNMX0ZJRUxEX0ZJTkFMX1dGTCk6IE5ldyBtYWNyb3MuCgkoTE9DQUxfRklOQUwpOiBSZXdyaXR0ZW4uCgkoTE9DQUxfRklOQUxfUCwgRklOQUxfVkFSSUFCTEVfUCwgQ0xBU1NfRklOQUxfVkFSSUFCTEVfUAoJTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCBsYW5nX2RlY2wpOiBGaXhlZCBjb21tZW50cy4gQWRkZWQgYHN5bnRoZXRpY19jdG9yJyBhbmQKCWBpbml0X2ZpbmFsJyBmaWVsZHMuCgkoc3RydWN0IGxhbmdfZGVjbF92YXIpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIEFkZGVkIGBhbScsIGB3ZmwnLAoJYGZpbmFsX3VpZCcsIGBmaW5hbF9saWljJywgYGZpbmFsX2llcnInIGFuZCBgbG9jYWxfZmluYWwnIGZpZWxkcy4KCShUWVBFX0hBU19GSU5BTF9WQVJJQUJMRSk6IE5ldyBtYWNyby4KCShzdHJ1Y3QgbGFuZ190eXBlKTogQWRkZWQgYGFmdicgZmllbGQuCgkqIHBhcnNlLnkgKGNoZWNrX3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcpOiBOZXcgZnVuY3Rpb24uCgkocmVzZXRfc3RhdGljX2ZpbmFsX3ZhcmlhYmxlX2Fzc2lnbm1lbnRfZmxhZyk6IExpa2V3aXNlLgoJKGNoZWNrX2ZpbmFsX3ZhcmlhYmxlX2xvY2FsX2Fzc2lnbm1lbnRfZmxhZyk6IExpa2V3aXNlLgoJKHJlc2V0X2ZpbmFsX3ZhcmlhYmxlX2xvY2FsX2Fzc2lnbm1lbnRfZmxhZyk6IExpa2V3aXNlLgoJKGNoZWNrX2ZpbmFsX3ZhcmlhYmxlX2luZGlyZWN0X2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCShjaGVja19maW5hbF92YXJpYWJsZV9nbG9iYWxfYXNzaWdubWVudF9mbGFnKTogTGlrZXdpc2UuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZSBMT0NBTF9GSU5BTF9QLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IEhhbmRsZSBsb2NhbCBmaW5hbHMgYW5kIGZpbmFsIHZhcmlhYmxlcy4KCShjcmFmdF9jb25zdHJ1Y3Rvcik6IFNldCBERUNMX0ZVTkNUSU9OX1NZTlRIRVRJQ19DVE9SLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogQ2FsbCBNQVlCRV9DUkVBVEVfVkFSX0xBTkdfREVDTF9TUEVDSUZJQy4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBDYWxsIE1BWUJFX0NSRUFURV9WQVJfTEFOR19ERUNMX1NQRUNJRklDCglvbiBsb2NhbCBmaW5hbHMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IExvb3AgdG8gc2V0CglUWVBFX0hBU19GSU5BTF9WQVJJQUJMRS4gQ2FsbAoJYHJlc2V0X2ZpbmFsX3ZhcmlhYmxlX2xvY2FsX2Fzc2lnbm1lbnRfZmxhZycgYW5kCglgY2hlY2tfZmluYWxfdmFyaWFibGVfbG9jYWxfYXNzaWdubWVudF9mbGFnJyBhY2NvcmRpbmdseSBiZWZvcmUKCWFuZCBhZnRlciBjb25zdHJ1Y3RvciBleHBhbnNpb24uIENhbGwKCWByZXNldF9zdGF0aWNfZmluYWxfdmFyaWFibGVfYXNzaWdubWVudF9mbGFnJwoJYmVmb3JlIGV4cGFuZGluZyA8Y2xpbml0PiBhbmQgYWZ0ZXIgY2FsbAoJYGNoZWNrX3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcnIGlmIHRoZQoJY3VycmVudF9jbGFzcyBpc24ndCBhbiBpbnRlcmZhY2UuIEFmdGVyIGFsbCBtZXRob2RzIGhhdmUgYmVlbgoJZXhwYW5kZWQsIGNhbGwgYGNoZWNrX2ZpbmFsX3ZhcmlhYmxlX2dsb2JhbF9hc3NpZ25tZW50X2ZsYWcnIGFuZAoJYGNoZWNrX3N0YXRpY19maW5hbF92YXJpYWJsZV9hc3NpZ25tZW50X2ZsYWcnIGlmIHRoZSBjdXJyZW50IGNsYXNzCglpcyBhbiBpbnRlcmZhY2UuCgkobWF5YmVfeWFua19jbGluaXQpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkoYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzX21ldGhvZHMpOiBSZW1vdmVkIG9sZCBzYW5pdHkgY2hlY2suIFVzZQoJRklFTERfSU5ORVJfQUNDRVNTX1AuIENhbGwgTUFZQkVfQ1JFQVRFX1ZBUl9MQU5HX0RFQ0xfU1BFQ0lGSUMuCglEb24ndCBjcmVhdGUgYWNjZXNzIG1ldGhvZHMgZm9yIGZpbmFscy4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IFVzZSBgQ0xBU1NfRklOQUxfVkFSSUFCTEVfUCcuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogTGlrZXdpc2UuIFJlc2V0IERFQ0xfRklFTERfRklOQUxfSVVEIGlmCglleGlzdGluZyBERUNMX0lOSVQgaGFzIGJlZW4gcHJvY2Vzc2VkLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGlrZXdpc2UuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6IEZpbHRlciBpbnB1dCBvbiBgbHZhbHVlJydzIFRSRUVfQ09ERS4KCVRlc3QgZm9yIENPTVBPTkVOVF9SRUYgdG8gZ2V0IHRvIHRoZSBGSUVMRF9ERUNMLiBJbXBsZW1lbnRlZCBuZXcKCWxvZ2ljLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBVc2UgTE9DQUxfRklOQUxfUC4KCShmb2xkX2NvbnN0YW50X2Zvcl9pbml0KTogUmVzZXQgREVDTF9GSUVMRF9GSU5BTF9JVUQgaWYKCURFQ0xfSU5JVElBTCBpcyBudWxsaWZpZWQuCglGaXhlcyBnY2ovMTYzLgoKMjAwMC0xMC0xMyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluIChwYXJzZS5jLCBwYXJzZS1zY2FuLmMpOiBDcmVhdGUgYXRvbWljYWxseS4KCgkqIE1ha2VmaWxlLmluIChwYXJzZS5jLCBwYXJzZS1zY2FuLmMpOiBMaWtld2lzZS4KCjIwMDAtMTAtMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jICh0ZW1wb3Jhcnlfb2JzdGFjayk6IFJlbW92ZS4KCShtYWtlX2NsYXNzKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3Rhc2Nrcy4KCShwdXNoX2NsYXNzKTogTGlrZXdpc2UuCgkoc2V0X3N1cGVyX2luZm8pOiBMaWtld2lzZS4KCShhZGRfbWV0aG9kXzEpOiBMaWtld2lzZS4KCShhZGRfbWV0aG9kKTogTGlrZXdpc2UuCgkoYWRkX2ZpZWxkKTogTGlrZXdpc2UuCgkoYnVpbGRfdXRmOF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9jbGFzc19yZWYpOiBMaWtld2lzZS4KCShidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogTGlrZXdpc2UuCgkoZmluaXNoX2NsYXNzKTogTGlrZXdpc2UuCgkocHVzaF9zdXBlcl9maWVsZCk6IExpa2V3aXNlLgoJKGxheW91dF9jbGFzcyk6IExpa2V3aXNlLgoJKGxheW91dF9jbGFzc19tZXRob2RzKTogTGlrZXdpc2UuCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkqIGNvbnN0YW50cy5jIChnZXRfdGFnX25vZGUpOiBMaWtld2lzZS4KCShidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdnY19wKTogUmVtb3ZlLgoJKGNvcHlfbGFuZ19kZWNsKTogVXNlIGdnY19hbGxvYy4KCShjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShzdGFydF9qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKGVuZF9qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKiBleGNlcHQuYyAobGlua19oYW5kbGVyKTogVXNlIHhtYWxsb2MuCgkoZnJlZV9laF9yYW5nZXMpOiBOZXcgZnVuY3Rpb24uCgkobWV0aG9kX2luaXRfZXhjZXB0aW9ucyk6IFVzZSBpdC4KCShhZGRfaGFuZGxlcik6IFVzZSB4bWFsbG9jLgoJKGV4cGFuZF9zdGFydF9qYXZhX2hhbmRsZXIpOiBEb24ndCBtZXNzIHdpdGggb2JzdGFja3MuCgkocHJlcGFyZV9laF90YWJsZV90eXBlKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBMaWtld2lzZS4KCSogZXhwci5jIChwdXNoX3ZhbHVlKTogTGlrZXdpc2UuCgkoY3JlYXRlX2xhYmVsX2RlY2wpOiBMaWtld2lzZS4KCShidWlsZF9qbmlfc3R1Yik6IExpa2V3aXNlLgoJKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IExpa2V3aXNlLgoJKG5vdGVfaW5zdHJ1Y3Rpb25zKTogVXNlIHhyZWFsbG9jLgoJKGphdmFfcHVzaF9jb25zdGFudF9mcm9tX3Bvb2wpOiBEb24ndCBtZXNzIHdpdGggb2JzdGFja3MuCgkocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmggKGN5Y2xpY19pbmhlcml0YW5jZV9yZXBvcnQpOiBSZW1vdmUgZHVwbGljYXRlCglkZWNsYXJhdGlvbi4KCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShyZWFkX2NsYXNzKTogTGlrZXdpc2UuCgkoamNmX3BhcnNlKTogTGlrZXdpc2UuCgkqIGxleC5jIChleHByZXNpb25fb2JzdGFjayk6IFJlbW92ZS4KCShqYXZhX2xleCk6IERvbid0IHVzZSBvYnN0YWNrX2ZyZWUuCgkqIHBhcnNlLmggKGV4aXRfamF2YV9jb21wbGV0ZV9jbGFzcyk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShNQU5HTEVfT1VURVJfTE9DQUxfVkFSSUFCTEVfTkFNRSk6IEFkanVzdC4KCShNQU5HTEVfQUxJQVNfSU5JVElBTElaRVJfUEFSQU1FVEVSX05BTUVfSUQpOiBMaWtld2lzZS4KCShNQU5HTEVfQUxJQVNfSU5JVElBTElaRVJfUEFSQU1FVEVSX05BTUVfU1RSSU5HKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGdhb2wpOiBBZGQgbW9yZSBHQyByb290cy4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogQWRqdXN0IGNhbGxzIHRvIE1BTkdMRV8qIG1hY3Jvcy4KCShsb29rdXBfZmllbGRfd3JhcHBlcik6IExpa2V3aXNlLgoJKG9idGFpbl9pbmNvbXBsZXRlX3R5cGUpOiBEb24ndCBtZXNzIHdpdGggb2JzdGFja3MuCgkoYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW10ZXJfbGlzdCk6IEFkanVzdCBjYWxscyB0byBNQU5HTEVfKgoJbWFjcm9zLgoJKGNyYWZ0X2NvbnN0cnVjdG9yKTogRG9uJ3QgbWVzcyB3aXRoIG9ic3RhY2tzLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBMaWtld2lzZS4KCShidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kcyk6IExpa2V3aXNlLgoJKGJ1aWxkX291dGVyX21ldGhvZF9hY2Nlc3NfbWV0aG9kKTogTGlrZXdpc2UuCgkobWF5YmVfYnVpbGRfdGhpc25fYWNjZXNzX21ldGhvZCk6IExpa2V3aXNlLgoJKGJ1aWxkX2RvdF9jbGFzc19tZXRob2RfaW52b2NhdGlvbik6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGlrZXdpc2UuCgkoZG9fbWVyZ2Vfc3RyaW5nX2NzdGUpOiBMaWtld2lzZS4KCShwYXRjaF9zdHJpbmdfY3N0KTogTGlrZXdpc2UuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgoJKHBhcnNlX3NpZ25hdHVyZV9zdHJpbmcpOiBMaWtld2lzZS4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoKMjAwMC0xMC0xMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzM1NjoKCSogZ2phdmFoLmMgKGFkZF9jbGFzc19kZWNsKTogRG9uJ3Qgc3BlY2lhbC1jYXNlIGlubmVyIGNsYXNzZXMuCgkoYWRkX25hbWVsZXQpOiBMaWtld2lzZS4KCjIwMDAtMTAtMTEgIFJvZG5leSBCcm93biAgPFJvZG5leUJyb3duQG15bmQuY29tPgoKCSogamF2YS10cmVlLmg6IENvbnN0aWZ5IGN1cnJlbnRfZW5jb2RpbmcuCgkqIGxhbmcuYzogQ29uc3RpZnkgY3VycmVudF9lbmNvZGluZy4KCjIwMDAtMTAtMTAgIEplZmYgU3R1cm0gIDxqZWZmLnN0dXJtQGFwcG5ldC5jb20+CgoJKiBqdmdlbm1haW4uYyAoY2xhc3NfbWFuZ2xpbmdfc3VmZml4KTogT21pdCBgLicuCgkobWFpbik6IFVzZSBgJCcgd2hlbiBOT19ET0xMQVJfSU5fTEFCRUwgaXMgbm90IHNldCwgb3RoZXJ3aXNlIGAuJy4KCjIwMDAtMTAtMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBSZWluc3RhbGwgMTk5OS0wOC0xNCBBbnRob255J3MKCXBhdGNoLiBGaXhlcyBnY2ovMzQwLgoKMjAwMC0xMC0xMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbmV3X2xleGVyKTogSW5pdGlhbGl6ZSBvdXRfZmlyc3QgYW5kIG91dF9sYXN0CglmaWVsZHMuCgkqIGxleC5oIChqYXZhX2xleGVyKTogQWRkZWQgb3V0X2J1ZmZlciwgb3V0X2ZpcnN0LCBvdXRfbGFzdC4KCjIwMDAtMTAtMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocG9wX2N1cnJlbnRfb3NiKTogTmV3IGZ1bmN0aW9uLgoJKGFycmF5X3R5cGU6KTogVXNlIGBkaW1zOicsIGNoYW5nZWQgYWN0aW9ucwoJYWNjb3JkaW5nbHkuIFN1Z2dlc3RlZCBieSBBbnRob255IEdyZWVuLgoJKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogVXNlZCBwb3BfY3VycmVudF9vc2IuCgkoY2FzdF9leHByZXNzaW9uOik6IExpa2V3aXNlLgoJKHNlYXJjaF9hcHBsaWNhYmxlX21ldGhvZF9saXN0KTogRml4ZWQgaW5kZW50YXRpb24uCgoyMDAwLTEwLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIHBhcnNlLnkgKGFycmF5X3R5cGVfbGl0ZXJhbCk6IFJlbW92ZSBwcm9kdWN0aW9uLgoJKHR5cGVfbGl0ZXJhbHMpOiBSZWZlciB0byBhcnJheV90eXBlLCBub3QgYXJyYXlfdHlwZV9saXRlcmFsLgoKMjAwMC0xMC0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ29yZXkgTWlueWFyZC4KCSogZGVjbC5jIChjaGVja19sb2NhbF9uYW1lZF92YXJpYWJsZSk6IE5ldyBmdW5jdGlvbi4KCSh0cmVlIGNoZWNrX2xvY2FsX3VubmFtZWRfdmFyaWFibGUpOiBMaWtld2lzZS4KCShmaW5kX2xvY2FsX3ZhcmlhYmxlKTogU3BsaXR0ZWQuIENhbGwgY2hlY2tfbG9jYWxfe3VufW5hbWVkX3ZhcmlhYmxlLgoKMjAwMC0xMC0wNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBIYW5kbGUgY2FzZSB3aGVyZSBzdXBlcmNsYXNzIGNhbid0IGJlCglsYXllZCBvdXQgeWV0LgoKMjAwMC0xMC0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogTWFrZWZpbGUuaW4gKGtleXdvcmQuaCk6IFJlZmVyIHRvIEdOVSBGVFAgc2l0ZSBmb3IgdXBkYXRlZAoJZ3BlcmYuCgoyMDAwLTEwLTA1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBBZGRlZCBgLWZkb2xsYXJzLWluLWlkZW50aWZpZXJzJy4KCSoganZnZW5tYWluLmMgKGNsYXNzX21hbmdsaW5nX3ByZWZpeCk6IFJlbW92ZWQuCgkoY2xhc3NfbWFuZ2xpbmdfc3VmZml4KTogTmV3IGdsb2JhbC4KCShtYWluKTogVXNlIGl0LgoJKiBnamF2YWguYyAoY3h4X2tleXdvcmRfc3Vic3QpOiBNYW5nbGUgQysrIGtleXdvcmRzIGJ5IGFwcGVuZGluZwoJYCQnLgoJKHByaW50X21ldGhvZF9pbmZvKTogSGFuZGxlIG92ZXJyaWRlcyBmb3Igc3RhdGljIGFuZCBmaW5hbAoJbWV0aG9kcy4KCShwcm9jZXNzX2ZpbGUpOiBHZW5lcmF0ZSBkZWNsYXJhdGlvbiBmb3IgY2xhc3Mgb2JqZWN0IGZpZWxkLgoJKiBjbGFzcy5jIChjeHhfa2V5d29yZHMpOiBOZXcgYXJyYXkuCgkodXRmOF9jbXApOiBOZXcgZnVuY3Rpb24uCgkoY3h4X2tleXdvcmRfcCk6IE5ldyBmdW5jdGlvbi4KCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogTWFuZ2xlIEMrKyBrZXl3b3JkcyBieSBhcHBlbmRpbmcgYCQnLgoJKG1hbmdsZV9maWVsZCk6IE5ldyBmdW5jdGlvbi4KCShtYW5nbGVfY2xhc3NfZmllbGQpOiBVc2UgbWFuZ2xlX2ZpZWxkLiAgTWFuZ2xlIGNsYXNzIG5hbWUgYXMKCWBjbGFzcyQnLgoJKG1hbmdsZV9zdGF0aWNfZmllbGQpOiBVc2UgbWFuZ2xlX2ZpZWxkLgoKVHVlIE9jdCAgMyAxMzo0NDozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6IFJlbW92ZWQgdW5jZXNzYXJ5IHR5cGUgY2hlY2sgYW5kCglmaXhlZCByYW5nZSBjaGVjayB0eXBvLiBGcm9tIENvcmV5IE1pbnlhcmQuCgpXZWQgU2VwIDEzIDE2OjA2OjUyIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChnaXZlX25hbWVfdG9fbG9jYWxzKTogTmV3IGxvY2FsIGBjb2RlX29mZnNldCcuIENhbGwKIAlgbWF5YmVfYWRqdXN0X3N0YXJ0X3BjJy4KCSogZXhwci5jIChub3RlX2luc3RydWN0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfYnl0ZV9jb2RlKTogRG9uJ3QgY29sbGVjdCBpbnNuIHN0YXJ0cyBoZXJlLgoJKHBlZWtfb3Bjb2RlX2F0X3BjKTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2FkanVzdF9zdGFydF9wYyk6IExpa2V3aXNlLgoJKiBqYXZhLXRyZWUuaCAobWF5YmVfYWRqdXN0X3N0YXJ0X3BjKTogRGVjbGFyZS4KCShub3RlX2luc3RydWN0aW9ucyk6IExpa2V3aXNlLgoJKiBqY2YtcGFyc2UuYyAocGFyc2VfY2xhc3NfZmlsZSk6IENhbGwgYG5vdGVfaW5zdHJ1Y3Rpb25zJy4KCldlZCBTZXAgMTMgMTE6NTA6MzUgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaWVsZF9hY2Nlc3M6KTogRml4ZWQgaW5kZW50YXRpb24uCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFByb3Blcmx5IHF1YWxpZnkgYHRoaXMuYVtiXS5jJy4KCjIwMDAtMDktMDcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCglGaXggZm9yIFBSIGdjai8zMDc6CgkqIHBhcnNlLnkgKHBhdGNoX2Jpbm9wKTogVXNlIEpOVU1FUklDX1RZUEVfUCwgbm90CglKUFJJTUlUSVZFX1RZUEVfUCwgZm9yIGFyaXRobWV0aWMgb3BlcmF0b3JzLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogSW5kZW50YXRpb24gZml4LgoJKHRyeV9idWlsdGluX2Fzc2lnbmNvbnYpOiBIYW5kbGUgYm9vbGVhbiBzcGVjaWFsbHkuICBGaXhlZCB0eXBvLgoJKHZhbGlkX2J1aWx0aW5fYXNzaWduY29udl9pZGVudGl0eV93aWRlbmluZ19wKTogSGFuZGxlIGJvb2xlYW4uCgkoZG9fdW5hcnlfbnVtZXJpY19wcm9tb3Rpb24pOiBDbGVhbmVkIHVwIGNvZGUuCgkodmFsaWRfY2FzdF90b19wKTogSGFuZGxlIGJvb2xlYW4gY29ycmVjdGx5LgoKMjAwMC0wOS0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfcmVhZF91bmljb2RlKTogUmVzZXQgYnNfY291bnQgd2hlbiBmaW5pc2hlZCB3aXRoCglgXHUnIHNlcXVlbmNlLgoKMjAwMC0xMC0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCglDb252ZXJ0IHRvIEdDLgoJKiBNYWtlLWxhbmcuaW4gKHMtamF2YSk6IERvbid0IGRlcGVuZCBvbiBnZ2MtY2FsbGJhY2tzLm8uCgkqIE1ha2VmaWxlLmluIChCQUNLRU5EKTogRG9uJ3QgaW5jbHVkZSBnZ2MtY2FsbGJhY2tzLm8uCgkodHlwZWNrLm8pOiBEZXBlbmQgb24gZ2djLmguCgkqIGNsYXNzLmMgKGFkZF9tZXRob2RfMSk6IFVzZSBHQyBmdW5jdGlvbnMgZm9yIGFsbG9jYXRpb24uCgkoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogUmVnaXN0ZXIgcm9vdHMuCgkqIGRlY2wuYyAoZ2djX3ApOiBTZXQgdG8gMS4KCShwZW5kaW5nX2xvY2FsX2RlY2xzKTogTWFrZSBpdCBzdGF0aWMuCgkocHVzaF9qdm1fc2xvdCk6IFVzZSBHQyBmdW5jdGlvbnMgZm9yIGFsbG9jYXRpb24uCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZWdpc3RlciByb290cy4KCShnaXZlX25hbWVfdG9fbG9jYWxzKTogVXNlIEdDIGZ1bmN0aW9ucyBmb3IgYWxsb2NhdGlvbi4KCShsYW5nX21hcmtfdHJlZSk6IE5ldyBmdW5jdGlvbi4KCSogamF2YS10cmVlLmggKE1BWUJFX0NSRUFURV9UWVBFX1RZUEVfTEFOR19TUEVDSUZJQyk6IFVzZSBHQwoJZnVuY3Rpb25zIGZvciBhbGxvY2F0aW9uLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IFVzZSBnZ2Nfc3RyZHVwLgoJKiBsZXguYyAoamF2YV9sZXgpOiBVc2UgYnVpbGRfc3RyaW5nLCByYXRoZXIgdGhhbiByZXBsaWNhdGluZyBpdAoJaW5saW5lLgoJKiBwYXJzZS55IChnb2FsKTogQWRkIG1vcmUgcm9vdHMuCgkobWFya19wYXJzZXJfY3R4dCk6IE5ldyBmdW5jdGlvbi4KCSogdHlwZWNrLmM6IEluY2x1ZGUgZ2djLmguCgoyMDAwLTA5LTI5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX3lhbmtfY2xpbml0KTogQWxzbyBrZWVwIDxjbGluaXQ+IGlmIGl0cyBib2R5Cgljb250YWlucyBzb21ldGhpbmcgZWxzZSB0aGFuIE1PRElGWV9FWFBSLgoKMjAwMC0wOS0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9TUkNTKTogSW5jbHVkZSBqYXZhLXRyZWUuaC4KCSogTWFrZWZpbGUuaW4gKHBhcnNlLm8pOiBEZXBlbmQgb24gZ2djLmguCgkoY2xhc3Mubyk6IExpa2V3aXNlLgoJKGNvbnN0YW50cy5vKTogTGlrZXdpc2UuCgkoZGVjbC5vKTogTGlrZXdpc2UuCgkoZXhwci5vKTogTGlrZXdpc2UuCgkoamNmLXBhcnNlLm8pOiBMaWtld2lzZS4KCShqY2Ytd3JpdGUubyk6IExpa2V3aXNlLgoJKG1hbmdsZS5vKTogTGlrZXdpc2UuCgkqIGNsYXNzLmM6IEluY2x1ZGUgZ2djLmguCgkoYnVpbGRfc3RhdGljX2ZpZWxkX3JlZik6IFJlZ2lzdGVyIEdDIHJvb3RzLgoJKGxheW91dF9jbGFzcyk6IExpa2V3aXNlLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYzogSW5jbHVkZSBnZ2MuaC4KCShjdXJyZW50X2NvbnN0YW50X3Bvb2xfZGF0YV9yZWYpOiBSZW1vdmUuCgkodGFnX25vZGVzKTogTW92ZSBpdCB0byAuLi4KCShnZXRfdGFnX25vZGUpOiAuLi4gaGVyZS4gIFJlZ2lzdGVyIEdDIHJvb3RzLgoJKiBkZWNsLmM6IEluY2x1ZGUgZ2djLmguICBSZW1vdmUgbWFueSBnbG9iYWwgdHJlZSBkZWZpbml0aW9ucy4KCSh0aHJvd19ub2RlKTogRGVmaW5lLgoJKGphdmFfZ2xvYmFsX3RyZWVzKTogTGlrZXdpc2UuCgkocHJlZGVmX2ZpbGVuYW1lcyk6IE1ha2UgdGhlIHNpemUgYSBjb25zdGFudC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkanVzdCBhY2NvcmRpbmdseS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaW5pdF9qY2ZfcGFyc2UuICBSZWdpc3RlciBHQyByb290cy4KCSogZXhwci5jOiBJbmNsdWRlIGdnYy5oLgoJKGluaXRfZXhwcl9wcm9jZXNzaW5nKTogUmVnaXN0ZXIgR0Mgcm9vdHMuCgkoYnVpbGRfaW52b2tlaW50ZXJmYWNlKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oOiBSZXBsYWNlIGV4dGVybiB0cmVlIGRlY2xhcmF0aW9ucyB3aXRoIG1hY3Jvcy4KCShqYXZhX2dsb2JhbF90cmVlcyk6IE5ldyB2YXJpYWJsZS4KCShqYXZhX3RyZWVfaW5kZXgpOiBOZXcgZW51bWVyYXRpb24uCgkoaW5pdF9qY2ZfcGFyc2UpOiBEZWNsYXJlLgoJKiBqY2YtcGFyc2UuYzogSW5jbHVkZSBnZ2MuaC4KCShjdXJyZW50X2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKG1haW5fY2xhc3MpOiBMaWtld2lzZS4KCShhbGxfY2xhc3NfbGlzdCk6IExpa2V3aXNlLgoJKHByZWRlZmluZWRfZmlsZW5hbWVfcCk6IEFkanVzdCBmb3IgY29uc3RhbnQgc2l6ZSBvZgoJcHJlZGVmX2ZpbGVuYW1lcy4KCShpbml0X2pjZl9wYXJzZSk6IE5ldyBmdW5jdGlvbi4KCSogamNmLXdyaXRlLmM6IEluY2x1ZGUgZ2djLmguCgkoZ2VuZXJhdGVfY2xhc3NmaWxlKTogUmVnaXN0ZXIgR0Mgcm9vdHMuCgkoYXBwZW5kX3N5bnRoZXRpY19hdHRyaWJ1dGUpOiBMaWtld2lzZS4KCShhcHBlbmRfaW5uZXJjbGFzc19hdHRyaWJ1dGVfZW50cnkpOiBMaWtld2lzZS4KCSogbGFuZy5jOiBJbmNsdWRlIGdnYy5oLgoJKGxhbmdfcHJpbnRfZXJyb3IpOiBSZWdpc3RlciBHQyByb290cy4KCSogcGFyc2UuaCAoc3RydWN0IHBhcnNlcl9jdHh0KTogUmVuYW1lIGZpZWxkcyB0byBhdm9pZCBjb25mbGljdHMKCXdpdGggbWFjcm9zLgoJKiBwYXJzZS55OiBJbmNsdWRlIGdnYy5oLgoJKHdmbF9vcGVyYXRvcik6IFJlbW92ZS4KCShnb2FsKTogUmVnaXN0ZXIgR0Mgcm9vdHMuCgkoamF2YV9wb3BfcGFyc2VyX2NvbnRleHQpOiBBZGp1c3QgZm9yIG5ldyBmaWVsZCBuYW1lcy4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3NhdmVfZ2xvYmFsKTogTGlrZXdzZS4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsKTogTGlrZXdpc2UuCgkoamF2YV9wYXJzZXJfY29udGV4dF9zdXNwZW5kKTogTGlrZXdpc2UuCgkoamF2YV9wYXJzZXJfY29udGV4dF9yZXN1bWUpOiBMaWtld2lzZS4KCSh2ZXJpZnlfY29uc3RydWN0b3JfY2lyY3VsYXJpdHkpOiBSZWdpc3RlciBHQyByb290cy4KCShsb29rdXBfY2wpOiBMaWtld2lzZS4KCShqYXZhX3Jlb3JkZXJfZmllbGRzKTogTGlrZXdpc2UuCgkoYnVpbGRfY3VycmVudF90aGlzKTogTGlrZXdpc2UuCgkoY2xhc3NfaW5fY3VycmVudF9wYWNrYWdlKTogTGlrZXdpc2UuCgkoYXJndW1lbnRfdHlwZXNfY29udmVydGlibGUpOiBMaWtld2lzZS4KCShwYXRjaF9jYXN0KTogUmVuYW1lIHdmbF9vcCBwYXJhbWV0ZXIgdG8gYXZvaWQgbWFjcm8gY29uZmxpY3RzLgoKMjAwMC0wOS0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4Lmg6IFVzZSBIQVZFX0lDT05WX0gsIG5vdCBIQVZFX0lDT05WLgoKMjAwMC0wOS0xMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmM6IEluY2x1ZGUgPGxvY2FsZS5oPi4KCSoganYtc2Nhbi5jOiBJbmNsdWRlIDxsb2NhbGUuaD4uCgoyMDAwLTA5LTEyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKHBvcF90eXBlXzApOiBSZXR1cm4gYE9iamVjdCcgaWYgdHJ5aW5nIHRvIG1lcmdlIHR3bwoJaW50ZXJmYWNlIHR5cGVzLgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiBEb24ndCByZXR1cm4gYFRZUEVfVU5LTk9XTicgZm9yCglpbnRlcmZhY2UgdHlwZXM7IGBPYmplY3QnIGlzIGFsd2F5cyBhIHZhbGlkIHN1cGVydHlwZS4KCjIwMDAtMDktMTIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCglGaXggZm9yIFBSIGdjai8zMzoKCSoganYtc2Nhbi5jIChoZWxwKTogRG9jdW1lbnQgLS1lbmNvZGluZy4KCShvcHRpb25zKTogQWRkZWQgYGVuY29kaW5nJyBlbnRyeS4KCShPUFRfRU5DT0RJTkcpOiBOZXcgZGVmaW5lLgoJKG1haW4pOiBIYW5kbGUgLS1lbmNvZGluZy4KCUluY2x1ZGUgPGxhbmdpbmZvLmg+IGlmIG5sX2xhbmdpbmZvIGV4aXN0cy4KCSogbGFuZy1vcHRpb25zLmg6IERvY3VtZW50IC0tY2xhc3NwYXRoLCAtLUNMQVNTUEFUSCwgLS1tYWluLCBhbmQKCS0tZW5jb2RpbmcuCgkqIGpjZi1wYXJzZS5jIEluY2x1ZGUgPGxhbmdpbmZvLmg+IGlmIHdlIGhhdmUgbmxfbGFuZ2luZm8uCgkocGFyc2Vfc291cmNlX2ZpbGUpOiBDb3JyZWN0bHkgY2FsbCBqYXZhX2luaXRfbGV4LiAgQWRkZWQgYGZpbnB1dCcKCWFyZ3VtZW50LiAgVXNlIG5sX2xhbmdpbmZvIHRvIGRldGVybWluZSBkZWZhdWx0IGVuY29kaW5nLgoJKiBqYXZhLXRyZWUuaCAoY3VycmVudF9lbmNvZGluZyk6IERlY2xhcmUuCgkqIHBhcnNlLnkgKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwpOiBEb24ndCByZXN0b3JlCglgZmlucHV0Jy4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3NhdmVfZ2xvYmFsKTogRG9uJ3Qgc2V0IGBmaW5wdXQnIGZpZWxkLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogRG9uJ3QgcmVzdG9yZSBgZmlucHV0Jy4gIEZyZWUgb2xkIGxleGVyCglpZiByZXF1aXJlZC4KCSogbGFuZy5jIChjdXJyZW50X2VuY29kaW5nKTogTmV3IGdsb2JhbC4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBSZWNvZ25pemUgYC1mZW5jb2Rpbmc9Jy4KCShmaW5pc2hfcGFyc2UpOiBEb24ndCBjbG9zZSBmaW5wdXQuCgkqIHBhcnNlLmggKHN0cnVjdCBwYXJzZXJfY3R4dCk6IFJlbW92ZWQgYGZpbnB1dCcgYW5kCglgdW5nZXRfdXRmOF92YWx1ZScgZmllbGRzLiAgQWRkZWQgYGxleGVyJyBmaWVsZC4KCShqYXZhX2luaXRfbGV4KTogRml4ZWQgZGVjbGFyYXRpb24uCgkqIGxleC5jIChqYXZhX25ld19sZXhlcik6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2Rlc3Ryb3lfbGV4ZXIpOiBMaWtld2lzZS4KCShqYXZhX3JlYWRfY2hhcik6IEFkZGVkIGBsZXgnIGFyZ3VtZW50LiAgSGFuZGxlIGljb252IGNhc2UuCgkoamF2YV9yZWFkX3VuaWNvZGUpOiBBZGRlZCBgbGV4JyBhcmd1bWVudC4gIENvdW50IGJhY2tzbGFzaGVzIGluCglsZXhlciBzdHJ1Y3R1cmUuCgkoamF2YV9pbml0X2xleCk6IEFkZGVkIGBmaW5wdXQnIGFuZCBgZW5jb2RpbmcnIGFyZ3VtZW50cy4gIFNldAoJYGxleGVyJyBmaWVsZCBpbiBjdHhwLgoJKEJBRF9VVEY4X1ZBTFVFKTogUmVtb3ZlZC4KCShqYXZhX2xleCk6IEhhbmRsZSBzZWVpbmcgVUVPRiBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nIGxpdGVyYWwuCgkqIGxleC5oOiBJbmNsdWRlIDxpY29udi5oPiBpZiBIQVZFX0lDT05WIGRlZmluZWQuCgkoamF2YV9sZXhlcik6IE5ldyBzdHJ1Y3R1cmUuCgkoVU5HRVRDKTogUmVtb3ZlZC4KCShHRVRDKTogUmVtb3ZlZC4KCShERUZBVUxUX0VOQ09ESU5HKTogTmV3IGRlZmluZS4KCShqYXZhX2Rlc3Ryb3lfbGV4ZXIpOiBEZWNsYXJlLgoKMjAwMC0wOS0xMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzM0MzoKCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBJbml0aWFsaXplIGphdmFfaW9fc2VyaWFsaXphYmxlLgoJKiBwYXJzZS55IChqYXZhX2lvX3NlcmlhbGl6YWJsZSk6IE5ldyBnbG9iYWwuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogQW4gYXJyYXkgY2FuIGJlIGNhc3QgdG8KCXNlcmlhbGl6YWJsZS4KCjIwMDAtMDktMTAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGRlY2wuYywgZXhwci5jOiBJbmNsdWRlIGRlZmF1bHRzLmggaWYgbm90IGFscmVhZHkgaW5jbHVkZWQuCglEb24ndCBkZWZpbmUgdGhlICpfVFlQRV9TSVpFIG1hY3Jvcy4KCjIwMDAtMDktMDkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiBDb3JyZWN0IGZpcnN0IHBhcmFtZXRlcgoJaW4gQURKVVNUX0ZJRUxEX0FMSUdOIGludm9jYXRpb24uCgoyMDAwLTA5LTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IEFsc28gcmVjb2duaXplIGAtZmVtaXQtY2xhc3MtZmlsZXMnLgoKMjAwMC0wOS0wNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiBMb2FkIHRoZSB0eXBlcyB0byBtZXJnZSBpZiBuZWNlc3NhcnkuCgoyMDAwLTA5LTAyICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KCgkqIGpjZi1pby5jOiBJbmNsdWRlIHpsaWIuaC4KCShvcGVuX2luX3ppcCk6IFJlYWQgY29tcHJlc3NlZCBjbGFzcyBmaWxlIGFyY2hpdmVzLgoJKiB6aXBmaWxlLmggKFppcERpcmVjdG9yeSk6IEFkZCB1bmNvbXByZXNzZWRfc2l6ZSBhbmQKCWNvbXByZXNzaW9uX21ldGhvZCBmaWVsZHMuCgkqIHpleHRyYWN0LmMgKHJlYWRfemlwX2FyY2hpdmUpOiBDb2xsZWN0IGZpbGUgY29tcHJlc3Npb24gaW5mby4KCjIwMDAtMDgtMTUgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogcGFyc2UueSAoZG9fcmVzb2x2ZV9jbGFzcyk6IEFsc28gZXhwbG9yZSBzdXBlcmNsYXNzZXMgb2YKCWludGVybWVkaWF0ZSBlbmNsb3NpbmcgY29udGV4dHMgd2hlbiBzZWFyY2hpbmcgZm9yIGlubmVyIGNsYXNzZXMuCgoyMDAwLTA4LTExICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHZhcmlhYmxlX2RlY2xhcmF0b3JfaWQ6KTogQmV0dGVyIGVycm9yIG1lc3NhZ2UuCgkoZXhwcmVzc2lvbl9zdGF0ZW1lbnQ6KTogVXNlIFlZTk9UX1RXSUNFLgoJKGNhc3RfZXhwcmVzc2lvbjopOiBMaWtld2lzZS4KCShhc3NpZ25tZW50Oik6IExpa2V3aXNlLgoKMjAwMC0wOC0xMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChkb19tZXJnZV9zdHJpbmdfY3N0ZSk6IE5ldyBsb2NhbHMuIENyZWF0ZSBuZXcKCVNUUklOR19DU1RzIGVhY2ggdGltZSwgdXNlIG1lbWNweS4gRml4ZXMgZ2NqLzMxMS4KCjIwMDAtMDgtMDcgIEhhbnMgQm9laG0gIDxib2VobUBhY20ub3JnPgoKCSogYm9laG0uYyAobWFya19yZWZlcmVuY2VfZmllbGRzKTogU2V0IG1hcmtpbmcgYml0cyBmb3IgYWxsIHdvcmRzIGluCglhIG11bHRpcGxlLXdvcmQgcmVjb3JkLgoJKGdldF9ib2VobV90eXBlX2Rlc2NyaXB0b3IpOiBVc2UgdGhlIHByb2NlZHVyZSBtYXJraW5nIGRlc2NyaXB0b3IgZm9yCglqYXZhLmxhbmcuQ2xhc3MuCgoyMDAwLTA4LTMxICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGpjMSQoZXhlZXh0KSwgZ2NqaCQoZXhlZXh0KSwganYtc2NhbiQoZXhlZXh0KSwKCWpjZi1kdW1wJChleGVleHQpKTogTWFrZSBwYXJhbGxlbCBzYWZlLgoKMjAwMC0wOC0yOSAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogamNmLXBhcnNlLmMgKHNldF9zb3VyY2VfZmlsZW5hbWUpOiBDb25zdGlmeSBhIGNoYXIgKi4KCSogamNmLXdyaXRlLmMgKGFwcGVuZF9pbm5lcmNsYXNzZXNfYXR0cmlidXRlLAoJbWFrZV9jbGFzc19maWxlX25hbWUpOiBDb25zdGlmeSBhIGNoYXIgKi4gIERvbid0IHJlY3ljbGUgYQoJdmFyaWFibGUgZm9yIGFuIHVucmVsYXRlZCBwdXJwb3NlLgoJKiBwYXJzZS55OiAoYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QpOiBDb25zdGlmeSBhIGNoYXIgKi4KCShicmVha2Rvd25fcXVhbGlmaWVkKTogRG8gbm90IG1vZGlmeSBJREVOVElGSUVSX1BPSU5URVIgc3RyaW5ncy4KCjIwMDAtMDgtMjkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChjYW5fd2lkZW5fcmVmZXJlbmNlX3RvKTogRml4ZWQgaW5kZW50YXRpb24uCgkqIGphdmEtdHJlZS5oIChDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QKTogQWRkZWQgbGVhZGluZyBjb21tZW50LgoJKiBwYXJzZS55OiBgZmluaXQkJyByZXBsYWNlcyBgJGZpbml0JCcgaW4gY29tbWVudHMuCgkodHJ5X2J1aWx0aW5fYXNzaWduY29udik6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCjIwMDAtMDgtMjUgIEdyZWcgTWNHYXJ5ICA8Z3JlZ0BtY2dhcnkub3JnPgoKCSogZ2phdmFoLmMgKGN4eF9rZXl3b3JkX3N1YnN0KTogVXNlIEFSUkFZX1NJWkUuCgoyMDAwLTA4LTI0ICBHcmVnIE1jR2FyeSAgPGdyZWdAbWNnYXJ5Lm9yZz4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogVXNlIEFSUkFZX1NJWkUuCgkqIHBhcnNlLnkgKEJJTk9QX0xPT0tVUCk6IExpa2V3aXNlLgoKMjAwMC0wOC0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBqYXZhb3AuaCAoV09SRF9UT19JTlQpOiBNYXNrIGxvd2VyIDMyIGJpdHMgb2YgYSBqd29yZCBiZWZvcmUKCXNpZ24gZXh0ZW5kaW5nLiBGaXhlcyBnY2ovMzIxLgoJKiBqY2YtcGFyc2UuYyAoZ2V0X2NvbnN0YW50KTogTWFzayBsb3dlciAzMiBiaXRzIG9mIGEgamludCBiZWZvcmUKCWNvbWJpbmluZyB0byBtYWtlIGEgamxvbmcuIEZpeGVzIGdjai8zMjEuCgoyMDAwLTA4LTIxICBOaXggIDxuaXhAZXNwZXJpLmRlbW9uLmNvLnVrPgoKCSogbGFuZy1zcGVjcy5oOiBEbyBub3QgcHJvY2VzcyAtbyBvciBydW4gdGhlIGFzc2VtYmxlciBpZgoJLWZzeW50YXgtb25seS4KCjIwMDAtMDgtMTYgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IFJld3JpdGUgY29kZSB0byBkbyBhcnJheQoJYWxpZ25tZW50LiAgVGFrZSBpbnRvIGFjY291bnQgYmFjay1lbmQgbWFjcm9zIHdoZW4gYWxpZ25pbmcgYXJyYXkKCWRhdGEuICBSZW1vdmUgc2V0dGluZyBvZiBUWVBFX1VTRVJfQUxJR047IEphdmEgZG9lc24ndCBhbGxvdyB0aGUKCXVzZXIgdG8gc2V0IGFsaWdubWVudC4gRml4ZXMgZ2NqLzI1MiBhbmQgMTYwLgoKMjAwMC0wOC0wOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogTm93IHJldHVybiBgaW50Jy4KCUNoZWNrIGltcGxlbWVudGVkIGludGVyZmFjZXMuICBGaXhlcyBQUiBnY2ovMzA1LgoKCSogcGFyc2UueSAocGF0Y2hfc3dpdGNoX3N0YXRlbWVudCk6IERpc2FsbG93IGBsb25nJyBpbiBzd2l0Y2gKCWV4cHJlc3Npb25zLiAgRml4ZXMgUFIgZ2NqLzMxMC4KCjIwMDAtMDgtMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChmaW5pdF9sZWdfaWRlbnRpZmllcl9ub2RlKTogTmV3IGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBgZmluaXQkJyB0byBpbml0aWFsaXplCglmaW5pdF9pZGVudGlmaWVyX25vZGUuIFVzZSBgJGZpbml0JCcgdG8gaW5pdGlhbGl6ZQoJZmluaXRfbGVnX2lkZW50aWZpZXJfbm9kZS4KCSogZXhwci5jIChleHBhbmRfamF2YV9maWVsZF9vcCk6IFVzZSBJRF9GSU5JVF9QLgoJKiBqYXZhLXRyZWUuaCAoZmluaXRfaWRlbnRpZmllcl9ub2RlKTogQ2hhbmdlZCBhdHRhY2hlZCBjb21tZW50LgoJKGZpbml0X2xlZ19pZGVudGlmaWVyX25vZGUpOiBOZXcgZGVjbGFyYXRpb24uCgkoSURfRklOSVRfUCk6IFRha2UgZmluaXRfaWRlbnRpZmllcl9ub2RlIGFuZAoJZmluaXRfbGVnX2lkZW50aWZpZXJfbm9kZSBpbnRvIGFjY291bnQuIFRoaXMgaXMgYSBiYWNrd2FyZAoJY29tcGF0aWJpbGl0eSBoYWNrLgoKMjAwMC0wOC0xNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiBSZS1pbnN0YWxsZWQgbG9zdAoJSmFuIDYgMjAwMCBwYXRjaC4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IENoZWNrIGBuYXJncycgYmVmb3JlIGVtaXR0aW5nIGl0LgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZV9zdGF0ZSk6IEZpeGVkIHR5cG8uCgkqIENoYW5nZUxvZzogRml4ZWQgdHlwbyBpbiBzb21lIGpjZi13cml0ZS5jIGVudHJpZXMgbWVudGlvbmluZwoJZ2VuZXJhdGVfYnl0ZWNvZGVfe2NvbmRpdGlvbmFsLGluc25zfS4KClN1biBBdWcgMTMgMDk6NDE6NDkgMjAwMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBBZGQgY2FzZSBmb3IgQklUX0ZJRUxEX1JFRiAocmVxdWlyZWQKCWZvciAtcGcgYnVpbGRzKS4KCjIwMDAtMDgtMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogRml4ZWQgaW5kZW50YXRpb24uCgkqIGphdmEtdHJlZS5oIChDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QKTogTmV3IG1hY3JvLgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IExldCBgY2hhcl9sZW4nIGdvIHVwIHRvIDMuIFVzZSBgc3RyJwoJaW5zdGVhZCBvZiBgc3RyX3B0cicuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEVtaXQgbnVtYmVyIHRoZSBvZiBhcmdzCglvZiBhIGBpbnZva2VpbnRlcmZhY2UnIGF0IHRoZSByaWdodCB0aW1lLgoJKiBwYXJzZS5oIChXRkxfU1RSSVBfQlJBQ0tFVCk6IE5ldyBtYWNyby4KCShTRVRfVFlQRV9GT1JfUkVTT0xVVElPTik6IFVzZSBpdC4KCSogcGFyc2UueSAoYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlKTogUmV1c2UgYHR5cGVfb3Jfd2ZsJy4KCShjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBEb24ndCBjaGVjayBmb3IgY3Jvc3MgcGFja2FnZQoJaW5uZXJjbGFzcyBuYW1lIGNsYXNoZXMuCgkobWV0aG9kX2hlYWRlcik6IEJlaGF2ZSBwcm9wZXJseSBpZiBNREVDTCBpcyBgZXJyb3JfbWFya19ub2RlJy4KCShtZXRob2RfZGVjbGFyYXRvcik6IFJldHVybiBgZXJyb3JfbWFya19ub2RlJyBpZiBib2d1cyBjdXJyZW50CgljbGFzcy4KCShyZXNvbHZlX2NsYXNzKTogQXBwbHkgV0ZMX1NUUklQX0JSQUNLRVQgb24gYGNsJyBpZiBuZWNlc3NhcnkuCgkocmVzb2x2ZV9hbmRfbGF5b3V0KTogTmV3IGxvY2FsIGBkZWNsX3R5cGUnLCBzZXQgYW5kIHVzZWQuIENhbGwKCWphdmFfY2hlY2tfbWV0aG9kcy4KCShqYXZhX2NoZWNrX21ldGhvZHMpOiBOZXcgbWV0aG9kLgoJKGphdmFfbGF5b3V0X2NsYXNzZXMpOiBVc2UgaXQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogTm8gRUggY2hlY2sgbmVjZXNzYXJ5IGluCglhY2Nlc3MkPG4+LgoJKGphdmFfY29tcGxldGVfbGhzKTogVXNlIFZBUl9ERUNMJ3MgREVDTF9JTklUSUFMIHdoZW4gZXZhbHVhdGluZwoJYGNhc2UnIHN0YXRlbWVudC4KCShwYXRjaF9hc3NpZ25tZW50KTogU2V0IERFQ0xfSU5JVElBTCBvbiBpbnRlZ3JhbCBmaW5hbCBsb2NhbC4KCjIwMDAtMDgtMDggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGZsYWdfZXh0cmFuZW91c19zZW1pY29sb24pOiBOZXcgZXh0ZXJuLgoJKiBsYW5nLW9wdGlvbnMuaDogKC1XZXh0cmFuZW91cy1zZW1pY29sb24pOiBOZXcgb3B0aW9uLgoJKiBsYW5nLmMgKGZsYWdfcmVkdW5kYW50KTogRml4ZWQgdHlwbyBpbiBsZWFkaW5nIGNvbW1lbnQuCgkoZmxhZ19leHRyYW5lb3VzX3NlbWljb2xvbik6IE5ldyBnbG9iYWwuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0IGBmbGFnX2V4dHJhbmVvdXNfc2VtaWNvbG9uJyB3aGVuCgktV2FsbC4gRGVjb2RlIGAtV2V4dHJhbmVvdXMtc2VtaWNvbG9uJy4KCSogcGFyc2UueSAodHlwZV9kZWNsYXJhdGlvbjopOiBSZW1vdmVkIGBTQ19USycgaGFjaywgYWRkZWQKCWBlbXB0eV9zdGF0ZW1lbnQnIHJ1bGUuCgkoY2xhc3NfYm9keV9kZWNsYXJhdGlvbik6IExpa2V3aXNlLgoJKG1ldGhvZF9ib2R5Oik6IEFjY2VwdCBgOycgYXMgYSBtZXRob2QgYm9keS4KCShzdGF0aWNfaW5pdGlhbGl6ZXI6KTogUmVtb3ZlZCBgU0NfVEsnIGhhY2suCgkoY29uc3RydWN0b3JfYmxvY2tfZW5kOik6IExpa2V3aXNlLgoJKGVtcHR5X3N0YXRlbWVudDopOiBSZXBvcnQgZGVwcmVjYXRlZCBlbXB0eSBkZWNsYXJhdGlvbi4gRml4ZXMKCWdjai8yOTUKCjIwMDAtMDgtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYnVpbGRfZG90X2NsYXNzX21ldGhvZF9pbnZvY2F0aW9uKTogQ2hhbmdlZCBwYXJhbWV0ZXIKCW5hbWUgdG8gYHR5cGUnLiBCdWlsZCBzaWduYXR1cmUgZnJvbSBgdHlwZScgYW5kIGNvbnZlcnQgaXQgdG8gYQoJU1RSSU5HX0NTVCBpZiBpdCdzIGFuIGFycmF5LgoJKHBhdGNoX2luY29tcGxldGVfY2xhc3NfcmVmKTogYGJ1aWxkX2RvdF9jbGFzc19tZXRob2RfaW52b2NhdGlvbicKCXRvIHVzZSBgcmVmX3R5cGUnIGRpcmVjdGx5LgoKU3VuIEF1ZyAgNiAwMDo0NzoyNCAyMDAwICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAY3VwLmhwLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGRlZCBhIGNvbW1hIGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQgdG8gYXZvaWQKCXN5bnRheCBlcnJvcnMgd2hlbiBvdGhlciBsYW5ndWFnZXMgZGVmaW5lIGFkZGl0aW9uYWwgb3B0aW9ucy4KCjIwMDAtMDgtMDQgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIE1ha2UtbGFuZy5pbiAoamMxLCBqdi1zY2FuKTogRGVwZW5kIG9uICQoQkFDS0VORCksIG5vdCBzdGFtcC1vYmpsaXN0LgoJKiBNYWtlZmlsZS5pbjogQWRkIEJBQ0tFTkQ7IGRlbGV0ZSBPQkpTLCBPQkpERVBTLgoJKGpjMSk6IExpbmsgd2l0aCAkKEJBQ0tFTkQpLgoJKGp2LXNjYW4pOiBEZXBlbmQgb24gdmVyc2lvbi5vLCBub3QgYWxsIG9mICQoT0JKUykgb3IgJChCQUNLRU5EKS4KCjIwMDAtMDgtMDIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGp2c3BlYy5jOiBBZGp1c3QgdHlwZSBvZiBzZWNvbmQgYXJndW1lbnQgdG8KCWxhbmdfc3BlY2lmaWNfZHJpdmVyLCBhbmQgdXBkYXRlIGNvZGUgYXMgbmVjZXNzYXJ5LgoKCSogY2xhc3MuYyAoYnVpbGRfZHRhYmxlX2RlY2wpOiBJbml0aWFsaXplIGR1bW15LgoKMjAwMC0wOC0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtYXliZV95YW5rX2NsaW5pdCk6IFdoZW4gZ2VuZXJhdGluZyBieXRlY29kZTogbm9uIGVtcHR5CgltZXRob2QgYm9kaWVzIG5vdCB0byBydWxlIG91dCBkaXNjYXJkaW5nIGA8Y2xpbml0Pic7IGRvbid0IHVzZQoJPGNsaW5pdD4gdG8gaW5pdGlhbGl6ZSBzdGF0aWMgZmllbGRzIHdpdGggY29uc3RhbnQgaW5pdGlhbGl6ZXJzLgoKMjAwMC0wOC0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAocHJpbnRfbWV0aG9kX2luZm8pOiBBZGRlZCBgc3ludGgnIHBhcmFtZXRlci4gU2tpcAoJc3ludGhldGljIG1ldGhvZHMuCgkobWV0aG9kX3N5bnRoZXRpYyk6IE5ldyBnbG9iYWwuCgkoSEFORExFX01FVEhPRCk6IFJlY29nbml6ZSBzeW50aGV0aWMgbWV0aG9kIGFuZCB0ZWxsCglgcHJpbnRfbWV0aG9kX2luZm8nIGFib3V0IGl0LgoJKEhBTkRMRV9FTkRfTUVUSE9EKTogRG8gbm90IGlzc3VlIGFuIGFkZGl0aW9uYWwgYDtcbicgaWYgd2UncmUKCXByb2Nlc3NpbmcgYSBzeW50aGV0aWMgbWV0aG9kLgoJKiBqY2YtcmVhZGVyLmMgKHNraXBfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKCBza2lwX2F0dHJpYnV0ZSk6IExpa2V3aXNlLgoKMjAwMC0wOC0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3MpOiBGaXhlZCBjb21tZW50cy4KCShmaXhfY29uc3RydWN0b3JzKTogRW1pdCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyQ8bj4gYmVmb3JlCgljYWxsaW5nICRmaW5pdCQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogQnVpbGQgYW4gYWNjZXNzIHRvIGBkZWNsJyBpZgoJbmVjZXNzYXJ5LgoKMjAwMC0wNy0zMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKGN1cmVudF9jbGFzcyk6IE5vbiBsb25nZXIgY29uc3QuCgkoaW5uZXJfcXVhbGlmaWVyLCBpbm5lcl9xdWFsaWZpZXJfbGVuZ3RoKTogRGVsZXRlZC4KCShjdXJyZW50X2NsYXNzX2xlbmd0aCk6IE5ldyBnbG9iYWwuCgkoYnJhY2tldF9jb3VudCk6IEZpeGVkIHR5cG8gaW4gbGVhZGluZyBjb21tZW50LgoJKGFub255bW91c19jb3VudCk6IE5ldyBnbG9iYWwuCgkoY2xhc3NfaW5zdGFuY2VfY3JlYXRpb25fZXhwcmVzc2lvbjopOiBIYW5kbGUgYW5vbnltb3VzIGNsYXNzZXMuCgkoYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uOik6IE5ldyBydWxlLgoJKHB1c2hfY2xhc3NfY29udGV4dCk6IFJld3JpdHRlbi4KCShwb3BfY2xhc3NfY29udGV4dCk6IExpa2V3aXNlLgoJKElOTkVSX1FVQUxJRklFUik6IE1hY3JvIGRlbGV0ZWQuCgkocmVwb3J0X2NsYXNzX2RlY2xhcmF0aW9uKTogY2FsbCBgcHVzaF9jbGFzc19jb250ZXh0JyB3aGVuCgllbnRlcmluZyB0aGUgZnVuY3Rpb24uIGBmcHJpbnRmJyBmb3JtYXQgbW9kaWZpZWQgbm90IHRvIHVzZQoJSU5ORVJfUVVBTElGSUVSLgoJKHJlcG9ydF9jbGFzc19kZWNsYXJhdGlvbik6IEFzc2lnbiBgcGFja2FnZV9uYW1lJyBhbmQKCWBjdXJyZW50X2NsYXNzJyB0byBOVUxMIHNlcGFyYXRseS4KCjIwMDAtMDctMzEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBDYWxsIGxheW91dF9jbGFzc19tZXRob2RzIG9uCgl0YXJnZXQgaW50ZXJmYWNlLgoKMjAwMC0wNy0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoJICAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoJICAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogQ3JlYXRlIHZ0YWJsZSBmb3IgYWJzdHJhY3QgY2xhc3Nlcy4KCShnZXRfZGlzcGF0Y2hfdGFibGUpOiBDaGFuZ2VkIHRvIGNvcGUgd2l0aCBhYnN0cmFjdCBjbGFzc2VzLgoKMjAwMC0wNy0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBEb24ndCByZXZlcnNlIHRoZSBhcmd1bWVudAoJbGlzdCB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgY2xhc3MgY29uc3RydWN0b3JzLiBGaXhlZCB0eXBvIGluCgljb21tZW50LgoKMjAwMC0wNy0yNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdCk6IFJldmVyc2UKCWNyYWZ0ZWQgbGlzdCB3aGVuIGJ1aWxkaW5nIGFsaWFzZXMgZm9yIGFub255bW91cyBjbGFzcwoJY29uc3RydWN0b3JzLgoKMjAwMC0wNy0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqZGVwX3Jlc29sdmVfY2xhc3MpOiBEb24ndCBib3RoZXIgY2hlY2tpbmcgcG90ZW50aWFsCglpbm5lcmNsYXNzIGFjY2VzcyBpZiBgZGVjbCcgaXMgTlVMTC4KCShmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kKTogVFJFRV9QVVJQT1NFIG9mIGBpbXBvcnQnIGNvbnRhaW5zIHRoZQoJV0ZMLgoKMjAwMC0wNy0yNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5jOiBSZW1vdmUgKGFnYWluLikKCjIwMDAtMDctMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hc19pbm5lcl9jbGFzcyk6IFJlbW92ZWQgMjAwMC0wNy0xOSBwYXRjaGVzLgoJKiBqY2YtcGFyc2UuYyAoSEFORExFX0lOTkVSQ0xBU1NFU19BVFRSSUJVVEUpOiBMb2NhbCBgZGVjbCcgbW92ZWQKCW91dHNpZGUgdGhlIGBpZicgc3RhdGVtZW50LCBhbGlhcyB0byBpbm5lcmNsYXNzIHJlbW92ZWQsIGBkZWNsJwoJdXNlZCB0byBtYXJrIHRoZSBjbGFzcyBjb21wbGV0ZS4KCjIwMDAtMDctMjEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX25hbWU6KTogRml4ZWQgdHlwbyBpbiBlcnJvciBtZXNzYWdlLgoKMjAwMC0wNy0yMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IExPT1BfRVhQUjosIFNXSVRDSF9FWFBSOiB0aGUgbm9kZQoJb3IgaXRzIGZpcnN0IG9wZXJhbmQgY2FuIGJlIGVycm9yIG1hcmtzLgoKMjAwMC0wNy0yMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChTRVRfVFlQRV9GT1JfUkVTT0xVVElPTik6IFVzZSBHRVRfQ1BDLgoJKiBwYXJzZS55IChtZXRob2RfaGVhZGVyKTogTGlrZXdpc2UuCgoyMDAwLTA3LTE5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHByb2Nlc3NfaW1wb3J0cyk6IENvbnNpZGVyIHRoYXQgb25lIG1pZ2h0IGJlIHRyeWluZyB0bwoJaW1wb3J0IGFuIGlubmVyY2xhc3MuIEZpeGVzIGdjai8yNTQKCjIwMDAtMDctMTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hc19pbm5lcl9jbGFzcyk6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUKCWVuY2xvc2luZyBjb250ZXh0IG9mIGFuIGlubmVyY2xhc3MgaGFzIGJlZW4gbG9hZGVkIGFzIGJ5dGVjb2RlLgoKMjAwMC0wNy0xOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfbmFtZTopOiBSZWplY3QgYCQnIGluIHR5cGUgbmFtZXMuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IFVzZSBgdHlwZScgYXMgYSBzZWNvbmQKCWFyZ3VtZW50IHRvIHJlc29sdmVfbm9fbGF5b3V0LiBGaXhlcyBnY2ovMjU3LgoKMjAwMC0wNy0xOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChmaW5kX21vc3Rfc3BlY2lmaWNfbWV0aG9kc19saXN0KTogU2VsZWN0IHRoZSBvbmx5Cglub24tYWJzdHJhY3QgbWV0aG9kIGV2ZW4gaWYgbWF4IGhhcyBiZWVuIHNldC4KCUZpeGVzIGdjai8yODUsIGdjai8yOTguCgoyMDAwLTA3LTE4ICBKZWZmIFN0dXJtICA8amVmZi5zdHVybUBhcHBuZXQuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBBZGRlZCAlKGpjMSkgdG8gamF2YSBjb21waWxlciBvcHRpb25zLgoKMjAwMC0wNy0xNCAgWmFjayBXZWluYmVyZyAgPHphY2tAd29sZXJ5LmN1bWIub3JnPgoKCSogLmN2c2lnbm9yZTogTmV3IGZpbGUuCgoyMDAwLTA3LTEzICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5vdF9hY2Nlc3NpYmxlX3ApOiBBY2Nlc3MgZ3JhbnRlZCB0byBpbm5lcmNsYXNzZXMKCShpbmRpcmVjdGx5KSBleHRlbmRpbmcgdGhlIHJlZmVyZW5jZSB0eXBlLiBGaXhlcyBnY2ovMjQ5LgoKMjAwMC0wNy0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEZpeGVkIGNvbW1lbnQuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBCdWlsZCB0aGlzJDxuPnMgdG8gdGhlIGNvbnRleHQgb2YgdGhlCgl0YXJnZXQgbWV0aG9kLCBvciBhIHR5cGUgdGhhdCBleHRlbmRzIGl0LiBGaXhlcyBnY2ovMjQyLgoKMjAwMC0wNy0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHBhcnNlLmM6IFJlbW92ZS4KCjIwMDAtMDctMTMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9sZF9jb25zdGFudF9mb3JfaW5pdCk6IEF2b2lkIGJ1bGxpc2ggY29udmVyc2lvbi4KCjIwMDAtMDctMTMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmctc3BlY3MuaDogQWRkZWQgJXtJKn0uCgoyMDAwLTA3LTEzICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBsYW5nLXNwZWNzLmg6IFVzZSB0aGUgbmV3IG5hbWVkIHNwZWNzLiAgUmVtb3ZlIHVubmVjZXNzYXJ5IGJyYWNlcy4KCjIwMDAtMDctMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwYXJzZS1zY2FuLmM6IFJlbW92ZS4KCjIwMDAtMDctMTAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBIYW5kbGVkIHByb3RlY3RlZCBpbm5lciBjbGFzc2VzLgoJKGNvbW1vbl9lbmNsb3NpbmdfY29udGV4dF9wKTogQmFpbCBlYXJseSBpZiBhcmd1bWVudHMgYXJlbid0IGJvdGgKCWlubmVyIGNsYXNzZXMuCgkoZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wpOiBIYW5kbGUgcHJpdmF0ZSBhbmQgcHJvdGVjdGVkIGlubmVyCgljbGFzc2VzLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9QUk9URUNURURfSU5ORVJfQ0xBU1MpOiBOZXcgbWFjcm8uCgkoQ0xBU1NfUFJPVEVDVEVEKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBiaXRmaWVsZCBgcG9pYycuCgkqIHBhcnNlLnkgKGpkZXBfcmVzb2x2ZV9jbGFzcyk6IENhbGwgY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzIG9uCglpbm5lciBjbGFzc2VzIG9ubHkuCgkoY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzKTogUmVuYW1lZCBhcmd1bWVudHMsIGFkZGVkCgljb21tZW50cy4gSGFuZGxlcyBwcm90ZWN0ZWQgaW5uZXIgY2xhc3NlcyAoZml4ZXMgZ2NqLzIyNSkKCShub3RfYWNjZXNzaWJsZV9wKTogRml4ZWQgY29tbWVudHMuIEF2b2lkIGhhbmRsaW5nIGlubmVyIGNsYXNzZXMuCgoyMDAwLTA3LTEwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFZlcmlmeSBxdWFsaWZpZWQKCWFjY2VzcyB0byBgdGhpcycuIEZpeGVzIGdjai8yMzkuCgoyMDAwLTA3LTEwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBEb24ndCBpbnN0YWxsIENvbnN0YW50VmFsdWUKCWZvciBudWxsIHBvaW50ZXJzLgoKMjAwMC0wNy0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgaW5uZXIgY2xhc3MKCWFjY2Vzcy4gRml4ZXMgZ2NqLzI1Ni4KCjIwMDAtMDctMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2NsYXNzZmlsZSk6IFByb3Blcmx5IGluc3RhbGwgdGhlCglDb25zdGFudFZhbHVlIGF0dHJpYnV0ZSBhbmQgdGhlIGluaXRpYWwgdmFsdWUgY29uc3RhbnQgcG9vbCBpbmRleAoJb24gc3RyaW5nIGNvbnN0YW50cy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiBLZWVwIERFQ0xfSU5JVElBTCB3aGVuIGVtaXR0aW5nCgljbGFzcyBmaWxlcy4KCjIwMDAtMDctMDYgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoQlVJTERfUFRSX0ZST01fTkFNRSk6IFN1cnJvdW5kIHdpdGggYSBkby93aGlsZQoJY29uc3RydWN0LgoJKiBwYXJzZS55IChmaW5kX2FzX2lubmVyX2NsYXNzKTogRml4ZWQgdHlwby4KCShkb19yZXNvbHZlX2NsYXNzKTogRXhwbG9yZSBlbmNsb3NpbmcgY29udGV4dHMgd2hlbiBzZWFyY2hpbmcgZm9yCglpbm5lcmNsYXNzZXMuIFJlbW92ZWQgY3VybHkgYnJhY2tldHMgYXJvdW5kIEJVSUxEX1BUUl9GUk9NX05BTUUuCgkoY2hlY2tfaW5uZXJfY2xhc3NfYWNjZXNzKTogQ2hlY2sgYGRlY2wnIHdoaWNoIGNhbiBiZSBudWxsIGluIGNhc2UKCW9mIHByZXZpb3VzIGVycm9ycy4KCjIwMDAtMDctMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGphdmFfZGVidWdfY29udGV4dCk6IERlY2xhcmVkIGBleHRlcm4nLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogRmllbGQgbXVzdCBiZSBgc3RhdGljJyBpbiBvcmRlcgoJdG8gYmUgcmVwbGFjZWQgYnkgaXRzIGluaXRpYWwgdmFsdWUuIEFkZGVkIGNvbW1lbnRzLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEZpeGVkIHR5cG8uCgkoZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCk6IE1ldGhvZHMgZm91bmQgaW4gaW5uZXJjbGFzc2VzCgl0YWtlIG92ZXIgbWV0aG9kcyBmb3VuZHMgaW4gdGhlIGVuY2xvc2luZyBjb250ZXh0cy4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBMb29zZW4gcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlIG9mIERFQ0xzCgl0aGF0IGNhbiBiZSByZXBsYWNlZCBieSB0aGVpciBpbml0aWFsaXphdGlvbiB2YWx1ZXMuCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogUmVtb3ZlZCBjYWxsIHRvIGBlbmNsb3NpbmdfY29udGV4dF9wJy4KCjIwMDAtMDctMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoUEFSU0VfRElSKTogTmV3IG1hY3JvLgoJKFBBUlNFX1JFTERJUik6IExpa2V3aXNlLgoJKFBBUlNFX0MpOiBMaWtld2lzZS4KCShQQVJTRV9TQ0FOX0MpOiBMaWtld2lzZS4KCSgkKFBBUlNFX0MpKTogTmV3IHRhcmdldC4KCSgkKFBBUlNFX1NDQU5fQykpOiBMaWtld2lzZS4KCShTRVRfQklTT04pOiBOZXcgbWFjcm8uCgkoQklTT05GTEFHUyk6IExpa2V3aXNlLgoJKEpBVkFCSVNPTkZMQUdTKTogTGlrZXdpc2UuCgoyMDAwLTA3LTAyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIGdqYXZhaC5jIChIQU5ETEVfTUVUSE9EKTogQ2FsbCBwcmludF9tZXRob2RfaW5mbyB3aXRoIGEgTlVMTCBzdHJlYW0KCWFyZ3VtZW50IG9uIHRoZSBmaXJzdCBwYXNzIGZvciBDTkkgYXMgd2VsbCBhcyBKTkkuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBTZXQgdXAgbWV0aG9kIG5hbWUgb24gdGhlIGZpcnN0IHBhc3Mgb25seS4KCjIwMDAtMDctMDEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUpOiBSZW1vdmVkIHBhcmFtZXRlcgoJYGlzX3N0YXRpYycuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFJlbW92ZWQgZmlyc3QgcGFzc2VkIHBhcmFtZXRlciB0bwoJcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuCgkoY3JlYXRlX2NsYXNzKTogTGlrZXdpc2UuIERvbid0IGluc3RhbGwgYWxpYXMgb24gc3RhdGljCglpbm5lcmNsYXNzZXMuIEZpeGVzIGdjai8yNzUuCgoyMDAwLTA3LTAxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX2dlbmVyYXRlX3ByZV9leHBhbmRfY2xpbml0KTogRG9uJ3QgYnVpbGQgYQoJZGVidWdhYmxlIHN0YXRlbWVudCB3aXRoIGVtcHR5X3N0bXRfbm9kZS4gRml4ZXMgZ2NqLzI3MgoKMjAwMC0wNy0wMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBMYXlvdXQgdHlwZSBhZnRlciBpdCdzIGxvYWRlZC4gRml4ZXMKCWdjai8yNzEuCgoyMDAwLTA2LTI5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChwdXNoX2xvbmdfY29uc3QpOiBBcHByb3ByaWF0ZWx5IGNhc3Qgc2hvcnQgbmVnYXRpdmUKCWNvbnN0YW50IHRvIGp3b3JkLgoKMjAwMC0wNi0yOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBVc2UgbG9vcCB2YXJpYWJsZQoJYG1fYXJnX3R5cGUnIGluaXRpYWxpemVkIHdpdGggYG1kZWNsX2FyZ190eXBlJy4KCjIwMDAtMDYtMjkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogSGFuZGxlIGNhc2Ugd2hlcmUgYHR5cGVfZm91bmQnCglpcyBOVUxMLgoKMjAwMC0wNi0yNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGxvb2t1cF9maWVsZCk6IFRoZSBzYW1lIGZpZWxkIGNhbiBiZSBmb3VuZCB0aHJvdWdoIHR3bwoJZGlmZmVyZW50IGludGVyZmFjZS4gRG9uJ3QgZGVjbGFyZSBpdCBhbWJpZ3VvdXMgaW4gdGhhdCBjYXNlLgoKMjAwMC0wNi0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbGluZXRlcm1pbmF0b3IpOiBEb24ndCByZWNvZ25pemUgXHIgYWZ0ZXIgXG4uICBJZiBccgoJZm9sbG93cyBcciwgdGhlbiB1bmdldCBpdCBhdCBhIGxvd2VyIGxldmVsLgoKMjAwMC0wNi0yNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBQYXNzIGRlY2wsIG5vdCBERUNMX0lOSVRJQUwsIHRvCglqYXZhX2NvbXBsZXRlX3RyZWUuCgoyMDAwLTA2LTI1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb3Jfc3RhdGVtZW50KTogV3JhcCBleHByZXNzaW9uIGluIGEgV0ZMIGlmIGl0IGlzIGEKCWNvbnN0YW50LiAgRm9yIFBSIGdjai8yNjguCgoyMDAwLTA2LTI1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGRvX3Jlc29sdmVfY2xhc3MpOiBNaW5vciBvcHRpbWl6dGlvbiBpbiB0aGUgcGFja2FnZQoJbGlzdCBzZWFyY2guIFJlbW92ZWQgdW5lY2Vzc2FyeSB0ZXN0IGFuZCByZXR1cm4gc3RhdGVtZW50LgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IE9yZGVyIG9mIGFyZ3VtZW50cyB0bwoJZW5jbG9zaW5nX2NvbnRleHRfcCBmaXhlZC4KCjIwMDAtMDYtMjQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAobG9va3VwX2ZpZWxkKTogUHJpbnQgZXJyb3IgYW5kIHJldHVybiBlcnJvcl9tYXJrX25vZGUgaWYKCWZpZWxkIHJlZmVyZW5jZSBpcyBhbWJpZ3VvdXMuCgoJKiBwYXJzZS55IChjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBBbHNvIGNoZWNrIGlmCglgb3RoZXJfbWV0aG9kJyBpcyBhYnN0cmFjdC4KCjIwMDAtMDYtMjMgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBIYW5kbGUgQUNDX1BSSVZBVEUgZm9yIChpbm5lcikKCWNsYXNzZXMuCgkqIGphdmEtdHJlZS5oIChUWVBFX1BSSVZBVEVfSU5ORVJfQ0xBU1MpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBmaWVsZCBgcGljJy4KCShDTEFTU19QUklWQVRFKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChjaGVja19pbm5lcl9jbGFzc19hY2Nlc3MpOiBOZXcgZnVuY3Rpb24uCgkoamRlcF9yZXNvbHZlX2NsYXNzKTogQ2FsbCBpdC4KCjIwMDAtMDYtMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2luY29tcGxldGVfY2xhc3NfcmVmKTogSW5pdGlhbGl6ZSB0aGUgcmV0dXJuZWQKCWNsYXNzLiAgRm9yIFBSIGdjai8yNjAuCgoyMDAwLTA2LTIxICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChwcmVwYXJlX2VoX3RhYmxlX3R5cGUpOiBVc2UgYENBVENIX0FMTF9UWVBFJy4KCjIwMDAtMDYtMjAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChFTkFCTEVfSkMxX0NIRUNLSU5HKTogUmVwbGFjZXMgRU5BQkxFX0NIRUNLSU5HIGZvcgoJSmF2YSBzcGVjaWZpYyBjaGVja3MuCgkqIGV4cHIuYyAoYnVpbGRfaW5zdGFuY2VvZik6IENMQVNTX0lOVEVSRkFDRSBhbmQgQ0xBU1NfRklOQUwgdXNhZ2UKCXNjcmVlbmVkIGJ5IERFQ0xfUC4KCSogamF2YS10cmVlLmRlZiAoQ0FTRV9FWFBSKTogTWFya2VkICdlJy4KCShERUZBVUxUX0VYUFIpOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmMgKHNldF9zb3VyY2VfZmlsZW5hbWUpOiBDTEFTU19DT01QTEVURV9QIHVzYWdlCglzY3JlZW5lZCBieSBERUNMX1AuCgkqIGpjZi13cml0ZS5jIChFTkFCTEVfSkMxX0NIRUNLSU5HKTogUmVwbGFjZXMgRU5BQkxFX0NIRUNLSU5HIGZvcgoJSmF2YSBzcGVjaWZpYyBjaGVja3MuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBUZXN0IHRyeV9ibG9jayBmb3IgQkxPQ0sgYmVmb3JlIHVzaW5nCglCTE9DS19FWFBSX0JPRFkuCgkqIHBhcnNlLnkgKGJ1aWxkX3dmbF93cmFwKTogQWRkZWQgYGxvY2F0aW9uJyBhcmd1bWVudC4gU2V0CglFWFBSX1dGTF9MSU5FQ09MIGFjY29yZGluZ2x5LgoJKGRpbV9leHByOik6IFdyYXAgY29uc3RhbnRzIHdpdGggV0ZMcy4KCShtZXRob2RfZGVjbGFyYXRvcik6IFVzZSBUUkVFX1RZUEUgbm90IFRZUEVfTkFNRSBvbiBHRVRfQ1BDLgoJKHJlc29sdmVfcGFja2FnZSk6IENoZWNrIGZvciBgc3RtdCcgbm90IGJlaW5nIGEgQkxPQ0sgYmVmb3JlCglidWlsZGluZyBhIGRlYnVnZ2FibGUgc3RhdGVtZW50IHdpdGggaXQuCgkobWFrZV9xdWFsaWZpZWRfcHJpbWFyeSk6IEFkZGVkIGV4dHJhIHBhcmFtZXRlciB0byBidWlsZF93Zmxfd3JhcAoJaW52b2NhdGlvbi4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IE1ha2Ugc3VyZSBgZGVjbCcgaXMgYSBERUNMIGJlZm9yZSB0cmVhdGluZwoJaXQgYXMgc3VjaC4KCShtYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYpOiBNYWtlIHN1cmUgYHdmbCcncyBub2RlIGlzIGFuCglJREVOVElGSUVSX05PREUgYmVmb3JlIHRyZWF0aW5nIGl0IGFzIHN1Y2guCgkocGF0Y2hfbmV3X2FycmF5X2luaXQpOiBNYWtlIHN1cmUgYGVsdCcgaXMgYSBUUkVFX0xJU1QgYmVmb3JlCgl0cmVhdGluZyBpdCBhcyBzdWNoLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IENMQVNTX0lOVEVSRkFDRSBtYWNybwoJdG8gYmUgYXBwbGllZCBvbmx5IG9uIG5vbiBhcnJheSB0eXBlcy4KCjIwMDAtMDYtMTYgIFBlciBCb3RobmVyICA8cGVyQGJvdGhuZXIuY29tPgoKCSogamF2YS10cmVlLmggKExBQkVMX1JFVFVSTl9MQUJFTFMsIExBQkVMX1BFTkRJTkdfQ0hBSU4pOiAgRG9uJ3QKCWRlZmluZSBpbiB0ZXJtcyBvZiBERUNMX1JFU1VMVCwgYXMgdGhhdCBmYWlscyB3aGVuIC0tZW5hYmxlLWNoZWNraW5nLgoKMjAwMC0wNi0xNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogamNmLXdyaXRlLmMgKENIRUNLX1BVVCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLiAgTWFrZSBwb2ludGVyCgl0eXBlcyB0aGUgc2FtZSBpbiBjb21wYXJpc29uLgoJKENIRUNLX09QKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoyMDAwLTA2LTEzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiBTZXQgVFlQRV9VU0VSX0FMSUdOLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2NsYXNzKTogU2V0IERFQ0xfVVNFUl9BTElHTi4KCSogcGFyc2UuYzogUmVidWlsdC4KCjIwMDAtMDYtMTEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRlY2wuYyAoY3JlYXRlX3ByaW1pdGl2ZV92dGFibGUpOiBQcm90b3R5cGUuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBJbml0aWFsaXplIHZhcmlhYmxlCglgc2F2ZWRfY29udGV4dCcuCgoJKiBsYW5nLmMgKGxhbmdfZ2V0X2FsaWFzX3NldCk6IE1hcmsgcGFyYW1ldGVyIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCjIwMDAtMDYtMDkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgoKCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogVXNlIGEgaGFzaHRhYmxlCgl0byB0cmFjayBzZWFyY2hlZCBjbGFzc2VzLCBhbmQgZG8gbm90IHNlYXJjaCB0aGUgc2FtZSBjbGFzcyBtb3JlIHRoYW4KCW9uY2UuIENhbGwgZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0IG9uIGltbWVkaWF0ZQoJc3VwZXJjbGFzcywgaW5zdGVhZCBvZiBzZWFyY2hfYXBwbGljYWJsZV9tZXRob2RfbGlzdCBvbiBhbGwgYW5jZXN0b3JzLgoJRml4IGZvciBQUiBnY2ovMjM4LgoKMjAwMC0wNi0wOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBwYXJzZS55IChyZWdpc3Rlcl9maWVsZHMpOiBQZXJtaXQgc3RhdGljIGZpZWxkcyBpbiBpbm5lciBjbGFzc2VzCglpZiB0aGV5IGFyZSBmaW5hbC4gRml4IGZvciBQUiBnY2ovMjU1LgoKMjAwMC0wNi0wNiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChSRUdJU1RFUl9JTVBPUlQpOiBVc2UgYGNoYWlub24nIHRvIGxpbmsgbmV3IGVudHJpZXMuCgkqIHBhcnNlLnkgKGZpbmRfaW5faW1wb3J0cyk6IFJldHVybmVkIHR5cGUgY2hhbmdlZCB0byB2b2lkLAoJbGVhZGluZyBjb21tZW50IGZpeGVkLgoJKHJlZ2lzdGVyX3BhY2thZ2UpOiBOZXcgZnVuY3Rpb24uCgkocXVhbGlmeV9hbmRfZmluZCk6IExpa2V3aXNlLgoJKHBhY2thZ2VfZGVjbGFyYXRpb246KTogVXNlIGByZWdpc3Rlcl9wYWNrYWdlJy4KCShzaW5nbGVfdHlwZV9pbXBvcnRfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBsb2NhbCB2YXJpYWJsZQoJYG5vZGUnLiBBZGRlZCBtaXNzaW5nIGA7JyBmb3IgY29uc2lzdGVuY3kuCgkodHlwZV9pbXBvcnRfb25fZGVtYW5kX2RlY2xhcmF0aW9uOik6IFVzZSBgY2hhaW5vbicgdG8gbGluayBuZXcKCWVudHJpZXMuCgkobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiBMb29rdXAgbG9jYWwgdmFyaWFibGVzIGRlZmluZWQgaW4gb3V0ZXIKCWNvbnRleHRzIGZpcnN0LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBEb24ndCByZXZlcnNlIHRoZSBsaXN0IG9mIGltcG9ydGVkIG9uIGRlbWFuZC4KCShkb19yZXNvbHZlX2NsYXNzKTogUmVvcmdhbml6ZWQuIFJlbW92ZWQgbG9jYWwgdmFyaWFibGUKCWBvcmlnaW5hbF9uYW1lJy4gQ2FsbCBgcXVhbGlmeV9hbmRfZmluZCcgd2l0aCB0aGUgY3VycmVudCBwYWNrYWdlCgluYW1lLCBpbnZva2UgYGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQnIHJpZ2h0IGFmdGVyLiBDYWxsCglgcXVhbGlmeV9hbmRfZmluZCcgd2l0aCB0aGUgcGFja2FnZXMgd2UndmUgc2VlbiBzbyBmYXIuIEZpeGVkCglvcGVyYXRpb25zIG51bWJlcmluZyBpbiBjb21tZW50cy4KCShqYXZhX2V4cGFuZF9jbGFzcyk6IERvbid0IHJldmVyc2UgYHBhY2thZ2VfbGlzdCcuCgkoZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCk6IE5ldyBsb2NhbCB2YXJpYWJsZXMgYGFic3RyYWN0JwoJYW5kIGBjYW5kaWRhdGVzJy4gVXNlIHRoZW0gdG8gcGljayB0aGUgcmlnaHQgbWV0aG9kLgoKVHVlIEp1biAgNiAxMTozOTowNSAyMDAwICBUb20gVHJvbWV5ICA8dHJvbWV5QGZlcnJ1bGUuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSk6IERvbid0IHN1YnRyYWN0IG91dAoJYFBVQkxJQ19USycgZnJvbSBhcmd1bWVudCB0byBUSElTX01PRElGSUVSX09OTFkuCgoyMDAwLTA2LTA0ICBQaGlsaXBwIFRob21hcyAgPHB0aG9tYXNAc3VzZS5kZT4KCgkqIE1ha2VmaWxlLmluIChJTlRMTElCUyk6IE5ldy4KCShMSUJTKTogQWRkIGFib3ZlLgoJKERFUExJQlMpOiBEaXR0by4KCkZyaSBKdW4gIDIgMTY6NDg6NTUgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChnZXRfZGlzcGF0Y2hfdGFibGUpOiBCdWlsZCB0aGUgdnRhYmxlIGR1bW15IGVudHJ5IGxpc3QKIAllbGVtZW50IHdpdGggYSBudWxsIHB1cnBvc2UuIEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCShidWlsZF9kdGFibGVfZGVjbCk6IEJ1aWxkIGFuIGFjY3VyYXRlIGR0YWJsZSB0eXBlIHdoZW4gYXBwcm9wcmlhdGUKIAlhbmQgdXNlIGl0LgoKMjAwMC0wNi0wMiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19nZXRfYWxpYXNfc2V0KTogTmV3LgoKMjAwMC0wNS0zMSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IENvbXBsZXRlIHRoZSBERUNMX0lOSVRJQUwgdHJlZQoJYmVmb3JlIHVzaW5nIGl0IGFzIHRoZSBhY2Nlc3NlZCBmaWVsZC4KCjIwMDAtMDUtMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChib29sZWFuX2FycmF5X3Z0YWJsZSwgYnl0ZV9hcnJheV92dGFibGUsCgljaGFyX2FycmF5X3Z0YWJsZSwgc2hvcnRfYXJyYXlfdnRhYmxlLCBpbnRfYXJyYXlfdnRhYmxlLAoJbG9uZ19hcnJheV92dGFibGUsIGZsb2F0X2FycmF5X3Z0YWJsZSwgZG91YmxlX2FycmF5X3Z0YWJsZSk6CglEZWNsYXJlLgoJKiBleHByLmMgKGdldF9wcmltaXRpdmVfYXJyYXlfdnRhYmxlKTogTmV3IGZ1bmN0aW9uLgoJKGNyZWF0ZV9wcmltaXRpdmVfdnRhYmxlKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IEVuYWJsZSBjb2RlIHRvIHN0YXRpY2FsbHkgZ2VuZXJhdGUKCWFycmF5cy4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENyZWF0ZSBwcmltaXRpdmUgdnRhYmxlcy4KCShib29sZWFuX2FycmF5X3Z0YWJsZSwgYnl0ZV9hcnJheV92dGFibGUsIGNoYXJfYXJyYXlfdnRhYmxlLAoJc2hvcnRfYXJyYXlfdnRhYmxlLCBpbnRfYXJyYXlfdnRhYmxlLCBsb25nX2FycmF5X3Z0YWJsZSwKCWZsb2F0X2FycmF5X3Z0YWJsZSwgZG91YmxlX2FycmF5X3Z0YWJsZSk6IERlZmluZS4KCjIwMDAtMDUtMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGphdmEvcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KToKCURvbid0IGFkZCBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRvIHRoZSBsaXN0LgoKMjAwMC0wNS0yNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBEb24ndCBjaGVjayBERUNMX0xBTkdfU1BFQ0lGSUMKCXdoZW4gdHJ5aW5nIHRvIHNlZSBpZiBmaWVsZCdzIGNsYXNzIHNob3VsZCBiZSBpbml0aWFsaXplZC4gIEFsd2F5cwoJaW5pdGlhbGl6ZSBmaWVsZCdzIGRlY2xhcmluZyBjbGFzcywgbm90IHF1YWxpZmllZCBjbGFzcy4KCUZvciBQUiBnY2ovMTYyLgoKCSogcGFyc2UueSAoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBQYXNzIGB3ZmxfdmFsdWUnLCBub3QKCWB3Zmxfb3BlcmF0b3InLCB0byBtYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYuCglGaXhlcyBQUiBnY2ovMjM1LgoKMjAwMC0wNS0yMyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgogICAgICAgKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IERvbid0IHRyeSB0byBsb29rdXAgbWV0aG9kcwogICAgICAgaW4gcHJpbWl0aXZlIHR5cGVzLgoKMjAwMC0wNS0wMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IENhbGwgdGhlIGFwcHJvcHJpYXRlIDxjbGluaXQ+CgliZWZvcmUgYWNjZXNzaW5nIHRoZSBsZW5ndGggb2YgYSBzdGF0aWMgYXJyYXkuIENyYWZ0IGEgZGVjbCBmb3IKCXRoZSBmaWVsZCB3aGlsZSBpdHMgdGltZS4gRml4ZXMgUFIgZ2NqLzEyOS4KCjIwMDAtMDUtMDEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9wYWNrYWdlKTogQ29ycmVjdGx5IHNldCBgKm5leHQnICh3YXMgb2ZmIGJ5CglvbmUuKQoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGNvbW1lbnQuCgpUaHUgQXByIDI3IDE3OjQ3OjM0IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBSZXNldCBjdXJyZW50X2NsYXNzIGFuZAogCWN1cnJlbnRfZnVuY3Rpb25fZGVjbCB0byBOVUxMIGJlZm9yZSBwYXJzaW5nIGEgbmV3IGZpbGUuCgpUaHUgQXByIDI3IDE3OjI1OjMzIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoYmxvY2tfZW5kOik6IElmIHRoZSBjb2xsZWN0ZWQgYmxvY2sgZG9lc24ndCBmZWF0dXJlIGEKIAlzdGF0ZW1lbnQsIGluc2VydCBhbiBlbXB0eSBzdGF0ZW1lbnQuCgoyMDAwLTA0LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG1heWJlX3lhbmtfY2xpbml0KTogTmV3IGZ1bmN0aW9uLgoJKG1heWJlX2dlbmVyYXRlX3ByZV9leHBhbmRfY2xpbml0KTogQWx3YXlzIGxpbmsgPGNsaW5pdD4gYXQgdGhlCgllbmQgb2YgdGhlIGxpc3Qgb2YgbWV0aG9kcyBiZWxvbmdpbmcgdG8gYSBjbGFzcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBDaGVjayB3aGV0aGVyIDxjbGluaXQ+IGlzIHJlYWxseQoJbmVjZXNzYXJ5IGFuZCBleHBhbmQgaXQgYWNjb3JkaW5nbHkuCgoyMDAwLTA0LTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBMZXQgVkFSX0RFQ0wgYW5kIEZJRUxEX0RFQ0wgYmUKCXByb2Nlc3NlZCBieSB0aGUgbWV0aG9kJ3Mgc3dpdGNoIHN0YXRlbWVudC4KCjIwMDAtMDUtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oOiBBZGRlZCBpbml0IHN0YXRlIGVudW0uCgkqIGRlY2wuYyAoZW1pdF9pbml0X3Rlc3RfaW5pdGlhbGl6YXRpb24pOiBJbml0aWFsaXplIGNsYXNzCglpbml0aWFsaXphdGlvbiBjaGVjayB2YXJpYWJsZSBieSBsb29raW5nIGF0IGNsYXNzJyBzdGF0ZS4KCjIwMDAtMDUtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChidWlsZF9pbnN0YW5jZW9mKTogRGVjbGFyZS4KCShidWlsZF9nZXRfY2xhc3MpOiBEZWNsYXJlLgoJKiBwYXJzZS55IChwYXRjaF9iaW5vcCk6IFVzZSBidWlsZF9pbnN0YW5jZW9mLgoJKiBleHByLmMgKGJ1aWxkX2luc3RhbmNlb2YpOiBOZXcgZnVuY3Rpb24uICBJZiBjbGFzcyBpcyBmaW5hbCwKCWRvbid0IG1ha2UgYSBmdW5jdGlvbiBjYWxsLgoJKGV4cGFuZF9qYXZhX0lOU1RBTkNFT0YpOiBVc2UgaXQuCgkoYnVpbGRfZ2V0X2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoKMjAwMC0wNS0xOCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogU2NhbiB0aGUgc291cmNlX2ZpbGUgZm9yCglzbGFzaGVzIHdpdGggdGhlIHJpZ2h0IHBvaW50ZXIgdmFyaWFibGUuCgpXZWQgTWF5IDE3IDE3OjI3OjQ0IDIwMDAgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogVXBkYXRlIC1XdW51c2VkIGZsYWdzIGJ5IGNhbGxpbmcKIAlzZXRfV3VudXNlZC4KCSogZGVjbC5jIChwb3BsZXZlbCk6IFJlcGxhY2Ugd2Fybl91bnVzZWQgd2l0aCB3YXJuX3VudXNlZF9sYWJlbC4KCjIwMDAtMDUtMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIGNoZWNrX2luaXQuYyAoY2hlY2tfaW5pdCk6IENvbnN0aWZ5IGxvY2FsIGNoYXIgKi4KCSogY2xhc3MuYyAocHVzaF9jbGFzcyk6IENvbnN0aWZ5IGxvY2FsIGNoYXIgKi4KCSogamF2YV90cmVlLmg6IFVwZGF0ZSBwcm90b3R5cGVzLgoJKiBqY2YtaW8uYyAob3Blbl9jbGFzcyk6IENvbnN0aWZ5IGZpbGVuYW1lIHBhcmFtZXRlciBhbmQKCXJldHVybiB2YWx1ZS4KCShmaW5kX2NsYXNzKTogUmVtb3ZlIHJlZHVuZGFudCBzdHJpbmcgY29weS4gIENhc3QgcmV0dXJuIGZyb20KCW9wZW5fY2xhc3MuCgkqIGpjZi1wYXJzZS5jIChyZWFkX2NsYXNzLCBwYXJzZV9jbGFzc19maWxlLCB5eXBhcnNlKToKCUNvbnN0aWZ5IGxvY2FsIGNoYXIgKi4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zLCBnZW5lcmF0ZV9jbGFzc2ZpbGUpOgoJQ29uc3RpZnkgbG9jYWwgY2hhciAqLgoJKiBqY2YuaCAoSkNGKTogQ29uc3RpZnkgZmlsZW5hbWUgYW5kIGNsYXNzbmFtZS4KCShKQ0ZfRklOSVNIKTogQ2FzdCBhcmdzIHRvIEZSRUUgdG8gY2hhciAqIHdoZW4gYXBwcm9wcmlhdGUuCgkqIGxhbmcuYyAoaW5pdF9wYXJzZSk6IENvbnN0aWZ5IHBhcmFtZXRlciBhbmQgcmV0dXJuIHZhbHVlLgoJKiBsZXguYyAoamF2YV9nZXRfbGluZV9jb2wpOiBDb25zdGlmeSBmaWxlbmFtZSBwYXJhbWV0ZXIuCgkqIHBhcnNlLmg6IENvbnN0aWZ5IHBhcnNlcl9jdHh0LmZpbGVuYW1lLiAgVXBkYXRlIHByb3RvdHlwZXMuCgkqIHBhcnNlLnkgKGphdmFfcGFyc2VyX2NvbnRleHRfc3VzcGVuZCwKCWlzc3VlX3dhcm5pbmdfZXJyb3JfZnJvbV9jb250ZXh0LCBzYWZlX2xheW91dF9jbGFzcyk6IENvbnN0aWZ5Cglsb2NhbCBjaGFyICouCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGUuCgoyMDAwLTA1LTA4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2puaV9zdHViKTogQ2FjaGUgdGhlIHJlc3VsdCBvZgoJX0p2X0xvb2t1cEpOSU1ldGhvZC4KCjIwMDAtMDUtMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChwcmVkZWZfZmlsZW5hbWVzX3NpemUpOiBOb3cgNy4KCShwcmVkZWZfZmlsZW5hbWVzKTogTmV3IHNldmVudGggZW50cnkuCgoyMDAwLTA1LTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBib2VobS5jIChtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBEb24ndCBtYXJrIFJhd0RhdGEgZmllbGRzLgoJS2VlcCB0cmFjayBvZiB3aGVuIHdlJ3ZlIHNlZW4gYSByZWZlcmVuY2UgZmllbGQgYWZ0ZXIgYQoJbm9uLXJlZmVyZW5jZSBmaWVsZC4KCShnZXRfYm9laG1fdHlwZV9kZXNjcmlwdG9yKTogSGFuZGxlIGNhc2Ugd2hlcmUgd2Ugc2VlCglub24tcmVmZXJlbmNlIGZpZWxkcyBidXQgbm8gdHJhaWxpbmcgcmVmZXJlbmNlIGZpZWxkLgoJKiBkZWNsLmMgKHJhd2RhdGFfcHRyX3R5cGVfbm9kZSk6IERlZmluZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgcmF3ZGF0YV9wdHJfdHlwZV9ub2RlLgoJKiBqYXZhLXRyZWUuaCAocmF3ZGF0YV9wdHJfdHlwZV9ub2RlKTogRGVjbGFyZS4KCjIwMDAtMDUtMDQgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGpjZi1kdW1wLmMgKFNQRUNJQUxfSUlOQyk6IEVuc3VyZSBhcmd1bWVudHMgbWF0Y2ggZm9ybWF0CglzcGVjaWZpZXJzIGluIGNhbGxzIHRvIGZwcmludGYuCgoyMDAwLTA1LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9qc3IpOiBVc2UgZW1pdF9qdW1wLCBub3QgZXhwYW5kX2dvdG8uCgoJKiBqYXZhb3AuaCAoV09SRF9UT19JTlQpOiBOZXcgZnVuY3Rpb24uCgkoSU1NRURJQVRFX3M0KTogVXNlIFdPUkRfVE9fSU5ULgoJKiBqY2YuaCAoSlBPT0xfSU5UKTogRGl0dG8uCgoJKiBnamF2YWguYyAoZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IERvbid0IHRyZWF0IGAkJyBhcyBuYW1lc3BhY2UKCXNlcGFyYXRvci4KCjIwMDAtMDQtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFkZF9tZXRob2RfMSk6IFNldCBib3RoIERFQ0xfRVhURVJOQUwgYW5kIE1FVEhPRF9OQVRJVkUKCW9uIG5hdGl2ZSBmdW5jdGlvbi4KCSogamNmLXBhcnNlLmMgKHBhcnNlX2NsYXNzX2ZpbGUpOiBDYWxsIGJ1aWxkX2puaV9zdHViIGZvciBuYXRpdmUKCUpOSSBtZXRob2RzLgoJKiBleHByLmMgKGJ1aWxkX2puaV9zdHViKTogTmV3IGZ1bmN0aW9uLgoJKiBsYW5nLXNwZWNzLmg6IC1mam5pIGFuZCAtZmVtaXQtY2xhc3MtZmlsZSBhcmUgaW5jb21wYXRpYmxlLgoJKiBwYXJzZS5jOiBSZWJ1aWx0LgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRXhwYW5kIGEgbmF0aXZlIG1ldGhvZAoJYW5kIGNhbGwgYnVpbGRfam5pX3N0dWIgaWYgLWZqbmkgZ2l2ZW4uCgkqIGxhbmctb3B0aW9ucy5oOiBEb2N1bWVudCAtZmpuaS4KCSogbGFuZy5jIChmbGFnX2puaSk6IE5ldyBnbG9iYWwuCgkobGFuZ19mX29wdGlvbnMpOiBBZGRlZCBgam5pJyBlbnRyeS4KCSogamF2YS10cmVlLmggKHNvZnRfbG9va3Vwam5pbWV0aG9kX25vZGUsCglzb2Z0X2dldGpuaWVudm5ld2ZyYW1lX25vZGUsIHNvZnRfam5pcG9wc3lzdGVtZnJhbWVfbm9kZSk6CglEZWNsYXJlLgoJKGZsYWdfam5pKTogRGVjbGFyZS4KCShidWlsZF9qbmlfc3R1Yik6IERlY2xhcmUuCgkoc3RydWN0IGxhbmdfZGVjbCk6IEFkZGVkIGBuYXRpdmUnIGZsYWcuCgkoTUVUSE9EX05BVElWRSk6IFJlZGVmaW5lZCB0byB1c2UgYG5hdGl2ZScgZmllbGQgb2YgbGFuZyBzcGVjaWZpYwoJc3RydWN0dXJlLgoJKiBkZWNsLmMgKHNvZnRfbG9va3Vwam5pbWV0aG9kX25vZGUsIHNvZnRfZ2V0am5pZW52bmV3ZnJhbWVfbm9kZSwKCXNvZnRfam5pcG9wc3lzdGVtZnJhbWVfbm9kZSk6IE5ldyBnbG9iYWxzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHRoZW0uICBfSnZfSW5pdENsYXNzIG9ubHkgdGFrZXMgb25lCglhcmd1bWVudC4KCgkqIGphdmEtdHJlZS5kZWY6IFB1dCBpbnRvIGBDJyBtb2RlLgoKMjAwMC0wNC0yNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCUZpeCBmb3IgUFIgZ2NqLzI6CgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6IEdlbmVyYXRlIGNoZWNrIHRvIHNlZSBpZiBvYmplY3QgcG9pbnRlcgoJaXMgbnVsbCBpbiBub252aXJ0dWFsIGludm9jYXRpb24gY2FzZS4KCSogamF2YS10cmVlLmggKHNvZnRfbnVsbHBvaW50ZXJfbm9kZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAoc29mdF9udWxscG9pbnRlcl9ub2RlKTogTmV3IGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgc29mdF9udWxscG9pbnRlcl9ub2RlLgoJKiBwYXJzZS55IChpbnZvY2F0aW9uX21vZGUpOiBSZXR1cm4gSU5WT0tFX05PTlZJUlRVQUwgZm9yIGBmaW5hbCcKCW9yIGBwcml2YXRlJyBtZXRob2RzLgoJKHBhdGNoX2ludm9rZSk6IEhhbmRsZSBJTlZPS0VfTk9OVklSVFVBTCBjYXNlLgoKV2VkIEFwciAyNiAxNDoyOTozMyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBjYWxsIF9Kdl9Jbml0Q2xhc3MKIAlmcm9tIDxjbGluaXQ+CgoyMDAwLTA0LTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiB6ZXh0cmFjdC5jIChmaW5kX3ppcF9maWxlX3N0YXJ0KTogTmV3IGZ1bmN0aW9uLgoJKHJlYWRfemlwX2FyY2hpdmUpOiBVc2UgaXQuCgoyMDAwLTA0LTI1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IEhhbmRsZSBKREVQX0FOT05ZTU9VUy4KCjIwMDAtMDQtMjQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoY29tbW9uX2VuY2xvc2luZ19jb250ZXh0X3ApOiBOZXcgZnVuY3Rpb24uCgkqIGphdmEtdHJlZS5oIChjb21tb25fZW5jbG9zaW5nX2NvbnRleHRfcCk6IEFkZGVkIHByb3RvdHlwZS4KCSogcGFyc2UuaCAoSU5ORVJfRU5DTE9TSU5HX1NDT1BFX0NIRUNLKTogUmVsYXhlZCB0ZXN0IHRvIGFsbG93CgljbGFzc2VzIHNoYXJpbmcgYW4gb3V0ZXIgY29udGV4dCB3aXRoIHRoZSBjdXJyZW50IGluc3RhbmNlLgoJKiBwYXJzZS55IChidWlsZF9hY2Nlc3NfdG9fdGhpc24pOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuCgkodmVyaWZ5X2NvbnN0cnVjdG9yX3N1cGVyKTogTmV3IGxvY2FsIGBzdXBwZXJfaW5uZXInLiBTa2lwCgllbmNsb3NpbmcgY29udGV4dCBhcmd1bWVudCBpbiB0aGUgY2FzZSBvZiBpbm5lciBjbGFzcyBjb25zdHJ1Y3RvcnMuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBJbnNlcnQgcHJvcGVyIGNvbnRleHQgYXMgc2Vjb25kCglwYXJhbWV0ZXIgdG8gcHVyZSBpbm5lciBjbGFzcyBjb25zdHJ1Y3RvciBzdXBlciBpbnZvY2F0aW9ucy4KCk1vbiBBcHIgMjQgMTQ6NTk6MzYgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChlbmRfY2xhc3NfZGVjbGFyYXRpb24pOiBSZXNldCB0aGUgaW50ZXJmYWNlIG51bWJlcgogCWNvdW50ZXIuCgoyMDAwLTA0LTI0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IERlbGV0ZWQgdW5lY2Vzc2FyeSBjb2RlLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogRml4ZWQgY29tbWVudC4KCjIwMDAtMDQtMjQgIFJvYmVydCBMaXBlIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBwYXJzZS5oIChfamRlcCk6IE1lbWJlciBga2luZCcgbm93IEVOVU1fQklURklFTEQuCgoyMDAwLTA0LTIzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBib2VobS5jIChtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBVc2UgaW50X2J5dGVfcG9zaXRpb24uCgoyMDAwLTA0LTIyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBib2VobS5jIChtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBPbmx5IGNhbGwgYnl0ZV9wb3NpdGlvbiBvbgoJbm9uLXN0YXRpYyBmaWVsZHMuCgoyMDAwLTA0LTIyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBib2VobS5jIChtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBBZGRlZCBgbGFzdF92aWV3X2luZGV4JwoJYXJndW1lbnQuICBVc2UgREVDTF9GSUVMRF9PRkZTRVQgdG8gZGV0ZXJtaW5lIGZpZWxkJ3Mgb2Zmc2V0LgoKVGh1IEFwciAyMCAxNzo0MToyOCAyMDAwICBNbyBEZUpvbmcgIDxtZGVqb25nQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChJTlRFUkZBQ0VfSU5ORVJfTU9ESUZJRVJTKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBGaXhlZCBjb21tZW50cy4gU2VsZWN0CiAJcGVybWl0dGVkIG1vZGlmaWVycyBmb3IgKGlubmVyKSBpbnRlcmZhY2VzLiBDaGFuZ2VkIGVycm9yIG1lc3NhZ2UKIAl0byByZXBvcnQgcmVqZWN0ZWQgbW9kaWZpZXJzIHVzZWQgd2l0aCBsb2NhbCBjbGFzc2VzLgoKMjAwMC0wNC0yMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChJTk5FUl9FTkNMT1NJTkdfU0NPUEVfQ0hFQ0spOiBJbW1lZGlhdGUgaW5uZXIgY2xhc3NlcwoJb2YgZGlyZWN0bHkgaW5oZXJpdGVkIHR5cGUgY29uc2lkZXJlZCBpbiBzY29wZS4KCSogcGFyc2UueSAoZG9fcmVzb2x2ZV9jbGFzcyk6IFNlYXJjaCBpbmhlcml0ZWQgY2xhc3NlcyBmb3IgaW5uZXIKCWNsYXNzZXMuCgoyMDAwLTA0LTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChub3RfYWNjZXNzaWJsZV9wKTogVXNlIG1lbWJlcidzIGNsYXNzLCBub3QgY3VycmVudAoJY2xhc3MsIHdoZW4gZG9pbmcgaW5oZXJpdGFuY2UgY2hlY2sgZm9yIHByb3RlY3RlZCByZWZlcmVuY2UuCglGaXhlcyBQUiBnY2ovMTI0LgoKVGh1IEFwciAyMCAxODoyMDo1OCAyMDAwICBKYXNvbiBTY2hyb2VkZXIgIDxzaHJvZGVAc3VibmF0dXJlLmNvbT4KCgkqIGpjZi1kdW1wLmMgKFNQRUNJQUxfSUlOQyk6IEZpeGVkIHR5cG8gcHJpbnRpbmcgaWluYyBpbnN0cnVjdGlvbi4KCjIwMDAtMDQtMTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiBTZWFyY2ggZm9yIGZpbmFsIGxvY2FsIGFsaWFzZXMuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBMZXQgbG9va3VwX2ZpZWxkX3dyYXBwZXIgc2VhcmNoIGZvcgoJZmluYWwgbG9jYWwgYWxpYXNlcy4gRm9yY2UgdGhlIHZhbHVlIG9mIGBuYW1lJyBpZiBvbmUgaXMgZm91bmQuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IENPTlZFUlRfRVhQUiBpcyBlbm91Z2ggdG8gbm93IHdlIGhhdmUKCWFuIGV4cHJlc3Npb24gbmFtZS4gRml4ZWQgY29tbWVudHMuCgoyMDAwLTA0LTE5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHl5ZXJyb3IpOiBgbXNnJyBjYW4gYmUgbnVsbCwgZG9uJ3QgdXNlIGl0IGluIHRoYXQgY2FzZS4KCjIwMDAtMDQtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChjeHhfa2V5d29yZF9zdWJzdCk6IEF2b2lkIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wLgoKMjAwMC0wNC0xOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtYXliZV9tYWtlX25lc3RlZF9jbGFzc19uYW1lKTogVXNlIGBvYnN0YWNrX2dyb3cwJy4KCjIwMDAtMDQtMTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCglQUiBnY2ovMjExOgoJKiBnamF2YWguYyAodXRmOF9jbXApOiBDaGFuZ2VkIHJldHVybiB2YWx1ZS4KCShjeHhfa2V5d29yZF9zdWJzdCk6IEhhbmRsZSBhbGwgQysrIGtleXdvcmRzLiAgQWxsb2NhdGUgbmV3IHJldHVybgoJcmVzdWx0LgoJKGN4eF9rZXl3b3Jkcyk6IE5ldyBnbG9iYWwuCgkoZ2V0X2ZpZWxkX25hbWUpOiBIYW5kbGUgbmV3IHJlc3VsdCBvZiBjeHhfa2V5d29yZF9zdWJzdC4KCShwcmludF9tZXRob2RfaW5mbyk6IExpa2V3aXNlLgoKMjAwMC0wNC0xNyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBnamF2YWguYyAocHJpbnRfbmFtZV9mb3Jfc3R1Yl9vcl9qbmkpOiBEb24ndCBwcmVmaXggbWV0aG9kIG5hbWVzCgl3aXRoIGEgbmV3bGluZSwgZm9yIENOSS4KCShwcmludF9zdHViX29yX2puaSk6IFByaW50IGEgc3BhY2Ugb3IgbmV3bGluZSBiZWZvcmUgbWV0aG9kIG5hbWUgZm9yCglDTkkgYXMgd2VsbCBhcyBKTkkuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IERvbid0IHdyaXRlIGxlYWRpbmcgIjo6IiBpbiBDTkkgc3R1YiBtZXRob2QuCgkocHJvY2Vzc19maWxlKTogSW5jbHVkZSBnY2ovY25pLmggaWYgZ2VuZXJhdGluZyBDTkkgc3R1YnMuCgoyMDAwLTA0LTE2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoZGVjb21waWxlX21ldGhvZCk6IFVzZSBwcmludF9maWVsZF9uYW1lLgoJRml4ZXMgUFIgZ2NqLzIwNS4KCjIwMDAtMDQtMTQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9leHBhbmRfY2xhc3Nlcyk6IFJldmVyc2UgdGhlIHBhY2thZ2UgbGlzdCBvbmNlLgoJKGphdmFfY29tcGxldGVfbGhzKTogUExVU19FWFBSOiBkb24ndCB0cnkgcmhzIGFuZCBsaHMgYXQgc3RyaW5nCglyZWR1Y3Rpb24uCgkocGF0Y2hfYmlub3ApOiBOZXcgdGVtcCBgY24nLiBDYWxsIHBhdGNoX3N0cmluZyBvbiBMSFMvUkhTIG9mCgl0aGUgYD09JyBhbmQgYCE9JyBvcGVyYXRvcnMuCgoyMDAwLTA0LTA1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IEF0IGludm9rYXRpb24gdGltZSwKCWFsd2F5cyByZWxhdGUgYW4gaW50ZXJmYWNlIG1ldGhvZCB0byB0aGUgdHlwZSBvZiBpdHMgc2VsZWN0b3IuCgoyMDAwLTA0LTA1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJRml4IGZvciBQUiBnY2ovMjoKCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogR2VuZXJhdGUgY2hlY2sgdG8gc2VlIGlmIG9iamVjdCBwb2ludGVyCglpcyBudWxsIGluIG5vbnZpcnR1YWwgaW52b2NhdGlvbiBjYXNlLgoJKiBqYXZhLXRyZWUuaCAoc29mdF9udWxscG9pbnRlcl9ub2RlKTogRGVjbGFyZS4KCSogZGVjbC5jIChzb2Z0X251bGxwb2ludGVyX25vZGUpOiBOZXcgZ2xvYmFsLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBzb2Z0X251bGxwb2ludGVyX25vZGUuCgkqIHBhcnNlLnkgKGludm9jYXRpb25fbW9kZSk6IFJldHVybiBJTlZPS0VfTk9OVklSVFVBTCBmb3IgYGZpbmFsJwoJb3IgYHByaXZhdGUnIG1ldGhvZHMuCgkocGF0Y2hfaW52b2tlKTogSGFuZGxlIElOVk9LRV9OT05WSVJUVUFMIGNhc2UuCgoyMDAwLTA0LTA1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJRml4IGZvciBQUiBnY2ovMTQwOgoJKiBwYXJzZS55IChjaGVja19maW5hbF9hc3NpZ25tZW50KTogUmVjb2duaXplIGFzc2lnbm1lbnRzIHRvIHRoZQoJYGxlbmd0aCcgZmllbGQgb2YgYW4gYXJyYXkgd2hlbiBnZW5lcmF0aW5nIGNsYXNzIGZpbGVzLgoKMjAwMC0wNC0wNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChkZWNsX2hhc2gpOiBQcm90b3R5cGUgcmVtb3ZlZC4KCShkZWNsX2NvbXBhcmUpOiBMaWtld2lzZS4KCjIwMDAtMDQtMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKFRISVNfTU9ESUZJRVJfT05MWSk6IENoYW5nZWQgbWVhbmluZyBvZiBgdicgcGFyYW1ldGVyLgoJKiBwYXJzZS55IChjaGVja19tb2RpZmllcnNfY29uc2lzdGVuY3kpOiBDaGVjayBmb3IgZmluYWwvdm9sYXRpbGUKCWNsYXNoLiAgRml4ZXMgUFIgZ2NqLzE2NC4KCjIwMDAtMDQtMDUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYzogKGphdmFfaGFzaF9oYXNoX3RyZWVfbm9kZSk6IFJlbmFtZWQgZnJvbSBgZGVjbF9oYXNoJywKCW1hZGUgZ2xvYmFsLgoJKGphdmFfaGFzaF9jb21wYXJlX3RyZWVfbm9kZSk6IFJlbmFtZWQgZnJvbSBgZGVjbF9jb21wYXJlLCBtYWRlCglnbG9iYWwuCgkoYWRkX21ldGhvZF8xKTogVXNlIGBqYXZhX2hhc2hfaGFzaF90cmVlX25vZGUnIGFuZAoJYGphdmFfaGFzaF9jb21wYXJlX3RyZWVfbm9kZScuCgkqIGphdmEtdHJlZS5oOiAoamF2YV9oYXNoX2hhc2hfdHJlZV9ub2RlKTogUHJvdG90eXBlZC4KCShqYXZhX2hhc2hfY29tcGFyZV90cmVlX25vZGUpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogQ3JlYXRlLAoJZGVsZXRlIGFuZCB1c2UgYSBoYXNoIHRhYmxlIHRvIHJlbWVtYmVyIGFscmVhZHkgc2VhcmNoZWQgaW50ZXJmYWNlcy4KCjIwMDAtMDQtMDMgIE1hdHQgV2Vsc2ggIDxtZHdAY3MuYmVya2VsZXkuZWR1PgoKCSogamNmLWRlcGVuZC5jIChhZGRfZW50cnkpOiBGaXhlZCBidWcgd2hlcmUgbGlzdCB3YXMgYWx3YXlzIHJlcGxhY2VkCgl3aXRoIGxhdGVzdCBlbnRyeS4KCjIwMDAtMDQtMDQgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGJvZWhtLmMgKG1hcmtfcmVmZXJlbmNlX2ZpZWxkcywgc2V0X2JpdCk6IFByb3RvdHlwZS4KCShzZXRfYml0KTogVW4tQU5TSS1meSBkZWZpbml0aW9uLgoKCSogY2xhc3MuYyAoaW5pdF90ZXN0X2hhc2hfbmV3ZnVuYywgZGVjbF9oYXNoLCBkZWNsX2NvbXBhcmUpOgoJUHJvdG90eXBlLgoKCSogZGVjbC5jIChlbWl0X2luaXRfdGVzdF9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoKCSogZ2phdmFoLmMgKGpuaV9wcmludF9jaGFyKTogTGlrZXdpc2UuCgoJKiBwYXJzZS55IChjcmVhdGVfbmV3X3BhcnNlcl9jb250ZXh0KTogTGlrZXdpc2UuCgpUaHUgTWFyIDMwIDE1OjI2OjU2IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBBZGRlZCBBbnRob255J3MgVGh1IEphbiA2IDIwMDAKCXBhdGNoIG1pc3NpbmcgaHVuay4gRml4ZWQgaW5kZW50YXRpb24uCgoyMDAwLTAzLTMwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoRF9OQU5fTUFTSyk6IE9ubHkgZGVmaW5lIGFzIHdvcmQtcmV2ZXJzZWQgd2hlbgoJSE9TVF9GTE9BVF9XT1JEU19CSUdfRU5ESUFOIGFuZCBIT1NUX1dPUkRTX0JJR19FTkRJQU4gZGlzYWdyZWUuCgoyMDAwLTAzLTI4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLXNjYW4ueSAocG9wX2NsYXNzX2NvbnRleHQpOiBSZXNldCBgaW5uZXJfcXVhbGlmaWVyX2xlbmd0aCcKCXdoZW4gbmVnYXRpdmUgKmJlZm9yZSogdXNpbmcgaXQgYXMgYW4gYXJyYXkgaW5kZXguCgkqIENoYW5nZUxvZzogRml4ZWQgdHlwby4KCjIwMDAtMDMtMjggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChwb3BfY2xhc3NfY29udGV4dCk6IFJlc2V0IGBpbm5lcl9xdWFsaWZpZXJfbGVuZ3RoJwoJdG8gMCB3aGVuIGl0IHJlYWNoZXMgLTEuCgoyMDAwLTAzLTI3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChnZXRfY29uc3RhbnQpOiBQcm9wZXJseSBjYXN0IGBudW0nIGR1cmluZyB0aGUKCWludm9jYXRpb24gb2YgYGFkZF9kb3VibGUnLgoJKiBqY2Ytd3JpdGUuYyAocHVzaF9sb25nX2NvbnN0KTogUHJvcGVybHkgY2FzdCBgbG8nIGJlZm9yZQoJY29tcGFyaW5nIGl0IHRvIHNob3J0IGJvdW5kcy4KCSogcGFyc2Utc2Nhbi55IChpbnRlcmZhY2VfZGVjbGFyYXRpb246KTogUnVsZSByZS1hcnJhbmdlIHNvIHRoYXQKCWBpbnRlcmZhY2VfYm9keTonIGlzIHJlZHVjZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIGlzCglwdXNoZWQuCgoyMDAwLTAzLTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYyAoanZnZW5tYWluX3NwZWMpOiBBZGQgYCV7PC4uLn0nIGNvbnN0cnVjdCBmb3IgZWFjaAoJSmF2YS1zcGVjaWZpYyBgLWYnIG9wdGlvbi4KClN1biBNYXIgMjYgMTE6Mzc6NTUgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IGNhbGwgaW5pdGlhbGl6ZV9zaXpldHlwZXMgb25jZS4KCUFkanVzdCBvcmRlciBvZiBtYWtpbmcgdHlwZXMuCglNYWtlIGJpdHNpemVfKl9ub2RlIHZhbHVlcy4KClNhdCBNYXIgMjUgMDk6MTI6MTAgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGNsYXNzLmMgKG1ha2VfZmllbGRfdmFsdWUpOiBVc2UgYnl0ZV9wb3NpdGlvbi4KCSogZXhwci5jIChKQVZBX0FSUkFZX0xFTkdUSF9PRkZTRVQpOiBVc2UgYnl0ZV9wb3NpdGlvbi4KCShqYXZhX2FycmF5X2RhdGFfb2Zmc2V0KTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChNQVlCRV9DUkVBVEVfVFlQRV9UWVBFX0xBTkdfU1BFQ0lGSUMpOiBBZGQgY2FzZSB0bwoJYnplcm8gY2FsbC4KCjIwMDAtMDMtMjIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogTmV3IGxvY2FsCglgZW5kX3R5cGVfcmVhY2hlZCcuIE1ha2Ugc3VyZSB3ZSBhbHNvIGNvbnNpZGVyIGBlbmRfdHlwZScuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBNYWtlIHN1cmUgd2UgZXZlbnR1YWxseQoJY29uc2lkZXIgYGphdmEubGFuZy5PYmplY3QnLgoJKG1heWJlX3VzZV9hY2Nlc3NfbWV0aG9kKTogRG9uJ3QgdXNlIGFjY2VzcyBtZXRob2QgaWYgbm90IGluIHRoZQoJY29udGV4dCBvZiBhIHB1cmUgaW5uZXIgY2xhc3Mgb3IgaWYgdGhlIG1ldGhvZCdzIGNvbnRleHQgaXMgcmlnaHQuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogTmV3IHN0YXRpYyBmbGFnCglgb2JqZWN0X2RvbmUnLiBEb24ndCBzZWFyY2ggYWJzdHJhY3QgY2xhc3NlcyBhcyBpbnRlcmZhY2VzLiBGaXhlZAoJaW5kZW50YXRpb24uIEZpeGVkIHRoZSBgamF2YS5sYW5nLk9iamVjdCcgb25seSBzZWFyY2guIFNlYXJjaAoJY2xhc3MgaW50ZXJmYWNlKHMpIGZpcnN0LCB0aGVuIGZ1bGx5IHNlYXJjaCBlbmNsb3NpbmcgY29udGV4dHMuCgkoZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCk6IFBpY2sgdGhlIGNsb3Nlc3QgY2FuZGlkYXRlIHdoZW4KCXRoZXkncmUgYWxsIGFic3RyYWN0LgoKTW9uIE1hciAyMCAwODo1ODo1MSAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IFRSWV9GSU5BTExZX0VYUFI6Cglwcm9wZXJseSBpbml0aWFsaXplIGBmaW5pc2hlZF9sYWJlbCcuIERvbid0IGVtaXQgZ290b3MgZm9yIGVtcHR5Cgl0cnkgc3RhdGVtZW50cy4KCjIwMDAtMDMtMTkgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGV4Y2VwdC5jIChlbWl0X2hhbmRsZXJzKTogQ2xlYXIgY2F0Y2hfY2xhdXNlc19sYXN0LgoKMjAwMC0wMy0xNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19tZXRob2RfdHlwZXNfY29tcGxldGUpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX2NsYXNzKTogUmVzZXQgYW5vbnltb3VzIGNsYXNzIGNvdW50ZXIgb25seSB3aGVuIHNlZWluZyBhbgoJbm9uIGlubmVyIGNsYXNzZS4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogSkRFUF9NRVRIT0Q6IERvbid0IHJlY29tcHV0ZSBzaWduYXR1cmUKCWlmIGluY29tcGxldGUuCgoyMDAwLTAzLTE3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3N0YXRpY19yZWYpOiBGaXhlZCBpbmRlbnRhdGlvbiBpbiBjb21tZW50LgoJKiBqYXZhLXRyZWUuZGVmIChUUllfRVhQUik6IEZpeGVkIHR5cG8gaW4gbmFtZS4KCShDTEFTU19MSVRFUkFMKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oOiAoVFlQRV9ET1RfQ0xBU1MpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBmaWVsZCBgZG90X2NsYXNzJy4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogRml4ZWQgZXJyb3IgbWVzc2FnZS4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBNZXRob2QgYGNsYXNzJCcgaXMgc3ludGhldGljLgoJKiBwYXJzZS55IChidWlsZF9kb19jbGFzc19tZXRob2QpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfZG90X2NsYXNzX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IEV4cGFuZCBUWVBFX0RPVF9DTEFTUyBpZiBuZWNlc3NhcnkuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIENMQVNTX0xJVEVSQUwuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoJKHBhdGNoX2luY29tcGxldGVfY2xhc3NfcmVmKTogSW52b2tlIHN5bnRoZXRpYyBtZXRob2QgaWYgbmVjZXNzYXJ5LgoJKGJ1aWxkX3RyeV9zdGF0ZW1lbnQpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuCgpGcmkgTWFyIDE3IDA4OjA5OjE0IDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBjbGFzcy5jIChtYWtlX2ZpZWxkX3ZhbHVlKTogUHJvcGVybHkgaGFuZGxlIHNpemVzLgoJKGdldF9kaXNwYXRjaF92ZWN0b3IpOiBVc2UgdHJlZV9sb3dfY3N0IGFuZCBob3N0X2ludGVnZXJwLgoJKGxheW91dF9jbGFzc19tZXRob2QpOiBDb3VudCB1c2luZyB0cmVlcy4KCSogZGVjbC5jIChwdXNoX3Byb21vdGVkX3R5cGUpOiBTZXQgVFlQRV97TUlOLE1BWH1fVkFMVUUgd2l0aCBjb3B5X25vZGUuCgkqIGV4cHIuYyAoamF2YV9hcnJheV9kYXRhX29mZnNldCk6IFVzZSBpbnRfYml0X3Bvc2l0aW9uLgoJKGJ1aWxkX25ld2FycmF5LCBidWlsZF9hbmV3YXJyYXkpOiBVc2UgaG9zdF9pbnRlZ2VycCBhbmQgdHJlZV9sb3dfY3N0LgoJKGJ1aWxkX2ludm9rZXZpcnR1YWwpOiBVc2UgdHJlZV9sb3dfY3N0IGFuZCBkbyBjb21wdXRhdGlvbnMgd2l0aCB0cmVlcy4KCjIwMDAtMDMtMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAoZmxhZ19oYXNoX3N5bmNocm9uaXphdGlvbik6IE5ldyBnbG9iYWwuCgkobGFuZ19mX29wdGlvbnMpOiBBZGRlZCBgaGFzaC1zeW5jaHJvbml6YXRpb24nLgoJKiBsYW5nLW9wdGlvbnMuaDogTWVudGlvbiAtZmhhc2gtc3luY2hyb25pemF0aW9uLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19oYXNoX3N5bmNocm9uaXphdGlvbik6IERlY2xhcmUuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogT25seSBwdXNoIGBzeW5jX2luZm8nIHZhbHVlIHdoZW4KCWhhc2ggdGFibGUgc3luY2hyb25pemF0aW9uIGlzIGRpc2FibGVkLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogT25seSBwdXNoIGBzeW5jX2luZm8nIHZhbHVlIHdoZW4KCWhhc2ggdGFibGUgc3luY2hyb25pemF0aW9uIGlzIGRpc2FibGVkLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBPbmx5IHB1c2ggYHN5bmNfaW5mbycgZmllbGQgd2hlbiBoYXNoCgl0YWJsZSBzeW5jaHJvbml6YXRpb24gaXMgZGlzYWJsZWQuICBSZW1vdmVkIGRlYWQgY29kZS4KCjIwMDAtMDMtMTYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogRW5hYmxlIC1XdW51c2VkIHdoZW4gLVdhbGwgZ2l2ZW4uCgoyMDAwLTAzLTE1ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKElOTkVSX0VOQ0xPU0lOR19TQ09QRV9DSEVDSyk6IERpc3JlZ2FyZCBhbm9ueW1vdXMKCWNsYXNzZXMuCgkqIHBhcnNlLnkgKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogSGFuZGxlIGFub255bW91cyBjbGFzc2VzCgljcmVhdGlvbiBpbiBzdGF0aWMgY29udGV4dC4KCjIwMDAtMDMtMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoSU5ORVJfRU5DTE9TSU5HX1NDT1BFX0NIRUNLKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBVc2UgaXQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBMaWtld2lzZS4KCjIwMDAtMDMtMTUgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVnaXN0ZXJfaW5jb21wbGV0ZV90eXBlKTogSkRFUF9FTkNMT1NJTkcgc2V0CglkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3aGljaCBkaWN0YXRlcyB3aGF0IHRoZQoJY3VycmVudCBjbGFzcyBpcy4KCSh1bnJlc29sdmVkX3R5cGVfcCk6IFJlc29sdmVkIHR5cGVzIGxpbWl0ZWQgdG8gdGhlIGN1cnJlbnQgY2xhc3MuCgoyMDAwLTAzLTE1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHR5cGUgb2YgYHN5bmNfaW5mbycgdG8gYmUKCXBvaW50ZXIgdG8gT2JqZWN0LgoKCSogYm9laG0uYyAoZ2V0X2JvZWhtX3R5cGVfZGVzY3JpcHRvcik6IENvcnJlY3RseSBjb21wdXRlIGBiaXRzJy4KCUNvcnJlY3RseSBjb21wdXRlIGJpdCBudW1iZXIgZm9yIGN1cnJlbnQgc2xvdC4gIFplcm8gYGhpZ2gnIGFuZAoJYGxvdycgaW4gRFNfTEVOR1RIIGNhc2UuICBEb24ndCBza2lwIGluaGVyaXRlZCBmaWVsZHMuICBVc2UKCW1hcmtfcmVmZXJlbmNlX2ZpZWxkcy4KCShtYXJrX3JlZmVyZW5jZV9maWVsZHMpOiBOZXcgZnVuY3Rpb24uCgpUdWUgTWFyIDE0IDE3OjE1OjQxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVnaXN0ZXJfaW5jb21wbGV0ZV90eXBlKTogRml4ZWQgaW5pdGlhbGl6YXRpb24gb2YKCUpERVBfRU5DTE9TSU5HLgoKMjAwMC0wMi0yOCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKGlubmVyX3F1YWxpZmllciwgaW5uZXJfcXVhbGlmaWVyX2xlbmd0aCk6IE5ldwoJc3RhdGljIGdsb2JhbHMuCgkocHVzaF9jbGFzc19jb250ZXh0LCBwb3BfY2xhc3NfY29udGV4dCk6IE5ldyBmdW5jdGlvbi4KCShjbGFzc19ib2R5Oik6IENhbGwgcG9wX2NsYXNzX2NvbnRleHQuCgkoaW50ZXJmYWNlX2JvZHk6KTogTGlrZXdpc2UuCgkoSU5ORVJfUVVBTElGSUVSKTogTmV3IG1hY3JvLgoJKHJlcG9ydF9jbGFzc19kZWNsYXJhdGlvbik6IENoYW5nZWQgb3V0cHV0IGZvcm1hdCBhbmQgdXNlCglJTk5FUl9RVUFMSUZJRVIuIENhbGwgcHVzaF9jbGFzc19jb250ZXh0LgoKMjAwMC0wMi0xNCAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBBZGQgbmV3IGNhc2VzIGZvciB1bmFyeSBhbmQgYmluYXJ5Cgl0cmVlIG5vZGVzLgoKMjAwMC0wMy0xMyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3BhY2thZ2UpOiBTZXQgYG5leHQnIG9uY2UgYSB0eXBlIG5hbWUgaGFzIGJlZW4KCXByb2dyZXNzaXZlbHkgZGlzY292ZXJlZC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQcm9wYWdhdGUgcmVzb2x1dGlvbiBvbmx5IGlmCgl0aGVyZSBhcmUgcmVtYWluaW5nIHF1YWxpZmllcnMuIFRha2UgaW50byBhY2NvdW50IGBxJyBtaWdodCBoYXZlCgliZWVuIGNsZWFyZWQgYWZ0ZXIgcmUtcXVhbGlmaWNhdGlvbi4KCSogcGFyc2UueSAocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBOZXcgbG9jYWwgYHJlc29sdmVkJy4KICAJU2VjdGlvbiBkZWFsaW5nIHdpdGggcXVhbGlmaWVkIGV4cHJlc3Npb24gcmV3cml0dGVuIHRvIHVzZQogCXJlc29sdmVfZmllbGRfYWNjZXNzLgoKTW9uIE1hciAxMyAxMjoyMToxMyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKFBVU0hfQ1BDKTogRml4ZWQgaW5kZW50YXRpb24uCgkoREVCVUdfQ1BDKTogTmV3IG1hY3JvLgoJKFNFVF9DUENfSU5JVElBTElaRVJfU1RNVCwgU0VUX0NQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVCwKIAlTRVRfQ1BDX0lOU1RBTkNFX0lOSVRJQUxJWkVSX1NUTVQpOiBOZXcgbWFjcm9zLgoJKiBwYXJzZS55IChjbGFzc19ib2R5X2RlY2xhcmF0aW9uOik6IFVzZQogCVNFVF9DUENfSU5TVEFOQ0VfSU5JVElBTElaRVJfU1RNVC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogQ2hlY2sgZm9yIG51bGwgY3VycmVudF9mdW5jdGlvbl9kZWNsLgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBVc2UgU0VUX0NQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVC4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3BvcF9pbml0aWFsaXplZF9maWVsZCk6IEJldHRlciBoYW5kbGluZyBvZgogCWVtcHR5IGxpc3RzLgoJKG1heWJlX21ha2VfbmVzdGVkX2NsYXNzX25hbWUpOiBNYXJrIG5lc3RlZCBjbGFzcyBuYW1lIGFzCiAJcXVhbGlmaWVkIHdoZW4gbmVjZXNzYXJ5LgoJKGVuZF9jbGFzc19kZWNsYXJhdGlvbik6IERvbid0IGNhbGwgamF2YV9wYXJzZV9jb250ZXh0X3Jlc3VtZSB3aGVuCiAJb25lIG9yIG1vcmUgZXJyb3Igb2NjdXJlZC4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogVXNlIFNFVF9DUENfSU5JVElBTElaRVJfU1RNVC4KCShyZWdpc3Rlcl9maWVsZHMpOiBVc2UgU0VUX0NQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVCBhbmQKIAlTRVRfQ1BDX0lOSVRJQUxJWkVSX1NUTVQuCgkobWV0aG9kX2hlYWRlcik6IENoZWNrIGZvciBpbm5lciBjbGFzc2VzIGRlY2xhcmluZyBzdGF0aWMgbWV0aG9kcy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgc2l0dWF0aW9uIHdoZXJlIGB0aGlzJwogCWlzIGltcGxpZWQuCgpNb24gTWFyIDEzIDExOjM2OjUxIDIwMDAgIEhhbnMgQm9laG0gPGJvZWhtQGFjbS5vcmc+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHJpbV9hcnJheV90eXBlKTogQ29ycmVjdGx5IHNldCB0aGUgaGlnaCB3b3JkIHRvby4KCjIwMDAtMDMtMDkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IExlYXZlIDxjbGluaXQ+IG91dCBvZgoJb3JkaW5hcnkgbWV0aG9kcy4KCShtYXliZV9nZW5lcmF0ZV9wcmVfZXhwYW5kX2NsaW5pdCk6IFB1dCA8Y2xpbml0PiBhdCB0aGUgZW5kIG9mIHRoZQoJbGlzdCBvZiBtZXRob2RzIGZvciBpbnRlcmZhY2VzLgoKMjAwMC0wMy0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogUHJvcGVybHkgaGFuZGxlIGV4cHJlc3Npb25zCgl1c2luZyBgbnVsbCcuCgoyMDAwLTAzLTA3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQpOiBFeHRlbmRlZCB0byBwcm9jZXNzCglDT01QT1VORF9FWFBSLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBIYXZlIGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQgY2FsbGVkIG9ubHkgb25jZS4KCjIwMDAtMDMtMDcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKElTX0lOSVRfQ0hFQ0tFRCk6IE5ldyBmbGFnLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiBUZXN0IGFuZCBzZXQgSVNfSU5JVF9DSEVDS0VELgoJKiBwYXJzZS55IChwYXRjaF9zdHJpbmcpOiBDYWxsIGZvcmNlX2V2YWx1YXRpb25fb3JkZXIgb24gdGhlCgljb21wbGV0ZWQgc3RyaW5nIGNvbmNhdGVuYXRpb24gdHJlZS4KCSogZXhwci5jIChmb3JjZV9ldmFsdWF0aW9uX29yZGVyKTogQ2FsbCBmb3JjZV9ldmFsdWF0aW9uX29yZGVyIG9uCglmdW5jdGlvbidzIGFyZ3VtZW50cyB0b28uCgpNb24gTWFyICA2IDE4OjA3OjA3IDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBkZWNsLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTWFyayBLRVkgYXMgdW51c2VkLgoJKiBleHByLmMgKGJ1aWxkX25ld2FycmF5KTogQ2FzdCBUUkVFX0lOVF9DU1RfTE9XIHRvIEhPU1RfV0lERV9JTlQuCgkoYnVpbGRfYW5ld2FycmF5KTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHBhdGNoX25ld2FycmF5KTogTGlrZXdpc2UuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoKMjAwMC0wMy0wNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkZWQgbmV3IGNsYXNzIGZpZWxkcyBgZGVwdGgnLAoJYGFuY2VzdG9ycycsIGFuZCBgaWR0JyB0byBjbGFzc190eXBlX25vZGUuIFVzZQoJX0p2X0xvb2t1cEludGVyZmFjZU1ldGhvZElkeCBmb3Igc29mdF9sb29rdXBpbnRlcmZhY2VtdGhvZF9ub2RlLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBQdXNoIGluaXRpYWwgdmFsdWVzIGZvciBuZXcgZmllbGRzLgoJKiBqYXZhLXRyZWUuaDogVXBkYXRlZCBwcm90b3R5cGUgZm9yIGBidWlsZF9pbnZva2VpbnRlcmZhY2UnLgoJKiBleHByLmMgKGJ1aWxkX2ludm9rZWludGVyZmFjZSk6IENoYW5nZWQgcGFyYW1ldGVycyB0byBhY2NlcHQKCWBtZXRob2QnIHRyZWUuIENhbGN1bGF0ZSBpbmRleCBvZiBgbWV0aG9kJyBpbiBpdHMgZGVjbGFyaW5nCglpbnRlcmZhY2UuIEJ1aWxkIGNhbGwgdG8gX0p2X0xvb2t1cEludGVyZmFjZU1ldGhvZElkeC4KCShleHBhbmRfaW52b2tlKTogQ2FsbCBgYnVpbGRfaW52b2tlaW50ZXJmYWNlJyB3aXRoIG5ldyBwYXJhbWV0ZXJzLgoJKiBwYXJzZS55IChwYXRjaF9pbnZva2UpOiBDYWxsIGBidWlsZF9pbnZva2VpbnRlcmZhY2UnIHdpdGggbmV3CglwYXJhbWV0ZXJzLgoKMjAwMC0wMy0wNiAgQnJ5Y2UgTWNLaW5sYXkgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KCgkqIHR5cGVjay5jIChsb29rdXBfZG8pOiBTZWFyY2ggc3VwZXJpbnRlcmZhY2VzIGZpcnN0Cgl3aGVuIGxvb2tpbmcgdXAgYW4gaW50ZXJmYWNlIG1ldGhvZC4gRnJvbSBHb2RtYXIgQmFjawoJPGdiYWNrQGNzLnV0YWguZWR1PgoKMjAwMC0wMy0wNiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChKQVZBX1NSQ1MpOiBBZGRlZCBib2VobS5jLCBsZXguYy4KCjIwMDAtMDMtMDIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGxvb2t1cF9hcmd1bWVudF9tZXRob2QyKTogRGVjbGFyZWQuCgkoc2FmZV9sYXlvdXRfY2xhc3MpOiBQcm90b3R5cGUgbW92ZWQgZnJvbSBwYXJzZS5oLgoJKiBwYXJzZS5oIChzYWZlX2xheW91dF9jbGFzcyk6IFByb3RvdHlwZSBtb3ZlZCB0byBqYXZhLXRyZWUuaC4KCSogcGFyc2UueSAoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBMb2NhbCBgc3VwZXJfY2xhc3MnIGdvbmUuCglDYWxsIGxvb2t1cF9hcmd1bWVudF9tZXRob2QyIGluc3RlYWQgb2YgbG9va3VwX2FyZ3VtZW50X21ldGhvZC4KCVBlcmZvcm0gbW9kaWZpZXIgbWF0Y2ggZm9yIG1ldGhvZHMgZm91bmQgZGVjbGFyZWQgaW4gaW1wbGVtZW50ZWQKCWludGVyZmFjZXMuIEZpeGVkIGluZGVudGF0aW9uIHByb2JsZW0uIE92ZXJyaWRpbmcvaGlkaW5nIGVycm9yCglyZXBvcnQgdG8gdGFrZSBwbGFjZSBvbmx5IGZvciBtZXRob2RzIGZvdW5kIGluIGNsYXNzZXMuCgkqIHR5cGVjay5jIChsb29rdXBfYXJndW1lbnRfbWV0aG9kKTogQ2hhbmdlZCBsZWFkaW5nCgljb21tZW50LiBSZS13cml0dGVuIGJ5IGNhbGxpbmcgbG9va3VwX2RvLgoJKGxvb2t1cF9hcmd1bWVudF9tZXRob2QyKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF9qYXZhX21ldGhvZCk6IFJlLXdyaXR0ZW4gYnkgY2FsbGluZyBsb29rdXBfZG8uCgkobG9va3VwX2RvKTogTmV3IGZ1bmN0aW9uLgoKVGh1IE1hciAgMiAxNToxODozMyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IFJlbW92ZWQgZGVhZCBjb2RlLiBIYW5kbGUgKGJsYW5rKQogCWZpbmFsIHZhcmlhYmxlcy4KCSogcGFyc2UueSAoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBOZXcgbG9jYWwgYGZpbmFsX3AnLCBzZXQgaXQKIAlhbmQgdXNlIGl0IHRvIGluaXRpYWxpemUgTE9DQUxfRklOQUwuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6IE9ubHkgY2hlY2sgRklFTERfREVDTHMuCgoyMDAwLTAyLTE3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgYm9laG0uby4KCShib2VobS5vKTogTmV3IHRhcmdldC4KCSogTWFrZS1sYW5nLmluIChKQVZBX1NSQ1MpOiBBZGRlZCBib2VobS5jLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ191c2VfYm9laG1fZ2MpOiBEZWNsYXJlLgoJKGdldF9ib2VobV90eXBlX2Rlc2NyaXB0b3IpOiBEZWNsYXJlLgoJKiBsYW5nLmMgKGxhbmdfZl9vcHRpb25zKTogQWRkZWQgYHVzZS1ib2VobS1nYycuCgkoZmxhZ191c2VfYm9laG1fZ2MpOiBOZXcgZ2xvYmFsLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkZWQgLWZ1c2UtYm9laG0tZ2MuCgkqIGJvZWhtLmM6IE5ldyBmaWxlLgoJKiBjbGFzcy5jIChnZXRfZGlzcGF0Y2hfdGFibGUpOiBJZiBjbGFzcyB1c2VzIGEgQm9laG0gdHlwZQoJZGVzY3JpcHRvciwgcHV0IGl0IGluIHRoZSB2dGFibGUuCgkobWFrZV9jbGFzc19kYXRhKTogUmVtb3ZlZCBkZWFkIGNvZGUuCgoyMDAwLTAzLTAzICBQZXIgQm90aG5lciAgPHBlckBib3RobmVyLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgSW5pdGlhbGl6ZSBzaXpldHlwZSBwcm9wZXJseS4KCjIwMDAtMDMtMDEgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKExPQ0FMX0NMQVNTX1ApOiBOZXcgZmxhZyB1c2FnZSBhbmQgbWFjcm8uCgkoUFVSRV9JTk5FUl9DTEFTU19ERUNMX1AsIFBVUkVfSU5ORVJfQ0xBU1NfVFlQRV9QKTogTmV3IG1hY3Jvcy4KCSogamNmLWR1bXAuYyAoSEFORExFX0lOTkVSQ0xBU1NFU19BVFRSSUJVVEUpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChIQU5ETEVfSU5ORVJDTEFTU0VTX0FUVFJJQlVURSk6IExpa2V3aXNlLgoJKGpjZl9wYXJzZSk6IE5ldyBsb2NhbCBgY3VycmVudCcuIExvYWQgaW5uZXJjbGFzc2VzIHNlZW4gaW4gb3V0ZXIKCWNvbnRleHQgYmVpbmcgcHJvY2Vzc2VkLgoJKiBqY2YtcmVhZGVyLmMgKEhBTkRMRV9JTk5FUkNMQVNTRVNfQVRUUklCVVRFKTogTmV3IG1hY3JvLgoJKiBqY2Ytd3JpdGUuYyAoYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGVfZW50cnkpOiBMaWtld2lzZS4KCShnZXRfYWNjZXNzX2ZsYWdzKTogSGFuZGxlIHN0YXRpYyBjbGFzc2VzLiBTZXQgYW5vbnltb3VzIGFuZCBsb2NhbAoJY2xhc3NlcyB0byBiZSBwcml2YXRlLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IEF0dHJpYnV0ZSBjb3VudCBhZGp1c3RlZC4gQ2FsbAoJYXBwZW5kX2lubmVyY2xhc3Nlc19hdHRyaWJ1dGUuCgkqIHBhcnNlLmggKFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUyk6IFVzZQoJUFVSRV9JTk5FUl9DTEFTU19UWVBFX1AuCgkqIHBhcnNlLnkgKHBhcnNlcl9xdWFsaWZpZWRfY2xhc3NuYW1lKTogTmV3IHBhcmFtZXRlciBgaXNfc3RhdGljJywKCXByb2R1Y2Ugbm9uIHF1YWxpZmllZCBuYW1lIGFjY29yZGluZ2x5LgoJKGJsb2NrX3N0YXRlbWVudDopOiBTZXQgTE9DQUxfQ0xBU1NfUCB3aGVuIGRlY2xhcmluZyBsb2NhbCBjbGFzcy4KCShjcmVhdGVfaW50ZXJmYWNlKTogQWRkZWQgYXJndW1lbnQgdG8gcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuCgkoY3JlYXRlX2NsYXNzKTogQWRkZWQgYXJndW1lbnQgdG8gcGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUuIFNldHVwCglhbGlhcyBmb3IgdG9wIGxldmVsIGNsYXNzZXMuIFVzZSBQVVJFX0lOTkVSX0NMQVNTX0RFQ1BfUC4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogRml4ZWQgaW5kZW50YXRpb24uCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBVc2UgUFVSRV9JTk5FUl9DTEFTU19ERUNQX1AuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkoY3JhZnRfY29uc3RydWN0b3IpOiBVc2UgUFVSRV9JTk5FUl9DTEFTU19ERUNQX1AuCgkoYnVpbGRfY3VycmVudF90aGlzbik6IExpa2V3aXNlLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgoyMDAwLTAzLTAxICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTogTW92ZSB0byB0b3BsZXYuYy4KCk1vbiBGZWIgMjggMDg6MjA6NDIgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGphdmEtdHJlZS5oIChMQUJFTF9QQyk6IFJlbGVjdCBuYW1lIGNoYW5nZXMgaW4gLi4vdHJlZS5oLgoJKERFQ0xfQklUX0lOREVYKTogVXNlIHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24uCgkqIHBhcnNlLmggKERFQ0xfSU5IRVJJVEVEX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCgpTdW4gRmViIDI3IDE2OjQwOjMzIDIwMDAgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfcmV0KTogUGFzcyBwcm9wZXIgdHlwZSB0byBzaXplX2Jpbm9wLgoKMjAwMC0wMi0yNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2NsYXNzX2luaXQpOiBNYXJrIHRoZSBkZWNsIHRvIGJlIGlnbm9yZWQgYnkKCWNoZWNrX2luaXQuCgkqIGphdmEtdHJlZS5oIChERUNMX0JJVF9JTkRFWCk6IE1vdmUgZGVmaW5pdGlvbiBmcm9tIGNoZWNrLWluaXQuYwoJKiBjaGVjay1pbml0LmM6IE1vdmUgREVDTF9CSVRfSU5ERVggdG8gamF2YS10cmVlLmgKCSogY2xhc3MuYyAoaW5pdF90ZXN0X2hhc2hfbmV3ZnVuYyk6IE5ldyBmdW5jdGlvbi4KCShkZWNsX2hhc2gpOiBOZXcgZnVuY3Rpb24uCgkoZGVjbF9jb21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogVHJhdmVyc2UgdGhlIGluaXQgdGVzdCBoYXNodGFibGUsCgljYWxsaW5nIGVtaXRfaW5pdF90ZXN0X2luaXRpYWxpemF0aW9uLgoJKGFsd2F5c19pbml0aWFsaXplX2NsYXNzX3ApOiBEZWZpbmUuCgkqIGV4cHIuYyAoYnVpbGRfY2xhc3NfaW5pdCk6IFVzZSBpbml0aWFsaXphdGlvbiB0ZXN0cyB3aGVuCgllbWl0dGluZyBjbGFzcyBpbml0aWFsaXphdGlvbiBjb2RlLgoJKGFsd2F5c19pbml0aWFsaXplX2NsYXNzX3ApOiBEZWNsYXJlLgoJKiBqY2YtcGFyc2UuYyAocGFyc2VfY2xhc3NfZmlsZSk6IFNldCBhbHdheXNfaW5pdGlhbGl6ZV9jbGFzc19wIHRvCgkxLgoJKiBqYXZhLXRyZWUuaDogSW5jbHVkZSBoYXNoLmguCgkoREVDTF9GVU5DVElPTl9JTklUX1RFU1RfVEFCTEUpOiBEZWZpbmUuCgkoc3RydWN0IGxhbmdfZGVjbCk6IEFkZCBpbml0X3Rlc3RfdGFibGUgZmllbGQuCgkoaW5pdF90ZXN0X2hhc2hfZW50cnkpOiBEZWZpbmUuCgpGcmkgRmViIDI1IDE4OjQxOjMxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKG1haW4pOiBBdm9pZCB1c2luZyBgYXJnaScgdG8gcmVwb3J0IHVuaW1wbGVtZW50ZWQKCW9wdGlvbnMuCgpGcmkgRmViIDI1IDE4OjQ3OjI1IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVFJZX0ZJTkFMTFlfRVhQUjoKIAlpbml0aWFsaXplIGxvY2FscyB0byBhdm9pZCB3YXJuaW5ncy4gTG9jYWwgYGV4Y2VwdGlvbl90eXBlJyBtb3ZlZAoJaW50byBpZiBzdGF0ZW1lbnQuCgpGcmkgRmViIDI1IDE4OjAwOjM3IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBVc2UgYG9yaWcnIGFzIGEgc2Vjb25kCiAJYXJndW1lbnQgdG8gcmVzb2x2ZV9maWVsZF9hY2Nlc3MuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBSZW1vdmVkIHVuZWNlc3NhcnkgY29kZSB3aGVuIGRlYWxpbmcgd2l0aAogCXN0YXRpYyBmaWVsZHMuCgpXZWQgRmViIDIzIDE3OjQxOjUwIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAocHVzaF9zdXBlcl9maWVsZCk6IERvbid0IHB1c2ggdGhlIGZpZWxkIHR3aWNlLgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiBDYWxsIGphdmFfcmVvcmRlcl9maWVsZHMuCgkqIHBhcnNlLmggKGphdmFfcmVvcmRlcl9maWVsZHMpOiBQcm90b3R5cGVkLgoJKiBwYXJzZS55IChqYXZhX3Jlb3JkZXJfZmllbGRzKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfbGF5b3V0X2NsYXNzKTogU2ltcGxpZmllZCBub3QgdG8gd29ycnkgYWJvdXQgcmUtb3JkZXJpbmcuCgoyMDAwLTAyLTIzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAocHJpbnRfbmFtZSk6IEluIEpOSSBjYXNlLCBjb3JyZWN0bHkgcXVvdGUgc3RyaW5nLgoJKHByaW50X21ldGhvZF9pbmZvKTogRG9uJ3QgaGFuZGxlIG92ZXJyaWRlcyBpbiBKTkkgbW9kZS4KCjIwMDAtMDItMjIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBgX0p2X0lzSW5zdGFuY2VPZicgcmV0dXJuZWQKCXZhbHVlIHR5cGUgc2V0IHRvIGBib29sZWFuX3R5cGVfbm9kZScuCgpNb24gSmFuIDE4IDE0OjMwOjA5IDIwMDAgIEpvZXJnIEJydW5zbWFubiAgPGpvZXJnLmJydW5zbWFubkBmZXJudW5pLWhhZ2VuLmRlPgoKCSogamNmLWR1bXAuYyAobWFpbik6IFRlc3QgZm9yIGNvcnJlY3QgY29uZGl0aW9uIGFmdGVyCglvdXRwdXQgZmlsZSBjcmVhdGlvbi4KCjIwMDAtMDItMTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogamNmLWRlcGVuZC5jIChhZGRfZW50cnkpOiBGaXggdGVzdCBmb3IgZmlyc3QgbGlzdCBlbnRyeS4KClNhdCBGZWIgMTkgMTg6NDM6MTMgMjAwMCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZiwgcHVzaF9zdXBlcl9maWVsZCk6IFNldCBERUNMX1NJWkVfVU5JVC4KCSogY29uc3RhbnRzLmMgKGJ1aWxkX2NvbnN0YW50c19jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoKMjAwMC0wMi0xOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBqY2YtZGVwZW5kLmMgKGFkZF9lbnRyeSk6IEFkZCBlbnRyaWVzIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCgpXZWQgTm92IDAzIDAyOjE2OjAwIFBTVCAxOTk5ICBQZWtrYSBOaWthbmRlciAgPHBla2thLm5pa2FuZGVyQGh1dC5maT4KCgkqIGRlY2wuYyAoSU5UX1RZUEVfU0laRSk6IERlZmluZSBpZiBuZWNlc3NhcnkuCgkoZXhwYW5kX2phdmFfcmV0dXJuKTogSGFuZGxlIHRoZSBjYXNlIG9mIGEgbmF0aXZlIGludGVnZXIgc21hbGxlcgogCXRoYW4gYSBKVk0gaW50ZWdlci4KCjIwMDAtMDItMTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ2phdmFoLmMgKGhlbHApOiBVc2UgR0NDQlVHVVJMLgoJKiBqdi1zY2FuLmMgKGhlbHApOiBMaWtld2lzZS4KCSogamNmLWR1bXAuYyAoaGVscCk6IExpa2V3aXNlLgoKVGh1IEZlYiAxNyAxNDozMDozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6IERvbid0IGdlbmVyYXRlIGVtcHR5CiAJYGZpbmFsbHknIGNsYXVzZXMuCgpUaHUgRmViIDE3IDEzOjIwOjU4IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGxvYWRfY2xhc3MpOiBDYWxsIGBmYXRhbCcgaWYgbm8gZmlsZSBjb250YWluaW5nCgl0aGUgdGFyZ2V0IGNsYXNzIGFyZSBmb3VuZC4KCjIwMDAtMDItMTYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHdvbGVyeS5jdW1iLm9yZz4KCgkqIE1ha2VmaWxlLmluIChQQVJTRV9DLCBQQVJTRV9TQ0FOX0MpOiBNb3ZlIGRlcGVuZGVuY2llcyBvbgoJbGV4LmMsIGxleC5oLCBhbmQgUEFSU0VfSCB0by4uLgoJKHBhcnNlLm8sIHBhcnNlLXNjYW4ubyk6IC4uLmhlcmUsIHJlc3BlY3RpdmVseS4KCgkqIGxleC5jOiBTcGxpdCBvdXQgY29kZSB0aGF0IG1heSB0cmlnZ2VyIFNJR0ZQRSBmcm9tIHl5bGV4KCkKCXRvIGl0cyBvd24gZnVuY3Rpb24uCgkqIGxleC5oIChKQVZBX0ZMT0FUX1JBTkdFX0VSUk9SKTogRG9uJ3Qgc2V0IHZhbHVlLgoKMjAwMC0wMi0xNiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IERlcGVuZCBvbiAkKEdDQ19IKSwgbm90IGdjYy5oLgoKMjAwMC0wMi0xNSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChvdXRlcl9maWVsZF9hY2Nlc3NfcCk6IFN0b3AgaW4gdGltZSB3aGVuIG91dGVyIGNvbnRleHRzCiAJYXJlIGV4aGF1c3RlZC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQcm9wZXJseSBxdWFsaWZ5ICpldmVyeXRoaW5nKgogCWFmdGVyIGEgcGFja2FnZS50eXBlIHRvIGJlIHJlc29sZWQgYXMgZXhwcmVzc2lvbiBuYW1lcy4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiBTYXZlL3Jlc3RvcmUgYGNsYXNzJyB0bwogCWlzb2xhdGUgaXQgZnJvbSBhIHBvc3NpYmxlIG91dGVyIGNvbnRleHQgc2VhcmNoLgoKMjAwMC0wMi0xNSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGpuaV9wcmludF9jaGFyKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2Z1bGxfY3h4X25hbWUpOiBVc2UgaXQuCgkoZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IExpa2V3aXNlLgoJKHByaW50X2N4eF9jbGFzc25hbWUpOiBMaWtld2lzZS4KCjIwMDAtMDItMTUgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChqdi1zY2FuLCBqY2YtZHVtcCwgZ2NqaCk6IERlcGVuZCBvbiBhbmQgbGluayB3aXRoCgl2ZXJzaW9uLm8uCgkoamNmLWR1bXAubywgZ2phdmFoLm8sIGp2LXNjYW4ubyk6IERlcGVuZCBvbiB2ZXJzaW9uLmguCgoJKiBnamF2YWguYzogSW5jbHVkZSB2ZXJzaW9uLmguCgoJKiBqY2YtZHVtcC5jOiBMaWtld2lzZS4KCgkqIGp2LXNjYW4uYzogTGlrZXdpc2UuCgpTYXQgRmViIDEyIDA0OjM0OjA0IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAob3V0ZXJfZmllbGRfYWNjZXNzX2ZpeCk6IEZpcnN0IHBhcmFtZXRlciBub3cgYSB0cmVlCglub2RlLiBDaGVjayBmb3IgYXNzaWduZW1lbnQgdG8gZmluYWwuIEZpcnN0IGFyZ3VtZW50IHRvCglidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfZml4IG1vZGlmaWVkIHRvIGFjY29tb2RhdGUgcHJvdG90eXBlLgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IERvbid0IGNoZWNrIGZvciBhc3NpZ25tZW50IHRvIGZpbmFsCgloZXJlLgoJKGphdmFfY29tcGxldGVfbGhzKTogTU9ESUZZX0VYUFIgY2FzZTogQ2hlY2sgZm9yIGBlcnJvcl9tYXJrX25vZGUnCglwb3NzaWJseSByZXR1cm5lZCBieSBvdXRlcl9maWVsZF9hY2Nlc3NfZml4LiBDaGFuZ2VkCglvdXRlcl9maWVsZF9hY2Nlc3NfZml4J3MgZmlyc3QgYXJndW1lbnQuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6ICRmaW5pdCQncyBjb250ZXh0IGlzIE9LLgoJKHBhdGNoX3VuYXJ5b3ApOiBVc2Ugbm9kZSBpbnN0ZWFkIG9mIGl0cyBsaW5lL2NvbHVtbiB2YWx1ZSB3aGVuCgljYWxsaW5nIG91dGVyX2ZpZWxkX2FjY2Vzc19maXguCgpGcmkgRmViIDExIDE3OjM4OjI2IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoaW50ZXJmYWNlX2RlY2xhcmF0aW9uOik6IE5vIGxvbmdlciB0YWdnZWQKIAk8bm9kZT4uIFJlLWluc3RhbGxlZCBkZWZhdWx0IGFjdGlvbi4KCShjbGFzc19tZW1iZXJfZGVjbGFyYXRpb246KTogSGFuZGxlIGlubmVyIGludGVyZmFjZXMuCgkoaW50ZXJmYWNlX21lbWJlcl9kZWNsYXJhdGlvbik6IEhhbmRsZSBpbm5lciBpbnRlcmZhY2VzIGFuZAogCWNsYXNzZXMuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFB1c2ggZXJyb3IgaWYgb25lIHNlZW4uIFN1c3BlbmQgcGFyc2luZwogCWNvbnRleHQgd2hlbiBwcm9jZXNzaW5nIGFuIGlubmVyIGludGVyZmFjZS4KCShyZWdpc3Rlcl9maWVsZHMpOiBJbm5lciBjbGFzcyBzdGF0aWMgZmllbGQgbGltaXRhdGlvbnMgbm90IHRvCiAJYXBwbHkgdG8gaW5uZXIgaW50ZXJmYWNlcy4KClRodSBGZWIgMTAgMjI6MDc6MzUgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6IFVwZGF0ZSBgamF2YV9lcnJvcl9jb3VudCcgd2hlbiBhCiAJY2xhc3MnIGZpbGUgY2FuJ3QgYmUgZm91bmQuCgkocGFyc2UueSk6IEF2b2lkIChieXRlKWNvZGUgZ2VuZXJhdGlvbiB3aGVuIGVycm9ycyBzZWVuLgoKVGh1IEZlYiAxMCAyMDoxMDo0MyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogSGFuZGxlIFRSVU5DX0RJVl9FWFBSLiBFbnN1cmUgYGZhdGFsJwogCWRlY29kZXMgYSB2YWxpZCBub2RlLgoJKHBhdGNoX2Jpbm9wKTogSGFuZGxlIFRSVU5DX0RJVl9FWFBSLgoKVGh1IEZlYiAxMCAxNjowNDoyNiAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcGFja2FnZSk6IE5ldyBsb2NhbCBgYWNjJy4gVHJ5IHRvIHByb2dyZXNzaXZlbHkKIAlidWlsZCBhbmQgZ3Vlc3MgYSBwYWNrYWdlIGFuZCB0eXBlIG5hbWUuCgpUaHUgRmViIDEwIDEyOjUyOjA5IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogTG9hZCBhbmQKIAlsYXlvdXQgdGhlIHNlYXJjaCBjbGFzcyBpZiBuZWNlc3NhcnkuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogS2VlcCB0byBvcmlnaW5hbCB0eXBlIG9mIHRoZSBmb2xkZWQgaW5pdGlhbAogCXZhbHVlLgoKMjAwMC0wMi0wOSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBTZXQgYW5kIHRlc3QgQ0xBU1NfQkVJTkdfTEFJRE9VVC4KCUdlbmVyYXRlIGVycm9yIG1lc3NhZ2UgaWYgY2lyY3VsYXJpdHkgaXMgZGV0ZWN0ZWQuIE5ldyBzdGF0aWMKCWxvY2FsIGBsaXN0Jy4KCSogamF2YS10cmVlLmggKENMQVNTX0JFSU5HX0xBSURPVVQpOiBOZXcgZmxhZyB1c2FnZSwgbmV3IG1hY3JvLiAgKgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBWZXJ5IHNpbXBseSBoYW5kbGUKCVNBVkVfRVhQUi4KCSogcGFyc2UueSAoamF2YV9jaGVja19jaXJjdWxhcl9yZWZlcmVuY2UpOiBVc2UKCWBjeWNsaWNfaW5oZXJpdGFuY2VfcmVwb3J0JyBkdXJpbmcgcmVwb3J0LCBpZiBuZWNlc3NhcnkuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBmaXhlZCBjb21tZW50IHdpdGggYFRIUk9XX0VYUFI6JyBjYXNlLiBBdm9pZAoJd2Fsa2luZyBORVdfQVJSQVlfSU5JVCB0d2ljZS4KCjIwMDAtMDItMDkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IEFsbG93IGlubmVyIGNsYXNzZXMgdG8KCWJlIGBwcml2YXRlJyBvciBgcHJvdGVjdGVkJywgY2hlY2sgbW9kaWZpZXJzJyBjb25zaXN0ZW5jeS4gUHJldmVudAoJYmxvY2sgbG9jYWwgY2xhc3NlcyBmcm9tIGJlYXJpbmcgYW55IG1vZGlmaWVycy4KCjIwMDAtMDItMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGV4Y2VwdC5jIChjaGVja19zdGFydF9oYW5kbGVycyk6IFJlLWFkZCBwcm90b3R5cGUgbG9zdCBpbiBsYXN0CglwYXRjaC4KCShtYXliZV9zdGFydF90cnkpOiBSZW1vdmUgZXhjZXNzIGFyZ3VtZW50IHRvIGBjaGVja19zdGFydF9oYW5kbGVycycuCgoyMDAwLTAyLTA5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY2xlYXJfYmluZGluZ19sZXZlbCk6IFJlbW92ZSBleGNlc3MgaW5pdGlhbGl6ZXIuCgkobWF5YmVfcG9wbGV2ZWxzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShmb3JjZV9wb3BsZXZlbHMpOiBEaXR0by4KCShzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IEFkZCBjb21tZW50LgoKMjAwMC0wMi0wNyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogRG9uJ3QgY29uc2lkZXIKCXByZS1pbml0aWFsaXphdGlvbiB3aXRoIHJlZmVyZW5jZSB2YWx1ZSAodXNlIDxjbGluaXQ+IGluc3RlYWQuKQoJKiBwYXJzZS55IChqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBObyBnZW5lcmF0ZWQgY29uc3RydWN0b3IgZm9yCglpbnRlcmZhY2VzLgoJKGJ1aWxkX291dGVyX2ZpZWxkX2FjY2Vzcyk6IFJlbW92ZWQgZGVidWcgbWVzc2FnZS4KCShvdXRlcl9maWVsZF9leHBhbmRlZF9hY2Nlc3NfcCk6IEFkYXB0ZWQgdG8gYnl0ZWNvZGUgZ2VuZXJhdGlvbi4KCShidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kKTogVXNlIGZpeF9tZXRob2RfYXJndW1lbnRfbmFtZXMuCgkoYnVpbGRfb3V0ZXJfbWV0aG9kX2FjY2Vzc19tZXRob2QpOiBGaXhlZCBpbmRlbnRhdGlvbi4gQWRkZWQKCWNvbW1lbnQuIEhhbmRsZSBhY2Nlc3MgbWV0aG9kIGdlbmVyYXRpb24gZm9yIHN0YXRpYyBhbmQgYWxzbyB2b2lkCgltZXRob2RzLgoJKGJ1aWxkX2FjY2Vzc190b190aGlzbik6IEluc2VydGVkIGRlYnVnIG1lc3NhZ2UuCgkobWF5YmVfYnVpbGRfdGhpc25fYWNjZXNzX21ldGhvZCk6IFVzZSBmaXhfbWV0aG9kX2FyZ3VtZW50X25hbWVzLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEZpeGVkIGNvbW1lbnQuCgkobm90X2FjY2Vzc2libGVfcCk6IEFkYXB0ZWQgdG8gYnl0ZWNvZGUgZ2VuZXJhdGlvbi4gQWRkZWQgY29tbWVudC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IEFkZGVkIGNvbW1lbnQuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIEhhbmRsZSBzdGF0aWMKCW1ldGhvZHMuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBEb24ndCBzaG9ydGN1dCBoYW5kbGluZyBvZiBpbml0aWFsaXplZCB1cG9uCglkZWNsYXJhdGlvbiBTdHJpbmcgdHlwZSBzdGF0aWMgZmllbGRzIHdoZW4gZ2VuZXJhdGluZyBieXRlY29kZS4KCShwYXRjaF91bmFyeW9wKTogSGFuZGxlIG91dGVyIGZpZWxkIGFjY2VzcyB3aGVuIGdlbmVyYXRpbmcKCWJ5dGVjb2RlLgoKVGh1IEZlYiAgMyAyMDoyMzoxOSAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChGSUVMRF9USElTTik6IE5ldyBtYWNyby4KCSogamNmLXdyaXRlLmMgKGFwcGVuZF9zeW50aGV0aWNfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6IFNldCAiU3ludGhldGljIiBhdHRyaWJ1dGUgb24gdGhpcyQ8bj4sCiAJdmFsJDxuYW1lPiBmaWVsZHMsIGFjY2VzcyQ8bj4gYW5kICRmaW5pdCQgbWV0aG9kcy4gRml4ZWQgaW5kZW50YXRpb24uCgkqIHBhcnNlLnkgKGFkZF9pbm5lcl9jbGFzc19maWVsZHMpOiBTZXQgRklFTERfVEhJU04gZm9yIGNyZWF0ZWQKIAl0aGlzJDxuPiBmaWVsZHMuCgkoYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzKTogVHVybmVkIG9uIGFjY2VzcyBmdW5jdGlvbnMgdXNhZ2UgYW5kCiAJZ2VuZXJhdGlvbiB3aGVuIGNvbXBpbGluZyB0byBieXRlY29kZS4KCShtYXliZV91c2VfYWNjZXNzX21ldGhvZCk6IExpa2V3aXNlLgoKMjAwMC0wMS0yNSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBqYXZhLWV4Y2VwdC5oIChzdHJ1Y3QgZWhfcmFuZ2UpOiBBZGQgYGV4cGFuZGVkJyBmaWVsZC4KCShtYXliZV9zdGFydF90cnkpOiBBZGQgZW5kX3BjIGFyZy4KCShtYXliZV9lbmRfdHJ5KTogRGl0dG8uCgkqIGphdmEtdHJlZS5oIChmb3JjZV9wb3BsZXZlbHMpOiBuZXcgZnVuY3Rpb24uCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6IERvbid0IGNhbGwgbWF5YmVfc3RhcnRfdHJ5IG9yCgltYXliZV9lbmRfdHJ5LgoJKiBleGNlcHQuYyAoYWRkX2hhbmRsZXIpOiBSZXNldCBleHBhbmRlZC4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogU2V0IGV4cGFuZGVkLgoJKGNoZWNrX3N0YXJ0X2hhbmRsZXJzKTogRG9uJ3QgZXhwYW5kIGEgc3RhcnQgaGFuZGxlciB0aGF0J3MKCWFscmVhZHkgYmVlbiBleHBhbmRlZC4KCShtYXliZV9zdGFydF90cnkpOiBBZGQgZW5kX3BjIGFyZy4gIE9ubHkgZXhwYW5kIGEgaGFuZGxlciB3aGljaAoJZW5kcyBhZnRlciBlbmRfcGMuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBjYWxsIGZvcmNlX3BvcGxldmVscy4KCShmb3JjZV9wb3BsZXZlbHMpOiBuZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoYmluZGluZ19sZXZlbCk6IEFkZCBzdGFydF9wYyBvZiBiaW5kaW5nIGxldmVsLgoJKG1heWJlX3B1c2hsZXZlbHMpOiBDYWxsIG1heWJlX3N0YXJ0X3RyeSB3aGVuIHB1c2hpbmcgYmluZGluZwoJbGV2ZWxzLgoJKG1heWJlX3BvcGxldmVscyk6IENhbGwgbWF5YmVfZW5kX3RyeSB3aGVuIHBvcHBpbmcgYmluZGluZyBsZXZlbHMuCgkoTEFSR0VTVF9QQyk6IERlZmluZS4KCShjbGVhcl9iaW5kaW5nX2xldmVsKTogVXNlIExBUkdFU1RfUEMuCgoJKiBqYXZhLXRyZWUuaCAoREVCVUdfSkFWQV9CSU5ESU5HX0xFVkVMUyk6IG5ldyBkZWZpbmUuCgkqIGRlY2wuYyAoREVCVUdfSkFWQV9CSU5ESU5HX0xFVkVMUyk6IG5ldyBkZWZpbmUuCgkoYmluZGluZ19kZXB0aCwgaXNfY2xhc3NfbGV2ZWwsIGN1cnJlbnRfcGMpOiBuZXcgdmFyaWFibGVzLgoJKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogZGl0dG8uCgkoaW5kZW50KTogbmV3IGZ1bmN0aW9uLgoJKHB1c2hfanZtX3Nsb3QpOiBhZGQgZGVidWdnaW5nIGluZm8uCgkobWF5YmVfcHVzaGxldmVscyk6IGRpdHRvLgoJKG1heWJlX3BvcGxldmVscyk6IGRpdHRvLgoJKHB1c2hsZXZlbCk6IGRpdHRvLgoJKHBvcGxldmVsKTogZGl0dG8uCgkoc3RhcnRfamF2YV9tZXRob2QpOiBkaXR0by4KCShnaXZlX25hbWVfdG9fbG9jYWxzKTogY29tbWVudCBvbmx5LgoJKiBleGNlcHQuYyAoYmluZGluZ19kZXB0aCwgaXNfY2xhc3NfbGV2ZWwsIGN1cnJlbnRfcGMpOgoJbmV3IHZhcmlhYmxlcy4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogYWRkIGRlYnVnZ2luZyBpbmZvLgoJKGV4cGFuZF9lbmRfamF2YV9oYW5kbGVyKTogZGl0dG8uCgoyMDAwLTAyLTA1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnamF2YWguYyAob3ZlcmxvYWRlZF9qbmlfbWV0aG9kX2V4aXN0c19wKTogQWRkIHByb3RvdHlwZS4KCShwcmludF9uYW1lX2Zvcl9zdHViX29yX2puaSwgcHJvY2Vzc19maWxlKTogQ29uc3RpZnkgYSBjaGFyKi4KCjIwMDAtMDItMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1pby5jIChqY2ZfcHJpbnRfdXRmOF9yZXBsYWNlKTogSGFuZGxlIFVURi04IGlucHV0LgoKMjAwMC0wMS0zMSAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CgoJKiBnY2MvamF2YS9qYXZhb3AuaCAoV09SRFNfVE9fRE9VQkxFKTogQWxsb3cgV09SRFNfVE9fRE9VQkxFIHRvCglhc3NlbWJsZSBkb3VibGVzIGNvcnJlY3RseSB3aGVuIEhPU1RfRkxPQVRfV09SRFNfQklHX0VORElBTiBpcwoJZGVmaW5lZCB0byBiZSAxLgoKV2VkIEZlYiAgMiAxODo0MzozNyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5kZWYgKElOU1RBTkNFX0lOSVRJQUxJWkVSU19FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogamF2YS10cmVlLmggKFRZUEVfSUlfU1RNVF9MSVNUKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGQgYGlpX2Jsb2NrJy4KCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBVc2UgQ1BDX0lOSVRJQUxJWkVSX0xJU1QsCglDUENfU1RBVElDX0lOSVRJQUxJWkVSX0xJU1QgYW5kIENQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGQgYGluc3RhbmNlX2luaXRpYWxpemVycycuCgkoQ1BDX0lOSVRJQUxJWkVSX0xJU1QsIENQQ19TVEFUSUNfSU5JVElBTElaRVJfTElTVCwKCUNQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULCBDUENfSU5JVElBTElaRVJfU1RNVCwKCUNQQ19TVEFUSUNfSU5JVElBTElaRVJfU1RNVCwgQ1BDX0lOU1RBTkNFX0lOSVRJQUxJWkVSX1NUTVQpOiBOZXcKCW1hY3Jvcy4KCSogcGFyc2UueSAoYWRkX2luc3RhbmNlX2luaXRpYWxpemVyKTogTmV3IGZ1bmN0aW9uLgoJKGluX2luc3RhbmNlX2luaXRpYWxpemVyKTogTmV3IHN0YXRpYyBnbG9iYWwuCgkoY2xhc3NfYm9keV9kZWNsYXJhdGlvbjopOiBMaW5rIGluc3RhbmNlIGluaXRpYWxpemVyIGJsb2NrLgoJKHN0YXRpY19pbml0aWFsaXplcjopOiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9TVE1ULgoJKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogUmVtb3ZlIHVudXNlZCBsb2NhbC4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3B1c2hfaW5pdGlhbGl6ZWRfZmllbGQpOiBGaXhlZCBsZWFkaW5nCgljb21tZW50LiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9MSVNULCBDUENfSU5JVElBTElaRVJfTElTVCBhbmQKCUNQQ19JTlNUQU5DRV9JTklUSUFMSVpFUl9MSVNULgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcG9wX2luaXRpYWxpemVkX2ZpZWxkKTogTGlrZXdpc2UuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZSBDUENfSU5JVElBTElaRVJfU1RNVC4KCShyZWdpc3Rlcl9maWVsZHMpOiBVc2UgQ1BDX1NUQVRJQ19JTklUSUFMSVpFUl9TVE1UIGFuZAoJQ1BDX0lOSVRJQUxJWkVSX1NUTVQuCgkoZml4X2NvbnN0cnVjdG9ycyk6IE5ldyBsb2NhbCBgY2xhc3NfdHlwZScuIFVzZSBpdC4gQ2FsbAoJYWRkX2luc3RhbmNlX2luaXRpYWxpemVyLgoJKGphdmFfY29tcGxldGVfbGhzKTogTmV3IGNhc2UgSU5TVEFOQ0VfSU5JVElBTElaRVJTX0VYUFIuCgkocGF0Y2hfcmV0dXJuKTogRm9yYmlkIHJldHVybiBpbiBpbnN0YW5jZSBpbml0aWFsaXplcnMuCgkocGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogRW5mb3JjZSBleGNlcHRpb24gaGFuZGxpbmcgaW4gdGhlIGNvbnRleHQKCW9mIGluc3RhbmNlIGluaXRpYWxpemVycy4KCjIwMDAtMDItMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoamF2YS5tb3N0bHljbGVhbik6IFJlbW92ZSBleGVjdXRhYmxlcyBpbgoJYG1vc3RseWNsZWFuJy4KCjIwMDAtMDEtMzEgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgoKCSogZ2NjL2phdmEvZ2phdmFoLmMgKERfTkFOX01BU0spOiBBbHRlcm5hdGUgZGVmaW5pdGlvbiByZXF1aXJlZCB3aGVuCglIT1NUX0ZMT0FUX1dPUkRTX0JJR19FTkRJQU4gaXMgZGVmaW5lZCB0byBiZSAxLgoJKGphdmFfZmxvYXRfZmluaXRlKTogQ29udmVydCB0byB1c2UgdW5pb24gV29yZCBmcm9tIGphdmFvcC5oLgoJKGphdmFfZG91YmxlX2Zpbml0ZSk6IENvbnZlcnQgdG8gdXNlIHVuaW9uIERXb3JkIGZyb20gamF2YW9wLmguCgoyMDAwLTAyLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAob3B0aW9ucyk6IEFkZGVkIGBqbmknIGVudHJ5LgoJKGhlbHApOiBEb2N1bWVudCAtam5pLgoJKGZsYWdfam5pKTogTmV3IGdsb2JhbC4KCShwcm9jZXNzX2ZpbGUpOiBIYW5kbGUgSk5JIG91dHB1dC4gIERvbid0IHByaW50IHRleHQgZnJvbQoJLXByZXBlbmQsIC1hZGQsIGV0Yywgd2hlbiBnZW5lcmF0aW5nIHN0dWJzLiAgT25seSByZW1vdmUgYC5jbGFzcycKCXN1ZmZpeCBpZiBpdCBhY3R1YWxseSBleGlzdHMuCgkobWFpbik6IENyZWF0ZSBhIGAuYycgZmlsZSB3aGVuIHJ1biB3aXRoIGAtLWpuaSAtLXN0dWJzJy4gIENyZWF0ZQoJY29ycmVjdCBvdXRwdXQgZmlsZSBuYW1lIHdpdGggYC0tam5pJy4KCShwcmludF9pbmNsdWRlKTogTWFuZ2xlIGhlYWRlciBuYW1lIGRpZmZlcmVudGx5IGluIEpOSSBjYXNlLgoJKEhBTkRMRV9NRVRIT0QpOiBJbiBKTkkgbW9kZSwgY2FsbCBwcmludF9tZXRob2RfaW5mbyB0byBnZW5lcmF0ZQoJbWV0aG9kIGxpc3QuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBIYW5kbGUgSk5JIGNhc2UuICBQdXQgc2lnbmF0dXJlIGluZm8gaW50bwoJbWV0aG9kIG5hbWUuICBIYW5kbGUgY2FzZSB3aGVuIFNUUkVBTSBpcyBOVUxMLgoJKHByaW50X25hbWVfZm9yX3N0dWJfb3Jfam5pKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X3N0dWJfb3Jfam5pKTogUmVuYW1lZCBmcm9tIGBwcmludF9zdHViJy4gIEhhbmRsZSBKTkkuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IEhhbmRsZSBKTkkuCgkocHJpbnRfZnVsbF9jeHhfbmFtZSk6IExpa2V3aXNlLgoJKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBMaWtld2lzZS4KCShvdmVybG9hZGVkX2puaV9tZXRob2RfZXhpc3RzX3ApOiBOZXcgZnVuY3Rpb24uCgkoc3RydWN0IG1ldGhvZF9uYW1lKTogQWRkZWQgYHNpZ25hdHVyZScgYW5kIGBzaWdfbGVuZ3RoJyBmaWVsZHMuCgkoSEFORExFX0VORF9GSUVMRCk6IERvIG5vdGhpbmcgaW4gSk5JIG1vZGUuCgoyMDAwLTAyLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdi1zY2FuLmM6IEluY2x1ZGUgdmVyc2lvbi5jLCA8Z2V0b3B0Lmg+LgoJKExPTkdfT1BULCBPUFRfSEVMUCwgT1BUX1ZFUlNJT04pOiBOZXcgbWFjcm9zLgoJKG9wdGlvbnMpOiBOZXcgYXJyYXkuCgkodXNhZ2UpOiBOZXcgZnVuY3Rpb24uCgkodmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShtYWluKTogVXNlIGdldG9wdF9sb25nIHRvIHBhcnNlIGNvbW1hbmQgbGluZS4KCSogamNmLWR1bXAuYzogSW5jbHVkZSB2ZXJzaW9uLmMsIDxnZXRvcHQuaD4uCgkoTE9OR19PUFQsIE9QVF9jbGFzc3BhdGgsIE9QVF9DTEFTU1BBVEgsIE9QVF9IRUxQLCBPUFRfVkVSU0lPTiwKCU9QVF9KQVZBUCk6IE5ldyBtYWNyb3MuCgkob3B0aW9ucyk6IE5ldyBhcnJheS4KCSh1c2FnZSk6IFJldHVybiBgdm9pZCcuICBDaGFuZ2VkIG1lc3NhZ2UuCgkoaGVscCk6IE5ldyBmdW5jdGlvbi4KCSh2ZXJzaW9uKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgZ2V0b3B0X2xvbmdfb25seSB0byBwYXJzZSBjb21tYW5kIGxpbmUuCgkqIGdqYXZhaC5jOiBJbmNsdWRlIDxnZXRvcHQuaD4uCgkoTE9OR19PUFQsIE9QVF9jbGFzc3BhdGgsIE9QVF9DTEFTU1BBVEgsIE9QVF9IRUxQLCBPUFRfVEVNUCwKCU9QVF9WRVJTSU9OLCBPUFRfUFJFUEVORCwgT1BUX0ZSSUVORCwgT1BUX0FERCwgT1BUX0FQUEVORCwgT1BUX00sCglPUFRfTU0sIE9QVF9NRywgT1BUX01ELCBPUFRfTU1EKTogTmV3IG1hY3Jvcy4KCShvcHRpb25zKTogTmV3IGFycmF5LgoJKGphdmFfbm9fYXJndW1lbnQpOiBSZW1vdmVkLgoJKGhlbHApOiBVcGRhdGVkIHdpdGggbWlzc2luZyBvcHRpb25zLgoJKG1haW4pOiBVc2UgZ2V0b3B0X2xvbmdfb25seSB0byBwYXJzZSBjb21tYW5kIGxpbmUuCgkodXNhZ2UpOiBDaGFuZ2VkIG1lc3NhZ2UuCgpUdWUgRmViICAxIDIyOjIzOjQxIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmRlZiAoTkVXX0FOT05ZTU9VU19BUlJBWV9FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogcGFyc2UuaCAoQU5PTllNT1VTX0FSUkFZX0JBU0VfVFlQRSwgQU5PTllNT1VTX0FSUkFZX0RJTVNfU0lHLAoJQU5PTllNT1VTX0FSUkFZX0lOSVRJQUxJWkVSKTogTmV3IGFjY2VzcyBtYWNyb3MuCgkqIHBhcnNlLnkgKGFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogSGFuZGxlIGFub255bW91cyBhcnJheXMuCgkoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogRG9uJ3Qgc2V0IGByZXRfbmFtZScgaWYgbnVsbC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBOZXcgY2FzZSBORVdfQU5PTllNT1VTX0FSUkFZX0VYUFIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX2NsYXNzKTogTGlrZXdpc2UuCgpUdWUgRmViICAxIDE0OjU5OjM1IDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmRlZiAoU1lOQ0hST05JWkVEX0VYUFIpOiBGaXhlZCB0eXBvLgoJKiBwYXJzZS5oIChNQU5HTEVfQUxJQVNfSU5JVElBTElaRVJfUEFSQU1FVEVSX05BTUVfSUQpOiBOZXcgbWFjcm8uCgkoTUFOR0xFX0FMSUFTX0lOSVRJQUxJWkVSX1BBUkFNRVRFUl9OQU1FX1NUUik6IExpa2V3aXNlLgoJKFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUyk6IFVzZSBERUNMX0ZJTklUX1AuCgkoQUlQTF9GVU5DVElPTl9GSU5JVF9JTlZPQ0FUSU9OKTogUmVwbGFjZXMKCUFJUExfRlVOQ1RJT05fQ09NUExFVEVEX0lOVk9DQVRJT04uCgkoQUlQTF9GVU5DVElPTl9DVE9SX0lOVk9DQVRJT04pOiBSZXBsYWNlcwoJQUlQTF9GVU5DVElPTl9JTlZPQ0FUSU9OX1JFQURZLgoJKEFJUExfRlVOQ1RJT05fREVDTEFSQVRJT04pOiBOZXcgZW51bSBlbnRyeS4KCSogcGFyc2UueSAocmVvcmRlcl9zdGF0aWNfaW5pdGlhbGl6ZWQpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9wYXJzZXJfY29udGV4dF9wb3BfaW5pdGlhbGl6ZWRfZmllbGQpOiBVc2UgaXQuCgkoYWRkX2lubmVyX2NsYXNzX2ZpZWxkcyk6IFVzZQoJTUFOR0xFX0FMSUFTX0lOSVRJQUxJWkVSX1BBUkFNRVRFUl9OQU1FX0lELiBDb21tZW50CglhdWdtZW50ZWQuIEluc3RhbGwgbWFya2VyIGFmdGVyIGxhc3QgYWxpYXMgaW5pdGlhbGl6ZXIsIGlmIGFueS4KCShnZW5lcmF0ZV9maW5pdCk6IEZpeGVkIHR5cG8uIERvbid0IHRyeSB0byByZXRhaW4gb25seSB0aGUgdXNlZAoJZmllbGRzLgoJKG1ldGhvZF9oZWFkZXIpOiBDb21wdXRlIGFuZCBzZXQgREVDTF9GVU5DVElPTl9OQVAuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBGaXhlZCBjb21tZW50LiBJbnNlcnQgYWxpYXMgaW5pdGlhbGl6ZXIgaW4KCXBhcmFtZXRlciBsaXN0LgoJKGJ1aWxkX2FsaWFzX2luaXRpYWxpemVyX3BhcmFtZXRlcl9saXN0KTogRml4ZWQgbGVhZGluZwoJY29tbWVudC4gTmV3IGNhc2UgZm9yIEFJUExfRlVOQ1RJT05fREVDTEFSQVRJT04uIE9sZCBlbnVtIHZhbHVlCglyZXBsYWNlZCBieSBuZXcgb25lcy4gVXNlIE1BTkdMRV9BTElBU19JTklUSUFMSVpFUl9QQVJBTUVURVJfTkFNRV9JRC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzcyk6IENvZGUgdG8gcmV0YWluIG9ubHkgdXNlZCBhbGlhc2VzCglyZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBOZXcgbG9jYWwgYGZpcnN0X2RlY2wnLiBHZW5lcmF0ZQoJJGZpbml0JCBmaXJzdCwgdGhlbiBleHBhbmQgdGhlIGNvbnN0cnVjdG9ycywgcmVndWxhciBtZXRob2RzIGFuZAoJPGNsaW5pdD4uCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogRG9uJ3QgcmVwb3J0IGVycm9yIG9uIG1pc3NpbmcKCXJldHVybiBzdGF0ZW1lbnQgaWYgcHJldmlvdXNseSBkZXRlY3RlZCBib2d1cy4KCShmaXhfY29uc3RydWN0b3JzKTogRG9uJ3QgcGF0Y2ggY29uc3RydWN0b3IgcGFyYW1ldGVycyBsaXN0LgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogVXNlIG5ldyBBSVBMIGVudW0gdmFsdWVzLiBSZXZlcnNlCglhbGlhcyBpbml0aWFsaXplciBsaXN0IGZvciBhbm9ueW1vdXMgY2xhc3Nlcy4KCjIwMDAtMDEtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogVXNlIFRZUEVfSVNfV0lERSB0bwoJZGV0ZXJtaW5lIGhvdyBtYW55IHN0YWNrIHNsb3RzIHRvIHBvcC4KCjIwMDAtMDEtMjkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9ybWFsX3BhcmFtZXRlcjopOiBTZXQgYCQkJyB0byBOVUxMX1RSRUUgZm9yIGJldHRlcgoJZXJyb3IgaGFuZGxpbmcvcmVjb3ZlcnkuCgkqIGphdmEtdHJlZS5oIChTWU5DSFJPTklaRURfRVhQUik6IEZpeGVkIHR5cG8gaW4gY29tbWVudC4KCkZyaSBKYW4gMjggMjA6MTA6NTcgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQVJHX0ZJTkFMX1AsIEZJRUxEX0xPQ0FMX0FMSUFTLAogCUZJRUxEX0xPQ0FMX0FMSUFTX1VTRUQpOiBOZXcgbWFjcm9zLgoJKERFQ0xfRlVOQ1RJT05fTkFQKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBsYW5nX2RlY2wpOiBOZXcgZmllbGQgYG5hcCcuCgkoVFlQRV9GSU5JVF9TVE1UX0xJU1QsIFRZUEVfQ0xJTklUX1NUTVRfTElTVCk6IE5ldyBtYWNyb3MuCgkoc3RydWN0IGxhbmdfdHlwZSk6IE5ldyBmaWVsZHMgYGZpbml0X3N0bXRfbGlzdCcgYW5kCiAJYGNsaW5pdF9zdG10X2xpc3QnLgoJKENMQVNTX0hBU19GSU5JVF9QKTogRGVmaW5lZCB1c2luZyBUWVBFX0ZJTklUX1NUTVRfTElTVC4KCSogcGFyc2UuaCAoTUFOR0xFX09VVEVSX0xPQ0FMX1ZBUklBQkxFX05BTUUpOiBOZXcgbWFjcm8uCgkoU0tJUF9USElTX0FORF9BUlRJRklDSUFMX1BBUk1TLCBNQVJLX0ZJTkFMX1BBUk1TLAogCVVOTUFSS19GSU5BTF9QQVJNUywgQ1JBRlRFRF9QQVJBTV9MSVNUX0ZJWFVQKTogTmV3IG1hY3Jvcy4KCShBSVBMX0ZVTkNUSU9OX0NSRUFUSU9OLCBBSVBMX0ZVTkNUSU9OX0NPTVBMRVRFRF9JTlZPQ0FUSU9OLAogCUFJUExfRlVOQ1RJT05fSU5WT0NBVElPTl9SRUFEWSk6IE5ldyBlbnVtIGZpZWxkcy4KCShCVUlMRF9USFJPVyk6IE1hY3JvIGxpbmUgc2VwYXJhdG9yIHJlLWluZGVudGVkLgoJKiBwYXJzZS55IChlbmRfY2xhc3NfZGVjbGFyYXRpb24pOiBOZXcgZnVuY3Rpb24uCgkobWF5YmVfZ2VuZXJhdGVfcHJlX2V4cGFuZF9jbGluaXQpOiBOZXcgbmFtZSBmb3IKIAlqYXZhX3ByZV9leHBhbmRfY2xpbml0LiBDcmVhdGUgPGNsaW5pdD4gb2ZmIFRZUEVfQ0xJTklUX1NUTVRfTElTVCwKIAlwcmUtZXhwYW5kIHN0YXRpYyBmaWVsZHMuCgkobWF5YmVfZ2VuZXJhdGVfY2xpbml0KTogRnVuY3Rpb24gZGVsZXRlZC4KCShjaGVja19mb3Jfc3RhdGljX21ldGhvZF9yZWZlcmVuY2UpOiBQcm90b3R5cGUncyBwYXJhbWV0ZXIgbGlzdAogCWluZGVudGVkLgoJKGdlbmVyYXRlX2Zpbml0KTogTmV3IG5hbWUgZm9yIG1heWJlX2dlbmVyYXRlX2Zpbml0LiBDaGFuZ2VkCiAJbGVhZGluZyBjb21tZW50LiBGdW5jdGlvbiByZXdyaXR0ZW4gdG8gdXNlCiAJVFlQRV9GSU5JVF9TVE1UX0xJU1QuIENhbGwgYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QuCgkoYnVpbGRfYWxpYXNfaW5pdGlhbGl6ZXJfcGFyYW1ldGVyX2xpc3QpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9wYXJzZXJfY29udGV4dF9wb3BfaW5pdGlhbGl6ZWRfZmllbGQpOiBMaWtld2lzZS4KCShhZGRfaW5uZXJfY2xhc3NfZmllbGRzKTogTGlrZXdpc2UuCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDYWxsIGVuZF9jbGFzc19kZWNsYXJhdGlvbi4KCShjbGFzc19tZW1iZXJfZGVjbGFyYXRpb246KTogTGlrZXdpc2UuCgkoZm9ybWFsX3BhcmFtZXRlcl9saXN0Oik6IEZpeGVkIHR5cG9zLgoJKGZvcm1hbF9wYXJhbWV0ZXI6KTogVXNlIEFSR19GSU5BTF9QIHRvIG1hcmsgY3JlYXRlZCB0cmVlIGxpc3QKIAllbGVtZW50LiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZy4KCShibG9ja19zdGF0ZW1lbnQ6KTogQ2FsbCBlbmRfY2xhc3NfZGVjbGFyYXRpb24uCgkoYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uOik6IExpa2V3aXNlLgoJKGNyZWF0ZV9hbm9ueW1vdXNfY2xhc3MpOiBGaXhlZCBjb21tZW50cy4KCShjcmVhdGVfY2xhc3MpOiBDYWxsIGFkZF9pbm5lcl9jbGFzc19maWVsZHMuCgkocmVnaXN0ZXJfZmllbGRzKTogU2V0IEZJRUxEX0xPQ0FMX0FMSUFTIGFjY29yZGluZyB0byBBUkdfRklOQUxfUC4KCShtZXRob2RfaGVhZGVyKTogVXNlIE1BUktfRklOQUxfUEFSTVMuCgkoZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbik6IFVzZSBVTk1BUktfRklOQUxfUEFSTVMuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBQcm9wYWdhdGUgZmluYWwgYXJndW1lbnQgZmxhZy4KCShjcmFmdF9jb25zdHJ1Y3Rvcik6IE5ldyBsb2NhbCBgYXJ0aWZpY2lhbCcuIENhbGwKIAlidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdC4gVXNlCiAJQ1JBRlRFRF9QQVJBTV9MSVNUX0ZJWFVQLCBhc3NpZ24gREVDTF9GVU5DVElPTl9OQVAuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogTWFyayBwYXJtIGRlY2xzIHdpdGggTE9DQUxfRklOQUwgaWYKIAluZWNlc3NhcnkuCgkoY29tcGxldGVfZXhwYW5kX2NsYXNzKTogR2V0IHJpZCBvZiB1bnVzZWQgb3V0ZXIgY29udGV4dCBsb2NhbAogCWFsaWFzIGZpZWxkcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRml4ZWQgbGVhZGluZwogCWNvbW1lbnQuIEdlbmVyYXRlL3ByZS1leHBhbmQgPGNsaW5pdD4gZmlyc3QuIENoYW5nZWQgbWV0aG9kCiAJZXhwYW5zaW9uIG9yZGVyIHRvIHJlZ3VsYXIsICRmaW5pdCQsIGNvbnN0cnVjdG9ycywgPGNsaW5pdD4uCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZGVjbC4KCShmaXhfY29uc3RydWN0b3JzKTogRml4IGNvbnN0cnVjdG9yIHBhcmFtZXRlciBsaXN0IHRvIGFjY291bnQgZm9yCiAJb3V0ZXIgY29udGV4dCBsb2NhbCBhbGlhcyBpbml0aWFsaXplcnMuCgkodmVyaWZ5X2NvbnN0cnVjdG9yX3N1cGVyKTogVXNlIFNLSVBfVEhJU19BTkRfQVJUSUZJQ0lBTF9QQVJNUy4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IExvb2t1cCBvdXRlciBjb250ZXh0IGxvY2FsIGFsaWFzZXMuIE5ldwogCWxvY2FsIGBhY2Nlc3MnLCB1c2UgaXQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBQYXRjaCBpbm5lciBjbGFzcyBjdG9yIGludm9jYXRpb24gd2l0aAogCW91dGVyIGNvbnRleHQgbG9jYWwgYWxpYXNlcyBpbml0aWFsaXphdGlvbiB2YWx1ZXMuICRmaW5pdCQKIAlpbnZvY2F0aW9uIHBhdGNoaW5nIG5vdyBpbmNsdWRlcyB0aGluZ3MgZ2VuZXJhdGVkIHdpdGgKIAlidWlsZF9hbGlhc19pbml0aWFsaXplcl9wYXJhbWV0ZXJfbGlzdC4KCShhcmd1bWVudF90eXBlc19jb252ZXJ0aWJsZSk6IFVzZSBTS0lQX1RISVNfQU5EX0FSVElGSUNJQUxfUEFSTVMuCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbik6IExpa2V3aXNlLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBDaGFuZ2VkIGNvbW1lbnQuCgoyMDAwLTAxLTI3ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChlbWl0X2dvdG8pOiBSRVNFUlZFIDMgYnl0ZXMgZm9yIGluc24uCgkoZW1pdF9pZik6IERpdHRvLgoJKGVtaXRfanNyKTogRGl0dG8uCgoyMDAwLTAxLTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwYXJzZS5oIChPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HKTogRG9uJ3QgdXNlIEFOU0kgc3RyaW5nCgljb25jYXRlbmF0aW9uLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcyKTogTmV3IG1hY3JvIGFsbG93aW5nIHR3byBhcmdzLgoKCSogcGFyc2UueSAocmVnaXN0ZXJfZmllbGRzKTogRG9uJ3QgcGFzcyBhIGZvcm1hdCBzcGVjaWZpZXIgdG8KCU9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2hlYWRlcik6IFVzZSBPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HMgoJaW5zdGVhZCBvZiBPQlNPTEVURV9NT0RJRklFUl9XQVJOSU5HLCBhbmQgZG9uJ3QgcGFzcyBhIGZvcm1hdAoJc3BlY2lmaWVyLgoJKGNoZWNrX21vZGlmaWVycyk6IENoYW5nZSBmdW5jdGlvbiBpbnRvIGEgbWFjcm8uCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogUGFzcyBhIGxpdGVyYWwgZm9ybWF0IHN0cmluZy4KCjIwMDAtMDEtMjEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGJ1ZmZlci5oOiBQUk9UTyAtPiBQQVJBTVMuCgkqIGNoZWNrLWluaXQuYzogTGlrZXdpc2UuCgkqIGNsYXNzLmM6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYzogTGlrZXdpc2UuCgkqIGNvbnZlcnQuaDogTGlrZXdpc2UuCgkqIGRlY2wuYzogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jOiBMaWtld2lzZS4KCSogZXhwci5jOiBMaWtld2lzZS4KCSogZ2phdmFoLmM6IExpa2V3aXNlLgoJKiBqYXZhLWV4Y2VwdC5oOiBMaWtld2lzZS4KCSogamF2YS10cmVlLmg6IExpa2V3aXNlLgoJKiBqY2YtZGVwZW5kLmM6IExpa2V3aXNlLgoJKiBqY2YtZHVtcC5jOiBMaWtld2lzZS4KCSogamNmLXBhcnNlLmM6IExpa2V3aXNlLgoJKiBqY2YtcGF0aC5jOiBMaWtld2lzZS4KCSogamNmLXJlYWRlci5jOiBMaWtld2lzZS4KCSogamNmLXdyaXRlLmM6IExpa2V3aXNlLgoJKiBqY2YuaDogTGlrZXdpc2UuCgkqIGp2LXNjYW4uYzogTGlrZXdpc2UuCgkqIGp2Z2VubWFpbi5jOiBMaWtld2lzZS4KCSoganZzcGVjLmM6IExpa2V3aXNlLgoJKiBsYW5nLmM6IExpa2V3aXNlLgoJKiBsZXguYzogTGlrZXdpc2UuCgkqIGxleC5oOiBMaWtld2lzZS4KCSogcGFyc2Utc2Nhbi55OiBMaWtld2lzZS4KCSogcGFyc2UuaDogTGlrZXdpc2UuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoJKiB0eXBlY2suYzogTGlrZXdpc2UuCgkqIHZlcmlmeS5jOiBMaWtld2lzZS4KCSogeHJlZi5jOiBMaWtld2lzZS4KCSogeHJlZi5oOiBMaWtld2lzZS4KCSogemV4dHJhY3QuYzogTGlrZXdpc2UuCgkqIHppcGZpbGUuaDogTGlrZXdpc2UuCgoyMDAwLTAxLTE4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3MpOiBVc2UgTUFZQkVfQ1JFQVRFX1RZUEVfVFlQRV9MQU5HX1NQRUNJRklDLgoJKGlzX2NvbXBpbGVkX2NsYXNzKTogUmVtb3ZlIHRlc3Qgb24gVFlQRV9MQU5HX1NQRUNJRklDLCB1c2UgVFlQRV9KQ0YuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IENoZWNrIGZvciBjYWNoZWQKCWN1cnJlbnRfY29uc3RhbnRfcG9vbF9kYXRhX3JlZi4gQ2FjaGUgY3VycmVudF9jb25zdGFudF9wb29sX2RhdGFfcmVmCglpbiBUWVBFX0NQT09MX0RBVEVfUkVGLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9KQ0YsIFRZUEVfQ1BPT0wsIFRZUEVfQ1BPT0xfREFUQV9SRUYsCglNQVlCRV9DUkVBVEVfVFlQRV9UWVBFX0xBTkdfU1BFQ0lGSUM6KSBOZXcgbWFjcm9zLgoJKHN0cnVjdCBsYW5nX3R5cGUpOiBOZXcgZmllbGRzIGBjcG9vbCcgYW5kIGBjcG9vbF9kYXRhX3JlZicuCgkoTE9DQUxfRklOQUwpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChpbml0X291dGdvaW5nX2Nwb29sKTogQWx3YXlzIGFsbG9jYXRlIG5ldyBvdXRnb2luZwoJY29uc3RhbnQgcG9vbCAtLSBkb24ndCB0cnkgdG8gcmV1c2UuCgkocGFyc2VfemlwX2ZpbGVfZW50cmllcyk6IFVzZSBUWVBFX0pDRiwgZG9uJ3QgbGF6aWx5IGFsbG9jYXRlCglUWVBFX0xBTkdfU1BFQ0lGSUMuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IFVzZSBUWVBFX0pDRi4KCSogcGFyc2UuaCAoamF2YV9jaGVja19maW5hbCk6IFByb3RvdHlwZSByZW1vdmVkLgoJKiBwYXJzZS55IChjcmVhdGVfY2xhc3MpOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgZXh0cmEgYXJndW1lbnQgcGF0Y2guCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLAoJY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogTGlrZXdpc2UuCgkoamF2YV9leHBhbmRfZmluYWxzKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShjbGFzc19kZWNsYXJhdGlvbjopOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgZXh0cmEgYXJndW1lbnQgcGF0Y2guCgkoYmxvY2tfc3RhdGVtZW50Oik6IEZpeGVkIGNvbW1lbnQuCgkoYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uOik6IExpa2V3aXNlLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IFJldmVyc2VkIEphbiAxMiwgMjAwMCBleHRyYQoJYXJndW1lbnQgcGF0Y2guCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogTG9vc2VuZWQgZXJyb3IgcmVwb3J0IG9uIChpbm5lcikKCXB1YmxpYyBjbGFzcyBkZWNsYXJhdGlvbnMuIENQQ19JTk5FUl9QIHJlcGxhY2VzIEdFVF9DUENfTElTVC4KCShsaW5rX25lc3RlZF9jbGFzc190b19lbmNsb3NpbmcpOiBSZXZlcnNlZCBKYW4gMTIsIDIwMDAgcGF0Y2guCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhCglhcmd1bWVudCBwYXRjaC4KCShjcmVhdGVfaW50ZXJmYWNlKTogTGlrZXdpc2UuCgkoYW5vbnltb3VzX2NsYXNzX2NvdW50ZXIpOiBOZXcgc3RhdGljIGdsb2JhbC4KCShjcmVhdGVfYW5vbnltb3VzX2NsYXNzKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhIGFyZ3VtZW50CglwYXRjaC4gRml4ZWQgY29tbWVudHMuCgkoY3JlYXRlX2NsYXNzKTogUmV2ZXJzZWQgSmFuIDEyLCAyMDAwIGV4dHJhIGFyZ3VtZW50IHBhdGNoLiBSZXNldAoJYW5vbnltb3VzX2NsYXNzX2NvdW50ZXIgd2hlbiBkZWNsYXJpbmcgYSB0b3BsZXZlbCBjbGFzcy4KCShjcmFmdF9jb25zdHJ1Y3Rvcik6IEZpeGVkIGNvbnN0cnVjdG9yIG5hbWUgd2hlbiBoYW5kbGluZwoJYW5vbnltb3VzIGNsYXNzZXMuIEFub255bW91cyBjbGFzcyBjb25zdHJ1Y3RvcnMgdG8gZmVhdHVyZSBoaWRkZW4KCXRoaXMkPG4+IHBhcmFtZXRlci4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBBZGRlZCBjb21tZW50LgoJKGphdmFfY2hlY2tfZmluYWwpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBGaXhlZCBjb21tZW50LiBEb24ndCBnZW5lcmF0ZQoJY2xhc3MgZGF0YSwgc2F2ZSBpdHMgb3V0Z29pbmcgY29uc3RhbnQgcG9vbCBpbnN0ZWFkLgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IFNraXAgYW5vbnltb3VzIGNsYXNzIGNvbnN0cnVjdG9yCgloaWRkZW4gdGhpcyQ8bj4gcGFyYW1ldGVyLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBOZXcgbG9jYWwgYHNhdmVkX2N0eHAnLiBSZW1vdmVkIGNhbGwgdG8KCWphdmFfZXhwYW5kX2ZpbmFscyBhbmQgamF2YV9jaGVja19maW5hbC4gRXhwYW5kIGFub255bW91cyBjbGFzcwoJY29uc3RydWN0b3JzLiBHZW5lcmF0ZSBjbGFzcyBkYXRhLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBTa2lwIGFub255bW91cyBjbGFzcyBoaWRkZW4gdGhpcyQ8bj4KCXBhcmFtZXRlci4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfc2lnbmF0dXJlKTogVXNlIFRZUEVfU0lHTkFUVVJFIGFuZAoJTUFZQkVfQ1JFQVRFX1RZUEVfVFlQRV9MQU5HX1NQRUNJRklDLgoJKHNldF9qYXZhX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoKTW9uIEphbiAxOCAxNDozMDowOSAyMDAwICBKb2VyZyBCcnVuc21hbm4gIDxqb2VyZy5icnVuc21hbm5AZmVybnVuaS1oYWdlbi5kZT4KCgkqIGdqYXZhaC5jOiBEZWxldGUgQUNDX1ZJU0lCSUxJVFkgZGVmaW5lLgoJKiBqY2YuaDogQWRkIEFDQ19WSVNJQklMSVRZIGRlZmluZS4KCSogcGFyc2UueTogZmluYWw6IHJ1bGUgdGFnZ2VkIDx2YWx1ZT4uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBVc2UgQUNDX1ZJU0lCSUxJVFkgZGVmaW5lIGZvcgoJZGVmYXVsdCBwYWNrYWdlIGFjY2VzcyBjaGVjay4KCShsb2NhbF92YXJpYWJsZV9kZWNsYXJhdGlvbl9zdGF0ZW1lbnQpOiBVc2UgZmluYWw6IHJ1bGUuCgpNb24gSmFuIDE3IDExOjU4OjE3IDIwMDAgIEpvZXJnIEJydW5zbWFubiAgPGpvZXJnLmJydW5zbWFubkBmZXJudW5pLWhhZ2VuLmRlPgoKCSogcGFyc2UueSAoZm9ybWF0X3BhcmFtZXRlcjopOiBVc2UgZmluYWw6IHJ1bGUgaW5zdGVhZCBvZiBtb2RpZmllcnM6LgoJKGZpbmFsOik6IE5ldyBydWxlLgoKMjAwMC0wMS0xNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBBbGxvdyBub24tc3RhdGljIGZpbmFsIGZpZWxkcy4KCkZyaSBKYW4gMTQgMTg6MDM6NDEgMjAwMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChlbnVtIGpkZXBfY29kZSk6IE5ldyBlbnRyeSBgSkRFUF9BTk9OWU1PVVMnLgoJKiBwYXJzZS55IChwYXRjaF9hbm9ueW1vdXNfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX2Fub255bW91c19jbGFzcyk6IFJlZ2lzdGVyIGluY29tcGxldGUgdHlwZSB3aGVuIHRoZQogCWNsYXNzL2ludGVyZmFjZSB0byBleHRlbmRzL2ltcGxlbWVudCBpc24ndCBrbm93biB5ZXQuCgkocGFyc2VyX2NoZWNrX3N1cGVyX2ludGVyZmFjZSk6IFNpbXBsaWZ5IGFyZ3VtZW50IHRvIENMQVNTX0lOVEVSRkFDRS4KCSh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBUdW5lZCBlcnJvciBtZXNzYWdlLgoKRnJpIEphbiAxNCAwMDoxNDoyNCAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChGT1JfTE9PUF9QKTogUmVwbGFjZXMgSVNfRk9SX0xPT1BfUC4KCShBTk9OWU1PVVNfQ0xBU1NfUCk6IE5ldyBtYWNyby4KCShUWVBFX1NJR05BVFVSRSwgVFlQRV9KQ0YpOiBOZXcgbWFjcm9zLgoJKElOTkVSX0NMQVNTX1RZUEVfUCk6IEZpeGVkIHR5cG8gaW4gbGVhZGluZyBjb21tZW50LgoJKiBwYXJzZS55IChjcmVhdGVfY2xhc3MpOiBBZGRlZCBsZWFkaW5nIGFyZ3VtZW50LgoJKG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCwKIAljaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBMaWtld2lzZS4KCShjcmFmdF9jb25zdHJ1Y3Rvcik6IE5ldyBmdW5jdGlvbi4KCSh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBBZGRlZCBhcmd1bWVudCBpbiBwcm90b3R5cGUuCgkoY2xhc3NfZGVjbGFyYXRpb246KTogSW5zZXJ0ZWQgbGVhZGluZyBhcmd1bWVudC4KCShmb3JfYmVnaW46KTogVXNlIEZPUl9MT09QX1AuCgkoYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uKTogQ3JlYXRlIFdGTCBvZiB0aGUgYW5vbnltb3VzIGNsYXNzIHRvCiAJaW5zdGFudGlhdGUuIENhbGwgYnVpbGRfbmV3X2ludm9jYXRpb24uIEFkZGVkIGNvbW1lbnRzLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IEhhbmRsZSBwYXJhbWV0ZXIgYGFub255bW91cycgaW4KIAl2ZXJib3NlIG1vZGUgY2xhc3MgY3JlYXRpb24gYW5ub3VuY2UuCgkobGlua19uZXN0ZWRfY2xhc3NfdG9fZW5jbG9zaW5nKTogRXhjbHVkZSBhbm9ueW1vdXMgY2xhc3Nlcy4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBEb24ndCBzZXQgREVDTF9DT05URVhUIG9uCiAJYW5vbnltb3VzIGNsYXNzLCBldmVuIHRob3VnaCB0aGV5IGFwcGVhciB0byBoYXZlIGFuIGVuY2xvc2luZwogCWNvbnRleHQuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8KIAljaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24uCgkoY3JlYXRlX2Fub255bW91c19jbGFzcyk6IFNldCBBTk9OWU1PVVNfQ0xBU1NfUCB0byAxLgoJKGNyZWF0ZV9jbGFzcyk6IENhbGwgY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uIGFuZAogCW1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCB3aXRoIGV4dHJhIG5ldyBhcmd1bWVudC4gRG9uJ3QKIAlhZGQgcHJpdmF0ZSB0aGlzJDxuPiB0byBhbm9ueW1vdXMgY2xhc3Nlcy4KCShtZXRob2RfZGVjbGFyYXRvcik6IEluc2VydCBoaWRkZW4gdGhpcyQ8bj4gdG8gYW5vbnltb3VzIGNsYXNzCiAJY29uc3RydWN0b3JzLgoJKGphdmFfZml4X2NvbnN0cnVjdG9ycyk6IERlbGV0ZWQgY29kZSBjcmVhdGluZyBkZWZhdWx0CiAJY29uc3RydWN0b3IuIENhbGwgY3JhZnRfY29uc3RydWN0b3IgaW5zdGVhZC4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IFNldCBgc2F3X2NvbnN0cnVjdG9yJyB0byAxIGZvcgogCWFub255bW91cyBjbGFzc2VzLgoJKGZpeF9jb25zdHJ1Y3RvcnMpOiBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvIHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlci4KCSh2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIpOiBOZXcgbG9jYWwgYHNkZWNsJywgdXNlIGl0LiBTZWFyY2ggZm9yCiAJbWF0Y2hpbmcgY29uc3RydWN0b3IgKHBvc3NpYmx5IGZlYXR1cmluZyBhcmd1bWVudHMpIGluIHN1cGVyCiAJY2xhc3MuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBDcmFmdCBjb25zdHJ1Y3RvciBhY2NvcmRpbmcgdG8gYXJndW1lbnRzCiAJbGlzdCB3aGVuIGRlYWxpbmcgd2l0aCBhbm9ueW1vdXMgY2xhc3MgY29uc3RydWN0b3JzLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBQYXNzIGFyZ3VtZW50cyB0byBhbm9ueW1vdXMgY2xhc3Mgc3VwZXIKIAljb25zdHJ1Y3RvcnMuCgkoc2VhcmNoX2xvb3ApOiBVc2UgRk9SX0xPT1BfUC4KCShsYWJlbGVkX2Jsb2NrX2NvbnRhaW5zX2xvb3BfcCk6IExpa2V3aXNlLgoKV2VkIEphbiAxMiAwMDozODo0NyAyMDAwICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHNldF9zdXBlcl9pbmZvKTogU2V0IENMQVNTX1NUQVRJQyB3aGVuIGFwcHJvcHJpYXRlLgoJKGVuY2xvc2luZ19jb250ZXh0X3ApOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wpOiBIYW5kbGUgQ0xBU1NfU1RBVElDLgoJKG1heWJlX2xheW91dF9zdXBlcl9jbGFzcyk6IEV4dHJhIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0bwogCWRvX3Jlc29sdmVfY2xhc3MuCgkobGF5b3V0X2NsYXNzX21ldGhvZCk6IFVzZSBJRF9GSU5JVF9QLCBERUNMX0NMSU5JVF9QIGFuZAogCUlEX0lOSVRfUC4KCSogZGVjbC5jIChhY2Nlc3MwX2lkZW50aWZpZXJfbm9kZSk6IE5ldyBnbG9iYWwuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBhY2Nlc3MwX2lkZW50aWZpZXJfbm9kZSBpbml0aWFsaXplZC4KCShwdXNoZGVjbCk6IFNldCBERUNMX0NPTlRFWFQgb25seSBvbiBub24gdHlwZSBkZWNscy4KCSogZXhwci5jIChsb29rdXBfZmllbGQpOiBMb29rdXAgaW5uZXIgY2xhc3MgZmllbGRzIGluIGVuY2xvc2luZwogCWNvbnRleHRzLgoJKGV4cGFuZF9pbnZva2UpOiBVc2UgSURfSU5JVF9QLgoJKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogVXNlIERFQ0xfQ0xJTklUX1AuCgkqIGphdmEtdHJlZS5kZWYgKENMQVNTX0xJVEVSQUwpOiBOZXcgdHJlZSBjb2RlLgoJKiBqYXZhLXRyZWUuaCAoREVDTF9GVU5DVElPTl9BQ0NFU1NfREVDTCwKIAlERUNMX0ZVTkNUSU9OX0lOTkVSX0FDQ0VTUywgRklFTERfSU5ORVJfQUNDRVNTKTogTmV3IG1hY3Jvcy4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogTmV3IGZpZWxkIGBpbm5lcl9hY2Nlc3MnLgoJKGVuY2xvc2luZ19jb250ZXh0X3ApOiBQcm90b3R5cGVkLgoJKERFQ0xfSU5JVF9QLCBERUNMX0ZJTklUX1AsIERFQ0xfQ0xJTklUX1AsIElEX0lOSVRfUCwgSURfRklOSVRfUCwKIAlJRF9DTElOSVRfUCk6IE5ldyBtYWNyb3MuCgkoQ0xBU1NfU1RBVElDKTogTmV3IG1hY3JvLgoJKENMQVNTX0FDQ0VTUzBfR0VORVJBVEVEX1ApOiBOZXcgbWFjcm8uCgkoT1VURVJfRklFTERfQUNDRVNTX0lERU5USUZJRVJfUCwgSU5ORVJfQ0xBU1NfREVDTF9QLAogCVRPUExFVkVMX0NMQVNTX0RFQ0xfUCwgSU5ORVJfQ0xBU1NfVFlQRV9QLCBUT1BMRVZFTF9DTEFTU19UWVBFX1AsCiAJSU5ORVJfQ0xBU1NfUCk6IE5ldyBtYWNyb3MuCgkoREVDTF9JTk5FUl9DTEFTU19MSVNUKTogTmV3IG1hY3JvLgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6IEF2b2lkIHRoZSB1c2Ugb2YgQU5TSSBzdHJpbmcKIAljb25jYXRlbmF0aW9uLgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBiaW5vcDogQ2hhbmdlIHRoZSB0eXBlIG9mCiAJdGhlIHNoaWZ0IHZhbHVlIHRvIGludC4gRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKiBsZXguYyAoaW5zdF9pZCwgd3B2X2lkKTogSW5pdGlhbGl6ZS4KCSogbWFuZ2xlLmMgKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoKTogVGFrZSBgJCcgaW50byBhY2NvdW50LgoJKiBwYXJzZS5oIChEUkVDT1ZFUiwgUkVDT1ZFUik6IFRlcm1pbmF0ZSBwcm9wZXJseS4KCShJREVOVElGSUVSX0lOTkVSX0NMQVNTX09VVEVSX0ZJRUxEX0FDQ0VTUyk6IE5ldyBtYWNyby4KCSh0eXBlZGVmIHN0cnVjdCBfamRlcCk6IE5ldyBmaWVsZCBgZW5jbG9zaW5nJy4KCShKREVQX0VOQ0xPU0lORyk6IE5ldyBtYWNyby4KCShJU19DTElOSVQpOiBEZWxldGVkIChERUNMX0NMSU5JVF9QIHJlcGxhY2VzIGl0LikKCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGRzIGBtYXJrZXJfYmVnaW5uaW5nJywgYG1hcmtlZF9lbmQnLgoJKEdFVF9DUENfTElTVCwgQ1BDX0lOTkVSX1AsIEdFVF9DUEMsIEdFVF9DUENfVU4sIEdFVF9DUENfVU5fTU9ERSwKIAlHRVRfQ1BDX0RFQ0xfTk9ERSwgR0VUX0VOQ0xPU0lOR19DUEMsIEdFVF9ORVhUX0VOQ0xPU0lOR19DUEMsCiAJR0VUX0VOQ0xPU0lOR19DUENfQ09OVEVYVCk6IE5ldyBtYWNyb3MuCgkoUFVTSF9DUEMsIFBVU0hfRVJST1IsIFBPUF9DUEMpOiBOZXcgbWFjcm9zLgoJKGRvX3Jlc29sdmVfY2xhc3MpOiBBZGRlZCBleHRyYSBhcmd1bWVudCBpbiBwcm90b3R5cGUuCgkqIHBhcnNlLnkgKHJlc29sdmVfY2xhc3MpOiBBZGRlZCBleHRyYSBhcmd1bWVudCBpbiBwcm90b3R5cGUuCgkobWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKTogTGlrZXdpc2UuCgkobWF5YmVfdXNlX2FjY2Vzc19tZXRob2QsIGJ1aWxkX3dmbF93cmFwKTogTmV3IGZ1bmN0aW9ucy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzc2VzLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9jbGFzcyk6CiAJTGlrZXdpc2UuCgkoamF2YV9wYXJzZXJfY29udGV4dF9wdXNoX2luaXRpYWxpemVkX2ZpZWxkLAogCWphdmFfcGFyc2VyX2NvbnRleHRfc3VzcGVuZCwgamF2YV9wYXJzZXJfY29udGV4dF9yZXN1bWUpOgogCUxpa2V3aXNlLgoJKG1heWJlX21ha2VfbmVzdGVkX2NsYXNzX25hbWUsIG1ha2VfbmVzdGVkX2NsYXNzX25hbWUsCiAJc2V0X25lc3RlZF9jbGFzc19zaW1wbGVfbmFtZV92YWx1ZSwKIAlsaW5rX25lc3RlZF9jbGFzc190b19lbmNsb3NpbmcsIGZpbmRfYXNfaW5uZXJfY2xhc3MsCiAJZmluZF9hc19pbm5lcl9jbGFzc19kbywgY2hlY2tfaW5uZXJfY2xhc3NfcmVkZWZpbml0aW9uLAogCWJ1aWxkX3RoaXNuX2Fzc2lnbiwgYnVpbGRfY3VycmVudF90aGlzbiwgYnVpbGRfYWNjZXNzX3RvX3RoaXNuLAogCW1heWJlX2J1aWxkX3RoaXNuX2FjY2Vzc19tZXRob2QsIGJ1aWxkX291dGVyX2ZpZWxkX2FjY2VzcywKIAlidWlsZF9vdXRlcl9maWVsZF9hY2Nlc3NfbWV0aG9kcywgYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzX2V4cHIsCiAJYnVpbGRfb3V0ZXJfbWV0aG9kX2FjY2Vzc19tZXRob2QsIGJ1aWxkX25ld19hY2Nlc3NfaWQsCiAJYnVpbGRfb3V0ZXJfZmllbGRfYWNjZXNzX21ldGhvZCwgb3V0ZXJfZmllbGRfYWNjZXNzX3AsCiAJb3V0ZXJfZmllbGRfZXhwYW5kZWRfYWNjZXNzX3AsIG91dGVyX2ZpZWxkX2FjY2Vzc19maXgsCiAJYnVpbGRfaW5jb21wbGV0ZV9jbGFzc19yZWYsIHBhdGNoX2luY29tcGxldGVfY2xhc3NfcmVmLAogCWNyZWF0ZV9hbm9ueW1vdXNfY2xhc3MpOiBMaWtld2lzZS4KCShpbnN0X2lkLCB3cHZfaWQpOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZXMuCgkoc3luY2hyb25pemVkOik6IE5ldyBydWxlLCB0YWdnZWQgPG5vZGU+LgoJKHR5cGVfZGVjbGFyYXRpb246KTogTm8gbG9uZ2VyIHRhZ2dlZCA8bm9kZT4uIENhbGwgUE9QX0NQQyBpbiBzdWIKIAlydWxlcy4KCShhbm9ueW1vdXNfY2xhc3NfY3JlYXRpb246KTogTmV3IHJ1bGUsIHRhZ2dlZCA8bm9kZT4uCgkoTkVXX1RLKTogVGFnZ2VkIDxub2RlPi4KCSh0eXBlX2xpdGVyYWxzLCBhcnJheV90eXBlX2xpdGVyYWwpOiBOZXcgcnVsZXMsIHRhZ2dlZCA8bm9kZT4uCgkoY2xhc3NfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBhY3Rpb24gd2hlbiByZWR1Y2luZyBieSBjbGFzc19ib2R5OgoJKGNsYXNzX2JvZHk6KTogU2V0IERFQ0xfRU5EX1NPVVJDRV9MSU5FIGFuZCBydWxlJ3MgcmV0dXJuZWQgdmFsdWUKIAl1c2luZyBHRVRfQ1BDIGluIHN1Yi1ydWxlcy4KCShjbGFzc19tZW1iZXJfZGVjbGFyYXRpb24pOiBIYW5kbGUgaW5uZXIgY2xhc3Nlcy4KCShtZXRob2RfZGVjbGFyYXRpb24pOiBXaGVuIHJlZHVjaW5nIG1ldGhvZF9oZWFkZXI6LCByZXNldAogCWN1cnJlbnRfZnVuY3Rpb25fZGVjbCB3aGVuIGFwcHJvcHJpYXRlLgoJKG1ldGhvZF9kZWNsYXJhdG9yOik6IFNldCB0aGUgbnVtYmVyIG9mIGZvcm1hbCBwYXJhbWV0ZXIgdG8gMCBmb3IKIAltZXRob2QgZGVjbGFyZWQgd2l0aG91dCBhcmd1bWVudHMuCgkoY29uc3RydWN0b3JfZGVjbGFyYXRvcjopOiBMaWtld2lzZS4KCShzdGF0aWNfaW5pdGlhbGl6ZXI6KTogTGlzdCBvZiBlbGVtZW50cyBrZXB0IGluIGEgbGlzdC4KCShzdGF0aWM6KTogUnVsZSBtb2RpZmllcnM6IHJlcGxhY2VzIE1PRElGSUVSX1RLLiBFbmZvcmNlIGNvcnJlY3QKIAl1c2Ugb2YgdGhlIGtleXdvcmQgYHN0YXRpYycgZm9yIHR5cGUgZGVjbGFyYXRpb25zLgoJKGJsb2NrX3N0YXRlbWVudDopOiBIYW5kbGUgaW5uZXIgY2xhc3MgZGVjbGFyYXRpb25zLgoJKHByaW1hcnlfbm9fbmV3X2FycmF5Oik6IFVzZSB0eXBlX2xpdGVyYWxzOi4gRml4ZWQgY29tbWVudC4gSGFuZGxlCiAJdHlwZSBxdWFsaWZpZWQgYHRoaXMnLgoJKGNsYXNzX2luc3RhbmNlX2NyZWF0aW9uX2V4cHJlc3Npb24pOiBVc2UgYW5vbnltb3VzX2NsYXNzX2NyZWF0aW9uOgoJdG8gaGFuZGxlIGlubmVyIGNsYXNzIGluc3RhbmNlcyBjcmVhdGlvbi4gSGFuZGxlIHF1YWxpZmllZCBgbmV3Jy4KCShzb21ldGhpbmdfZG90X25ldyk6IEFkZGVkIGFwcHJvcHJpYXRlIGFjdGlvbnMuCgkoY3JlYXRlX25ld19wYXJzZXJfY29udGV4dCk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX3B1c2hfcGFyc2VyX2NvbnRleHQsIGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwsCiAJamF2YV9wYXJzZXJfY29udGV4dF9zdXNwZW5kKTogVXNlIGNyZWF0ZV9uZXdfcGFyc2VyX2NvbnRleHQuCgkoY2hlY2tfbW9kaWZpZXJzKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogSGFuZGxlIGludGVyY2xhc3Nlcy4KCShhZGRfc3VwZXJpbnRlcmZhY2VzKTogRml4ZWQgY29tbWVudC4KCShjcmVhdGVfaW50ZXJmYWNlKTogQnVpbGQgcXVhbGlmaWVkIG5hbWUgZnJvbSB0aGUgcmF3X25hbWUgaW5zdGVhZAogCW9mIGl0cyBtYXRjaGluZyBXRkwuIFB1c2ggdGhlIGluaXRpYWxpemVkIGZpZWxkcyBsaXN0LiByYXdfbmFtZSBhZGRlZAogCWFzIGFuIGV4dHJhIGFyZ3VtZW50IHRvIG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbC4KCShjcmVhdGVfY2xhc3MpOiBCdWlsZCBxdWFsaWZpZWQgbmFtZSBmcm9tIHRoZSByYXdfbmFtZSBpbnN0ZWFkIG9mCiAJaXRzIG1hdGNoaW5nIFdGTC4gUmVtb3ZlZCBhc3NpZ25tZW50IHRvCWN1cnJlbnRfcGFyc2VkX2NsYXNzX3VuLgoJQ2FsbCBQVVNIX0VSUk9SIGJlZm9yZSByZXR1cm5pbmcgYW4gZXJyb3IuIFN1c3BlbmQgdGhlIGN1cnJlbnQKIAlwYXJzZXIgY29udGV4dCB3aGVuIHByb2Nlc3NpbmcgYW4gaW5uZXIgY2xhc3MuIFB1c2ggdGhlCiAJaW5pdGlhbGl6ZWQgZmllbGRzIGxpc3QuIHJhd19uYW1lIGFkZGVkIGFzIGFuIGV4dHJhIGFyZ3VtZW50IHRvCiAJbWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLiBBZGQgdGhlIHByaXZhdGUgdGhpcyQ8bj4KIAlmaWVsZC4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3JfcCk6IFVzZSBHRVRfQ1BDIHdoZW4gY2FsbGluZyBmaW5kX2ZpZWxkLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IEdldCB0aGUgY2xhc3MgdHlwZSBmcm9tIEdFVF9DUEMgYW5kIGhhbmRsZQogCXByZXZpb3VzIGVycm9ycy4gIEFkZGVkIGNvZGUgdG8gaGFuZGxlIHRoZSBjcmVhdGlvbiBvZiBzdGF0aWMKIAlmaWVsZHMgaW4gaW5uZXIgY2xhc3Nlcy4gSW5pdGlhbGl6ZWQgZmllbGRzIGluaXRpYWxpemF0aW9uCiAJc3RhdGVtZW50cyBrZXB0IGluIGEgbGlzdCBvZiBsaXN0cy4KCShtYXliZV9nZW5lcmF0ZV9maW5pdCk6IEluaXRpYWxpemVkIGZpZWxkcyBpbml0aWFsaXphdGlvbgogCXN0YXRlbWVudHMga2VwdCBpbiBhIGxpc3Qgb2YgbGlzdHMuIFVzZSBHRVRfQ1BDLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6IExpa2V3aXNlLgoJKG1ldGhvZF9oZWFkZXIpOiBVc2UgR0VUX0NQQyBhbmQgR0VUX0NQQ19VTi4KCShwYXJzZXJfcXVhbGlmaWVkX2NsYXNzbmFtZSk6IEhhbmRsZSBpbm5lciBjbGFzc2VzLgoJKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IFNldCBKREVQX0VOQ0xPU0lORyB1c2luZyBHRVRfQ1BDLgoJKGphdmFfZml4X2NvbnN0cnVjdG9ycyk6IEhpZGUgcG9pbnRlciB0byBlbmNsb3NpbmcgY29udGV4dAogCWluc3RhbmNlIGluIGNvbnN0cnVjdG9yIGxpc3Qgd2hlbiBkZWFsaW5nIHdpdGggaW5uZXIgY2xhc3Nlcy4KCShqZGVwX3Jlc29sdmVfY2xhc3MpOiBDYWxsIHJlc29sdmVfY2xhc3Mgd2l0aCBleHRyYSBmaXJzdCBhcmd1bWVudAogCUpERVBfRU5DTE9TSU5HLgoJKHJlc29sdmVfY2xhc3MpOiBBZGQgZW5jbG9zaW5nIGNvbnRleHQgYXMgYSBmaXJzdCBleHRyYSBhcmd1bWVudAogCXRvIGRvX3Jlc29sdmVfY2xhc3MuCgkoZG9fcmVzb2x2ZV9jbGFzcyk6IENhbGwgZmluZF9hc19pbm5lcl9jbGFzcy4gSGFuZGxlIFdGTHMKIAlwcm9wZXJseS4KCShyZXNvbHZlX25vX2xheW91dCk6IEV4dHJhIGFyZ3VtZW50IGFkZGVkIHRvIHJlc29sdmVfY2xhc3MKIAlpbnZvY2F0aW9uLgoJKHJlc2V0X21ldGhvZF9uYW1lKTogVXNlIERFQ0xfQ0xJTklUX1AsIERFQ0xfRklOSVRfUC4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogVXNlIEdFVF9DUENfVU4uCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zKTogVXNlIERFQ0xfQ0xJTklUX1AuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogSGFuZGxlIHN0YXRpYyBtZXRob2QgZGVjbGFyZWQgaW4KIAlpbm5lciBjbGFzc2VzIGJ5IGFuIGVycm9yLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogVXNlIERFQ0xfQ0xJTklUX1AuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogQWxzbyBzZXQgREVDTF9NQVhfTE9DQUxTLgoJKGNyZWF0ZV9hcnRpZmljaWFsX21ldGhvZCk6IENhbGwgamF2YV9wYXJzZXJfY29udGV4dF9zYXZlX2dsb2JhbAogCWFuZCBqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsIGluc3RlYWQgb2Ygc2F2aW5nL3Jlc3RvcmluZwogCXRoZSBjb250ZXh0IGJ5IGhhbmQuCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogSW1wcm92ZWQgdmVyYm9zZSBtb2RlIG1lc3NhZ2UuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gVXNlCiAJREVDTF9DTElOSVRfUC4KCShmaXhfY29uc3RydWN0b3JzKTogQWRkZWQgYXNzaWdubWVudCB0byB0aGlzJDxuPiBpZiBuZWNlc3NhcnkuCgkoamF2YV9leHBhbmRfY2xhc3Nlcyk6IENhbGwgamF2YV9jb21wbGV0ZV9leHBhbmRfY2xhc3NlcyBpbnN0ZWFkCiAJb2YgamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcy4KCShtYWtlX3F1YWxpZmllZF9wcmltYXJ5KTogU2ltcGxpZmllZC4KCShtZXJnZV9xdWFsaWZpZWRfbmFtZSk6IE9wdGltaXplZCBmb3IgbWlzc2luZyBsZWZ0IG9yIHJpZ2h0IHBhcnRzLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogSGFuZGxlIGFjY2VzcyB0byBvdXRlciBjbGFzcyBmaWVsZHMgZnJvbQogCWludGVyY2xhc3Nlcy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBOZXcgbWFjcm8KIAlSRVNUT1JFX1RISVNfQU5EX0NVUlJFTlRfQ0xBU1MsIHVzZWQuIEhhbmRsZSBjcmVhdGlvbiBvZiBpbm5lcgogCWNsYXNzZXMuIFJlcG9ydCBlcnJvciBvbiBub24gYXBwcm9wcmlhdGUgcXVhbGlmaWNhdGlvbiBvZgogCWBuZXcnLiBIYW5kbGUgcXVhbGlmaWVkIGB0aGlzJy4KCShub3RfYWNjZXNzaWJsZV9wKTogQWxsb3cgYWNjZXNzIHRvIG91dGVyIGNsYXNzIHByaXZhdGUgZmllbGRzIGZyb20KIAlpbm5lciBjbGFzc2VzLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogSGFuZGxlIG1ldGhvZCBpbnZvY2F0aW9ucyB0aHJvdWdoCiAJYWNjZXNzIG1ldGhvZHMgYW5kIGlubmVyIGNsYXNzIGNvbnN0cnVjdG9yIGludm9jYXRpb25zLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IFNlYXJjaCBlbmNsb3NpbmcKIAljb250ZXh0cyBvZiBhbiBpbm5lciBjbGFzcy4KCShzZWFyY2hfYXBwbGljYWJsZV9tZXRob2RzX2xpc3QpOiBGaXhlZCB0eXBvLgoJKGFyZ3VtZW50X3R5cGVzX2NvbnZlcnRpYmxlKTogSGFuZGxlIGlubmVyIGNsYXNzIGNvbnN0cnVjdG9ycycKIAloaWRkZW4gb3V0ZXIgY29udGV4dCByZWZlcmVuY2UgYXJndW1lbnQuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IEhhbmRsZSBxdWFsaWZpZWQgYHRoaXMnLgoJKGphdmFfY29tcGxldGVfbGhzKTogSGFuZGxlIHVzZSBvZiBmaWVsZCBhY2Nlc3NlZCB0aHJvdWdoCiAJYXJ0aWZpY2lhbCBhY2Nlc3MgbWV0aG9kcyBpbiB2YXJpb3VzIGNhc2VzIG9mIGFzc2lnbm1lbnRzLiBIYW5kbGUKIAlDTEFTU19MSVRFUkFMIG5vZGUuCgkoY2hlY2tfZmluYWxfYXNzaWdubWVudCk6IFVzZSBERUNMX0NMSU5JVF9QLgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IEhhbmRsZSB0aGUgZGVzdGluYXRpb24gYmVpbmcgYW4KIAllbmNsb3NpbmcgY29udGV4dCBvZiB0aGUgc291cmNlLgoJKHBhdGNoX3VuYXJ5b3ApOiBIYW5kbGUgdXNlIG9mIGZpZWxkIGFjY2Vzc2VkIHRocm91Z2ggYXJ0aWZpY2lhbAogCWFjY2VzcyBtZXRob2RzLgoJKHBhdGNoX3JldHVybik6IFVzZSBERUNMX0NMSU5JVF9QLgoJKHBhdGNoX3Rocm93X3N0YXRlbWVudCk6IFVzZSBERUNMX0NMSU5JVF9QLgoJKGNoZWNrX3Rocm93bl9leGNlcHRpb25zKTogVXNlIERFQ0xfRklOSVRfUCBhbmQgREVDTF9JTklUX1AuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFVzZSBJRF9DTElOSVRfUCBhbmQKIAlJRF9JTklUX1AuCgoyMDAwLTAxLTE2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uKTogT25seSB1c2UKCVN0cmluZ0J1ZmZlcihTdHJpbmcpIHNob3J0Y3V0IGlmIFN0cmluZyBhcmcgaXMgY29uc3RhbnQuCgpXZWQgSmFuIDEyIDIwOjIwOjExIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogYmlub3A6IENoYW5nZSB0aGUgdHlwZSBvZgoJdGhlIHNoaWZ0IHZhbHVlIHRvIGludC4gRml4ZWQgdHlwbyBpbiBjb21tZW50LgoKMjAwMC0wMS0xMSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBqY2YtcGF0aC5jOiBEZWxldGUgUEFUSF9TRVBBUkFUT1IgYW5kIERJUl9TRVBBUkFUT1IgbWFjcm9zLgoJKiBqY2Ytd3JpdGUuYzogTGlrZXdpc2UuCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlLgoKMjAwMC0wMS0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBFbWl0IGludm9rZWludGVyZmFjZQoJYnl0ZWNvZGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgoKMjAwMC0wMS0wOSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGpjZi1kdW1wLCBnY2poKTogTW92ZSAuLi9lcnJvcnMubyBiZWZvcmUgJChMSUJTKS4KClRodSBKYW4gIDYgMTY6MzE6MjggMjAwMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IFN3aXRjaCB0byBwZXJtYW5lbnQgb2JzdGFjawoJYmVmb3JlIGJ1aWxkaW5nIGNvbnN0YW50IGFycmF5IGRlY2wuCgpUaHUgSmFuICA2IDAwOjU0OjEwIDIwMDAgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsKTogRml4ZWQgaW5kZW50YXRpb24gaW4KCW1ldGhvZCBpbnZvY2F0aW9uIGFuZCB0eXBvIGluIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBDT05EX0VYUFIgY2FuIGJlIHBhcnQgb2YgYSBiaW5vcC4gSXNzdWUKIAl0aGUgYXBwcm9wcmlhdGUgTk9URV9QT1AuCgkqIHBhcnNlLnkgKHBhdGNoX2Jpbm9wKTogU2hpZnQgdmFsdWUgbWFzayB0byBmZWF0dXJlIHRoZSByaWdodAogCXR5cGUuCgoxOTk5LTEyLTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChhc3N1bWVfY29tcGlsZWQsIGFzc3VtZV9jb21waWxlZF9ub2RlKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlLgoJKGFkZF9hc3N1bWVfY29tcGlsZWQpOiBVc2UgeG1hbGxvYy94c3RyZHVwLCBub3QgbWFsbG9jL3N0cmR1cC4KCgkqIGpjZi1kdW1wLmMgKEFSUkFZX05FV19OVU0pOiBDYXN0IGxvbmcgdG8gaW50IGluIHN3aXRjaC4KCgkqIGp2Z2VubWFpbi5jICh1c2FnZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoKCSogcGFyc2UuaCAoT0JTT0xFVEVfTU9ESUZJRVJfV0FSTklORyk6IFJlbmFtZSBwYXJhbWV0ZXIgYG1vZGlmaWVyJwoJdG8gYF9fbW9kaWZpZXInIHRvIGF2b2lkIHN0cmluZ2lmeWluZyBpdC4KCgkqIHBhcnNlLnkgKHZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSk6IERvbid0IGNhbGwgYSB2YXJpYWRpYwoJZnVuY3Rpb24gd2l0aCBhIG5vbi1saXRlcmFsIGZvcm1hdCBzdHJpbmcuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogTW92ZSB1bnJlYWNoYWJsZSBjb2RlIGluc2lkZQoJYGNvbnRpbnVlJyBzdGF0ZW1lbnQuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBDYWxsIHhzdHJkdXAsIG5vdCBzdHJkdXAuCgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogQXZvaWQgdGhlIHVzZSBvZiBBTlNJIHN0cmluZwoJY29uY2F0ZW5hdGlvbi4KCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogTGlrZXdpc2UuCgoJKiBqdi1zY2FuLmMgKG1haW4pOiBMaWtld2lzZS4KCjE5OTktMTItMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHBhcnNlLmggKEFCU1RSQUNUX0NIRUNLLCBKQ09OU1RSVUNUT1JfQ0hFQ0ssCglFUlJPUl9DQU5UX0NPTlZFUlRfVE9fQk9PTEVBTiwgRVJST1JfQ0FOVF9DT05WRVJUX1RPX05VTUVSSUMsCglFUlJPUl9DQVNUX05FRURFRF9UT19JTlRFR1JBTCk6IEF2b2lkIHRoZSB1c2Ugb2YgQU5TSSBzdHJpbmcKCWNvbmNhdGVuYXRpb24uCgoJKiBwYXJzZS55IChzeW5jaHJvbml6ZWQsIHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvciwKCWNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbiwgY3JlYXRlX2ludGVyZmFjZSwgY3JlYXRlX2NsYXNzLAoJbWV0aG9kX2hlYWRlciwgZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbiwKCWNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSwgbWV0aG9kX2RlY2xhcmF0b3IsCgljb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzLCBjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMsCglqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcywgY2hlY2tfdGhyb3dzX2NsYXVzZXMsCglqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMsIHJlYWRfaW1wb3J0X2RpciwKCWNoZWNrX3BrZ19jbGFzc19hY2Nlc3MsIGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzLCBmaXhfY29uc3RydWN0b3JzLAoJY3V0X2lkZW50aWZpZXJfaW5fcXVhbGlmaWVkLCByZXNvbHZlX2V4cHJlc3Npb25fbmFtZSwKCXJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSwgcGF0Y2hfbWV0aG9kX2ludm9jYXRpb24sCglqYXZhX2NvbXBsZXRlX2xocywgcGF0Y2hfYXNzaWdubWVudCwgdHJ5X2J1aWx0aW5fYXNzaWduY29udiwKCXBhdGNoX2Jpbm9wLCBwYXRjaF9hcnJheV9yZWYsIHBhdGNoX25ld2FycmF5LCBidWlsZF9sYWJlbGVkX2Jsb2NrLAoJcGF0Y2hfZXhpdF9leHByLCBwYXRjaF9leGl0X2V4cHIsIHBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQsCglwYXRjaF90cnlfc3RhdGVtZW50LCBwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50LAoJcGF0Y2hfdGhyb3dfc3RhdGVtZW50LCBjaGVja190aHJvd25fZXhjZXB0aW9ucywKCXBhdGNoX2NvbmRpdGlvbmFsX2V4cHIpOiBMaWtld2lzZS4KCkZyaSBEZWMgMjQgMDA6MjU6MjkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTElCREVQUyk6IEFkZGVkIGdjYydzIGVycm9ycy5vCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCk6KTogTGluayB3aXRoIGdjYydzIGVycm9ycy5vCgkoLi4vZ2NqaCQoZXhlZXh0KTopOiBMaWtld2lzZS4KCSogZXhwci5jIChleHBhbmRfamF2YV9ORVcpOiBMYXlvdXQgdGhlIGVudGlyZSB0YXJnZXQgdHlwZSBpbnN0ZWFkIG9mCiAJbGF5aW5nIG91dCBpdHMgbWV0aG9kcyBvbmx5LgoJKGxvb2t1cF9maWVsZCk6IExheW91dCB0aGUgY2xhc3MgYWZ0ZXIgaGF2aW5nIGxvYWRlZCBpdC4KCSogamF2YS10cmVlLmggKGphdmFfZGVidWdfY29udGV4dCk6IERlY2xhcmVkLgoJKiBqY2YtaW8uYyAodG9wbGV2LmgpOiBJbmNsdWRlZC4KCShmaW5kX2NsYXNzKTogUmVtb3ZlZCBhc3NpZ25tZW50IHRvIGpjZidzIG91dG9mc3luY2gKIAlmaWVsZC4gRm9yY2Ugc291cmNlIGZpbGUgdG8gYmUgcmVhZCBpZiBuZXdlciB0aGFuIGl0cyBtYXRjaGluZwogCWNsYXNzIGZpbGUuIFR3ZWFrZWQgZGVidWcgbWVzc2FnZXMuCgkqIGpjZi1wYXJzZS5jIChqY2Zfb3V0X29mX3N5bmNoKTogRGVsZXRlZC4KCShyZWFkX2NsYXNzKTogQ2FsbCB0byBqY2Zfb3V0X29mX3N5bmNoIHJlbW92ZWQuCgkqIGpjZi5oICh0eXBlZGVmIHN0cnVjdCBKQ0YpOiBGaWVsZCBgb3V0b2ZzeW5jaCcgZGVsZXRlZC4KCShqY2Zfb3V0X29mX3N5bmNoKTogUHJvdG90eXBlIGRlbGV0ZWQuCgkqIHBhcnNlLmggKHN0cnVjdCBwYXJzZXJfY3R4dCk6IGBtaW51c19zZWVuJywgYGphdmFfZXJyb3JfZmxhZycsCiAJYGRlcHJlY2F0ZWQnIGFuZCBgY2xhc3NfZXJyJzogaW50ZWdlciB0dXJuZWQgaW50byBiaXQgZmllbGRzLgoJTmV3IGJpdCBmaWVsZHMgYHNhdmVkX2RhdGFfY3R4JyBhbmQgYHNhdmVkX2RhdGEnLiBGaXhlZCBjb21tZW50cy4KCSogcGFyc2UueSAocGFja2FnZV9saXN0KTogTmV3IGdsb2JhbC4KCShwYWNrYWdlX2RlY2xhcmF0aW9uOik6IFJlY29yZCBuZXdseSBwYXJzZWQgcGFja2FnZSBuYW1lLgoJKGV4dHJhX2N0eHBfcHVzaGVkX3ApOiBTdGF0aWMgZ2xvYmFsIGRlbGV0ZWQuCgkoamF2YV9wYXJzZXJfY29udGV4dF9zYXZlX2dsb2JhbCk6IENyZWF0ZSBidWZmZXIgY29udGV4dCBmb3IgdGhlCiAJcHVycG9zZSBvZiBzYXZpbmcgZ2xvYmFscywgaWYgbmVjZXNzYXJ5LgoJKGphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwpOiBQb3AgY29udGV4dCBwdXNoZWQgZm9yIHRoZQogCXB1cnBvc2Ugb2Ygc2F2aW5nIGdsb2JhbHMsIGlmIG5lY2Vzc2FyeS4KCShqYXZhX2RlYnVnX2NvbnRleHRfZG8pOiBOZXcgcHJvdG90eXBlIGFuZCBmdW5jdGlvbi4KCShqYXZhX2RlYnVnX2NvbnRleHQpOiBMaWtld2lzZS4KCShkb19yZXNvbHZlX2NsYXNzKTogVXNlIGFscmVhZHkgcGFyc2VkIHBhY2thZ2UgbmFtZXMgdG8gcXVhbGlmeQogCWFuZCBsb29rdXAgY2xhc3MgY2FuZGlkYXRlLgoJKGphdmFfcHJlX2V4cGFuZF9jbGluaXQpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGxvY2FsIHZhcmlhYmxlLgoKMTk5OS0xMi0xNyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBQcmludCAiOjoiIGluIEpBcnJheTw+LiAgVGhpcwoJZml4ZXMgUFIgZ2NqLzExOS4KCShwcm9jZXNzX2ZpbGUpOiBVc2UgYFxuXCcgYXQgZW5kIG9mIGVhY2ggbGluZSBpbiBzdHJpbmcuCgpUaHUgRGVjIDE2IDAwOjA5OjQ1IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogTGF5b3V0IHRoZSBsb2FkZWQgY2xhc3MgYmVmb3JlCiAJYXR0ZW1wdGluZyB0byB1c2UgaXQuCgkoZXhwYW5kX2phdmFfZmllbGRfb3ApOiBBbGxvdyBmaW5hbCBmaWVsZCBhc3NpZ25tZW50cyB0byB0YWtlCiAJcGxhY2UgaW4gJGZpbml0JC4KCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlIGlmIGV4cHIgaXMgbnVsbC4KCjE5OTktMTItMTQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoY2xhc3NfZGVwdGgpOiBSZXR1cm4gLTEgaWYgdGhlIGNsYXNzIGRvZXNuJ3QgbG9hZAoJcHJvcGVybHkuCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IENoZWNrIGZvciBlcnJvcnMgZHVyaW5nIGRlcHRoCgljb21wdXRhdGlvbiBhbmQgcmV0dXJuIDAgYWNjb3JkaW5nbHkuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6IENhbGwgamF2YV9maXhfY29uc3RydWN0b3JzIHRvCgljcmVhdGUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMgYW5kIGFkZCBhbiBvdGhlciBlcnJvciBjaGVjay4KCSogcGFyc2UuaCAoamF2YV9maXhfY29uc3RydWN0b3JzKTogUHJvdG90eXBlZC4KCSogcGFyc2UueSAoamF2YV9wcmVfZXhwYW5kX2NsaW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3N1cGVyX2ludm9jYXRpb24pOiBSZS1wcm90b3R5cGVkIHRvIGZlYXR1cmUgb25lIGFyZ3VtZW50LgoJKGphdmFfY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlKTogRGlyZWN0bHkgdXNlIGBjdXJyZW50Jy4KCShqYXZhX2ZpeF9jb25zdHJ1Y3RvcnMpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBEb24ndCBjcmVhdGUgZGVmYXVsdCBjb25zdHJ1Y3RvcnMKCWhlcmUsIGJ1dCBhYm9ydCBpZiBub25lIHdlcmUgZm91bmQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IFByZS1wcm9jZXNzIDxjbGluaXQ+IGNhbGxpbmcKCWphdmFfcHJlX2V4cGFuZF9jbGluaXQuCgkoamF2YV9wcmVfZXhwYW5kX2NsaW5pdCk6IE5ldyBmdW5jdGlvbi4KCShmaXhfY29uc3RydWN0b3JzKTogYnVpbGRfc3VwZXJfaW52b2NhdGlvbiBpbnZva2VkIHdpdGggdGhlCgljdXJyZW50IG1ldGhvZCBkZWNsYXJhdGlvbiBhcyBhbiBhcmd1bWVudC4KCShidWlsZF9zdXBlcl9pbnZvY2F0aW9uKTogVXNlIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9jZXNzZWQgbWV0aG9kCglkZWNsIGFyZ3VtZW50IGluc3RlYWQgb2YgY3VycmVudF9jbGFzcy4KCSogdHlwZWNrLmMgKGxvb2t1cF9qYXZhX21ldGhvZCk6IFRha2UgV0ZMcyBpbiBtZXRob2QgbmFtZXMgaW50bwoJYWNjb3VudC4KClR1ZSBEZWMgMTQgMTQ6MjA6MTYgMTk5OSAgUGVyIEJvdGhuZXIgIDxwZXJAYm90aG5lci5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucyB0byBrZWVwCglwcml2YXRlIG1ldGhvZHMgaW4gdGhlIG1ldGhvZCBhcnJheS4KCjE5OTktMTItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogVGFrZSBpbnRvIGFjY291bnQgYm90aCB0eXBlcyBvZgoJYHRocm93J3Mgd2hlbiBjaGVja2luZyBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCgpGcmkgRGVjIDEwIDIxOjUzOjQ1IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiBGb3JjZSBjb252ZXJ0aW9uIG9mIGFycmF5CglkaW1lbnNpb25zIHRvIGludF90eXBlX25vZGUsIHRoYXQncyB3aGF0IHJ1bnRpbWUncyBBQkkgZXhwZWN0cy4KCkZyaSBEZWMgMTAgMTY6MTM6NDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChFWFBSX1dGTF9RVUFMSUZJQ0FUSU9OKTogVGVtcG9yYXJ5IHVzZXMgdGhlIHRoaXJkCiAJb3BlcmFuZCBvZiBhIFdGTCwgdW50aWwgdGhlIEphdmEgZnJvbnQtZW5kIGdldHMgZml4ZWQgd2l0aCByZWdhcmQKIAl0byBNYXJrIE1pdGNoZWxsJ3MgZ2NjL3RyZWUuaCBwYXRjaCAoMTk5OS0xMi0wNC4pCgoxOTk5LTEyLTEwICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmggKEJVSUxEX1RIUk9XKTogQWRkIHN1cHBvcnQgZm9yIHNqbGotZXhjZXB0aW9ucy4KCWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgX0p2X1NqbGpfVGhyb3cuCglleHByLmMgKGJ1aWxkX2phdmFfYXRocm93KTogQWRkIHN1cHBvcnQgZm9yIHNqbGotZXhjZXB0aW9ucy4KCWphdmEtdHJlZS5oOiBEaXR0by4KCWpjZi13cml0ZS5jOiBEaXR0by4KCldlZCBEZWMgIDggMTU6MzM6MjYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IFN3aXRjaCB0byBwZXJtYW5lbnQgb2JzdGFjawoJYmVmb3JlIGNhbGxpbmcgZXhwYW5kX2VoX3JlZ2lvbl9zdGFydCBhbmQgZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaC4KCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9qYXZhX2hhbmRsZXIpOiBTd2l0Y2ggdG8gcGVybWFuZW50CglvYnN0YWNrIGJlZm9yZSBjYWxsaW5nIGV4cGFuZF9laF9yZWdpb25fc3RhcnQuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBTd2l0Y2ggdG8gcGVybWFuZW50IG9ic3RhY2sgYmVmb3JlCgljYWxsaW5nIGV4cGFuZF9zdGFydF9hbGxfY2F0Y2guCgoxOTk5LTEyLTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1hcmsgdGhyb3dfbm9kZSBhcyBhIG5vcmV0dXJuCglmdW5jdGlvbiB3aXRoIHNpZGUgZWZmZWN0cy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1hcmsgYWxsIG1lbW9yeSBhbGxvY2F0aW5nIERFQ0xzIHdpdGgKCURFQ0xfSVNfTUFMTE9DLgoKV2VkIERlYyAgMSAwNDoyNTowNiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2phdmFfaGFuZGxlcik6IENhbGwKCWV4cGFuZF9yZXN1bWVfYWZ0ZXJfY2F0Y2ggYW5kIGVuZF9jYXRjaF9oYW5kbGVyLgoKVHVlIE5vdiAzMCAxMjozNjoxNSAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IENyZWF0ZSBuZXcgcmV0dXJuIGxhYmVsCgljaGFpbiBpZiBub24gZXhpc3RhbnQgKGRvbid0IHJlbHkgb24gdGhlIHZlcmlmaWVkIHN0YXRlIG9mIHRoZSBqc3IKCXRhcmdldC4pCgpUdWUgTm92IDMwIDEyOjI4OjM0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogRml4ZWQgaW5kZW50YXRpb24gZm9yCglDT01QT1VORF9FWFBSIGFuZCBGSVhfVFJVTkNfRVhQUiBjYXNlcy4KCgkqIHBhcnNlLnkgKHBhdGNoX2Fzc2lnbm1lbnQpOiBSZW1vdmVkIGJvZ3VzIGZpbmFsIGNsYXNzIHRlc3Qgb24KCWxocyB3aGVuIGNoZWNraW5nIG9uIHdoZXRoZXIgdG8gZW1pdCBhbiBBcnJheVN0b3JlRXhjZXB0aW9uIHJ1bnRpbWUKCWNoZWNrLgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2FycmF5c3RvcmUpOiBMaWtld2lzZS4KCjE5OTktMTEtMjggQW50aG9ueSBHcmVlbiA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6IFJldXNlIHNpbmdsZSBzbG90IGRlY2xzIHdoZW4KCSAgYXBwcm9wcmlhdGUuCgpXZWQgTm92IDI0IDE3OjMzOjI2IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKHNhd19qYXZhX3NvdXJjZSk6IEdsb2JhbCB2YXJpYWJsZSByZW1vdmVkLgoJKHJlYWRfY2xhc3MpOiBEb24ndCB1c2UgYHNhd19qYXZhX3NvdXJjZScuIEFkZGVkIGV4dHJhIGJyYWNlcy4KCSh5eXBhcnNlKTogQ29kZSBzZXR0aW5nIGBzYXdfamF2YV9zb3VyY2UnIHJlbW92ZWQuCgoxOTk5LTExLTI0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZXhjZXB0LmMgKGVtaXRfaGFuZGxlcnMpOiBaZXJvIGNhdGNoX2NsYXVzZXMgYWZ0ZXIgZW1pdHRpbmcgdGhlbS4KClR1ZSBOb3YgMjMgMTc6Mjk6NDAgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZV9zdGF0ZSk6IE5vbiB2ZXJpZmllZCBzdWJyb3V0aW5lcyBiZWluZwoJY29uc2lkZXJlZCBtb3JlIHRoYW4gb25jZSB0byB0cmlnZ2VyIHBhc3NpdmUgdHlwZSBtZXJnZS4KClR1ZSBOb3YgMjMgMTA6NTU6MTggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjYXRjaF9jbGF1c2VfcGFyYW1ldGVyOik6IFN0aWxsIHNldCBgJCQnIHRvIE5VTExfVFJFRQogCWluIGNhc2Ugb2YgZXJyb3IuIEVycm9yIG1lc3NhZ2UgdHVuZWQuCgoxOTk5LTExLTIxICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChmaW5kX21ldGhvZHJlZl9pbmRleCk6IFVud3JhcCBtZXRob2QgbmFtZXMgYmVmb3JlCglpbnNlcnRpbmcgdGhlbSBpbiB0aGUgY29uc3RhbnQgcG9vbC4KCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2UpOiBEaXNwbGF5IGBpbnRlcmZhY2UnIHdoZW4gYXBwcm9wcmlhdGUuCgoJKiBjbGFzcy5jIChhc3N1bWVfY29tcGlsZWRfbm9kZSk6IE5ldyB0eXBlZGVmLgoJKGFzc3VtZV9jb21waWxlZF90cmVlKTogTmV3IHN0YXRpYyBkYXRhLgoJKGZpbmRfYXNzdW1lX2NvbXBpbGVkX25vZGUpOiBOZXcgZnVuY3Rpb24uCgkoYWRkX2Fzc3VtZV9jb21waWxlZCk6IE5ldyBmdW5jdGlvbi4KCShhc3N1bWVfY29tcGlsZWQpOiBOZXcgZnVuY3Rpb24uCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFVzZSBhc3N1bWVfY29tcGlsZWQuCgkoaXNfY29tcGlsZWRfY2xhc3MpOiBVc2UgYXNzdW1lX2NvbXBpbGVkLgoKCSogamF2YS10cmVlLmggKGFkZF9hc3N1bWVfY29tcGlsZWQpOiBEZWNsYXJlLgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBQYXJzZSBuZXcgb3B0aW9ucy4KCldlZCBOb3YgMTcgMjE6MDk6MjggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBBbHdheXMgY29udmVydCBUWVBFX1NJWkVfVU5JVCB0bwogCWludF90eXBlX25vZGU6IHRoYXQncyB3aGF0IGBfSnZfQWxsb2NPYmplY3QnIGV4cGVjdHMuCgpUaHUgTm92IDExIDAxOjU3OjE0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobG9va3VwX21ldGhvZF9pbnZva2UpOiBVc2UgbGFuZ19wcmludGFibGVfbmFtZSB0bwogCXJlbGlhYmx5IGJ1aWxkIHRoZSB0eXBlIG5hbWUgZHVyaW5nIGVycm9yIHJlcG9ydC4gRml4ZXMgUFIgZ2NqLzk3LgoKMTk5OS0xMS0wOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLXBhdGguYzogSW5jbHVkZSA8c3lzL3N0YXQuaD4uCgkoamNmX3BhdGhfaW5pdCk6IFNlYXJjaCBmb3IgbGliamF2YS56aXAuICBGaXhlcyBQUiBnY2ovODQuCgkoRElSX1VQKTogTmV3IG1hY3JvLgoKVHVlIE5vdiAgOSAxMjoxMjozOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBSZXN1bWUgcGVybWFuZW50IGFsbG9jYXRpb24sCiAJcmV2ZXJzaW5nIEFwciAyNyAxOTk4IHBhdGNoLgoJKHBhdGNoX3N0cmluZ19jc3QpOiBQb3Agb2JzdGFja3MgYWZ0ZXIgaGF2aW5nIHB1c2hlZCB0aGUgcGVybWFuZW50CiAJb25lcy4KCjE5OTktMTEtMDUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9jbGFzcyk6IEVtaXQgaW5saW5lZCBtZXRob2RzIGlmIGFueSBuYXRpdmUKCW1ldGhvZHMgZXhpc3QgaW4gdGhlIGNsYXNzLiAgRml4ZXMgUFIgZ2NqLzg1LgoKVGh1IE5vdiAgNCAxNjoyNzowMSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEhhbmRsZSBQTFVTX0VYUFIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoKV2VkIE5vdiAgMyAxNToyMDowMiBNU1QgMTk5OSAgR29kbWFyIEJhY2sgPGdiYWNrQGNzLnV0YWguZWR1PgoKCSogdHlwZWNrLmM6IChsb29rdXBfamF2YV9tZXRob2QpOiAgc2VhcmNoIGFsbCBpbmhlcml0ZWQKCWludGVyZmFjZXMgd2hlbiBsb29raW5nIHVwIGludGVyZmFjZSBtZXRob2QuCgpNb24gTm92ICAxIDIzOjQyOjAwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobWV0aG9kX2hlYWRlcjopOiBJc3N1ZSBlcnJvciBtZXNzYWdlIGZvciBydWxlIGB0eXBlCiAJZXJyb3InLgoJKHN5bmNocm9uaXplZDopOiBFcnJvciByZXBvcnQgd2hlbiBub3QgdXNpbmcgc3luY2hyb25pemVkLgoKTW9uIE5vdiAgMSAwMTozMjo0OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFByZXZlbnQgYHRoaXMnIGZyb20KIAliZWluZyB1c2VkIGJlZm9yZSB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciBoYXMgYmVlbiBjYWxsZWQuCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogVXNlIENBTExfRVhQTElDSVRfQ09OU1RSVUNUT1JfUAogCWluc3RlYWQgb2YgYENBTExfVEhJU19DT05TVFJVQ1RPUl9QJy4KClNhdCBPY3QgMzAgMjE6MzU6MTMgMTk5OSAgVG9kZCBULiBGcmllcyA8dG9kZEBsaWdodGhvdXNlLmZyaWVzLm5ldD4KCgkqIGNoZWNrLWluaXQuYzogRml4IHR5cG8gaW4gY29tbWVudC4KCkZyaSBPY3QgMjkgMTQ6MzU6MTggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kXzEpOiBTZXQgREVDTF9JTkxJTkUgdG8gMSBmb3IgcHJpdmF0ZSwgc3RhdGljCiAJYW5kIGZpbmFsIG1ldGhvZC4KCkZyaSBPY3QgMjkgMTQ6MjM6MzIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChleHByZXNzaW9uX3N0YXRlbWVudDopOiBDYWxsIGZ1bmN0aW9uIHRvIHJlcG9ydAogCWltcHJvcGVyIGludm9jYXRpb24gb2YgYSBjb25zdHJ1Y3Rvci4KCShwYXJzZV9jdG9yX2ludm9jYXRpb25fZXJyb3IpOiBOZXcgZnVuY3Rpb24uCgoxOTk5LTEwLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IERvbid0IHNldCBCTE9DS19UWVBFX1RBR1Mgb3IgY2FsbAoJcmVtZW1iZXJfZW5kX25vdGUuCgoxOTk5LTEwLTIxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqdmdlbm1haW4uYyAobWFpbik6IF9Kdl9Db21waWxlcl9Qcm9wZXJ0aWVzIG5vdyBhbiBleHRlcm47IHNldAoJaW4gZ2VuZXJhdGVkIGBtYWluJy4KClRodSBPY3QgMjEgMDE6Mjc6MzEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBIYW5kbGUgTU9ESUZZX0VYUFIuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExpa2V3aXNlLgoKV2VkIE9jdCAyMCAwMTo0MTo0NyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6IGZvbGRfY29uc3RhbnRfZm9yX2luaXQgdG8gd29yayBvbgogCXBlcm1hbmVudF9vYnN0YWNrLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGlrZXdpc2UuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBDb21wbGV0ZSBhbiBpbml0aWFsaXplciBlbGVtZW50CiAJb24gcGVybWFuZW50X29ic3RhY2suCgoxOTk5LTEwLTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiBDYWxsIGpjZl9kZXBlbmRlbmN5X2FkZF9maWxlLgoJRnJvbSBNaWtlIE1vcmV0b24gPG1pa2VAcGlsbGltLmRlbW9uLmNvLnVrPi4KCjE5OTktMTAtMTUgIEdyZWcgTWNHYXJ5ICA8Z2ttQGdudS5vcmc+CgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19ib3VuZHNfY2hlY2spOiBSZW1vdmUgZXh0ZXJuIGRlY2wuCgkqIGxhbmcuYyAoZmxhZ19ib3VuZHNfY2hlY2spOiBSZW1vdmUgZ2xvYmFsIHZhcmlhYmxlLgoJKGxhbmdfZl9vcHRpb25zKTogUmVtb3ZlICJib3VuZHMtY2hlY2siIGVudHJ5LgoJKGxhbmdfaW5pdF9vcHRpb25zKTogRGVmYXVsdCBmbGFnX2JvdW5kc19jaGVjayB0byAib24iLgoKMTk5OS0xMC0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSoganZnZW5tYWluLmMgKHVzYWdlKTogTmV3IGZ1bmN0aW9uLgoJKG1haW4pOiBVc2UgaXQuICBBbHNvLCBoYW5kbGUgYC1EJyBvcHRpb25zLgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBSZWNvZ25pemUgLUQuCgkoanZnZW5tYWluX3NwZWMpOiBBZGRlZCBgJXtEKn0nIHRvIGp2Z2VubWFpbiBpbnZvY2F0aW9uLgoKCSoganZzcGVjLmMgKGp2Z2VubWFpbl9zcGVjKTogVXNlIGAldW1haW4nLCBub3QganVzdCBgJXUnLgoKMTk5OS0xMC0xNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogamNmLWR1bXAuYyAocHJpbnRfY29uc3RhbnQsIGRpc2Fzc2VtYmxlX21ldGhvZCk6IERvbid0IGNhbGwgYQoJdmFyaWFkaWMgZnVuY3Rpb24gd2l0aCBhIG5vbi1saXRlcmFsIGZvcm1hdCBzdHJpbmcuCgoJKiBwYXJzZS1zY2FuLnkgKHJlcG9ydF9tYWluX2RlY2xhcmF0aW9uKTogTGlrZXdpc2UuCgoJKiBwYXJzZS5oIChFUlJPUl9DQVNUX05FRURFRF9UT19JTlRFR1JBTCk6IExpa2V3aXNlLgoKCSogcGFyc2UueSAocmVhZF9pbXBvcnRfZGlyLCBwYXRjaF9hc3NpZ25tZW50LCBwYXRjaF9iaW5vcCwKCXBhdGNoX2FycmF5X3JlZik6IExpa2V3aXNlLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogTGlrZXdpc2UuCgpUdWUgT2N0IDEyIDIyOjI4OjEwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXdyaXRlLmMgKFJFTE9DQVRJT05fVkFMVUVfMSk6IEZpeGVkIGludGVnZXIgdmFsdWUgZnJvbSAwIHRvIDEuCgoxOTk5LTEwLTA3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiBVc2UgVU5TQUZFX1BVVHggaW4gY2FzZXMKCXdoZXJlIENIRUNLX1BVVCBtYXkgZmFpbCBmb3IgdmFsaWQgcmVhc29ucy4KCgkqIGpjZi13cml0ZS5jIChVTlNBRkVfUFVUMSwgVU5TQUZFX1BVVDIsIFVOU0FGRV9QVVQzLAogCVVOU0FGRV9QVVROKTogTmV3IG1hY3Jvcy4KCjE5OTktMTAtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5oIChCVUlMRF9PUEVSQVRPUjIpOiBSZXR1cm4gQVNTSUdOX0FOWV9USyBpbiBgbGl0ZScgY2FzZSBhcwoJd2VsbC4gIEZpeGVzIEphdmEgUFIgZ2NqLzU5LgoJKiBwYXJzZS1zY2FuLnkgKHl5ZXJyb3IpOiBSZXBvcnQgZXJyb3JzLgoKRnJpIFNlcCAyNCAxMjoyMzowNSAxOTk5ICBHbGVubiBDaGFtYmVycyAgPEdDaGFtYmVyc0Bwcm92c29sLmNvbT4KCgkqIGRlY2wuYyAoaW5zZXJ0X2Jsb2NrKTogUmVtb3ZlIHVuY29uZGl0aW9uYWwgYGFib3J0Jy4KCkZyaSBTZXAgMjQgMTA6NDg6MTAgMTk5OSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBkZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiBObyBsb25nZXIgc3RhdGljLiAgTmV3IGFyZyBDTEFTUy4gIEFyZwoJRlVOQ1RJT05fQ09ERSBub3cgb2YgdHlwZSBpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJU2V0IHRoZSBidWlsdGluJ3MgREVDTF9CVUlMVF9JTl9DTEFTUy4KCjE5OTktMDktMjMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IERvbid0IHJlYWQgc3BlYyBmaWxlIGlmCgktZnN5bnRheC1vbmx5IGdpdmVuLgoKMTk5OS0wOS0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBBZGRlZCBgJShqYzEpJyB0byB0aGUgamMxIHNwZWMuCgoJKiBqYXZhb3AuaCAoV09SRF9UT19GTE9BVCk6IFVzZSBgaW5saW5lJyB1bmNvbmRpdGlvbmFsbHkuCgkoV09SRFNfVE9fTE9ORyk6IExpa2V3aXNlLgoJKFdPUkRTX1RPX0RPVUJMRSk6IExpa2V3aXNlLgoKVHVlIFNlcCAxNCAxNjoyNDoxOSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi13cml0ZS5jIChSRUxPQ0FUSU9OX1ZBTFVFXzApOiBOZXcgbWFjcm8uCgkoUkVMT0NBVElPTl9WQUxVRV8xKTogTGlrZXdpc2UuCgkoZW1pdF9paW5jLCBlbWl0X3JlbG9jLCBwdXNoX2NvbnN0YW50MSwgcHVzaF9jb25zdGFudDIsCiAJcHVzaF9pbl9jb25zdCwgcHVzaF9sb25nX2NvbnN0KTogUHJvdG90eXBlZC4KCShwdXNoX2NvbnN0YW50MSk6IEFyZ3VtZW50IGBpbmRleCcgaXMgb2YgdHlwZSBIT1NUX1dJREVfSU5ULgoJKHB1c2hfY29uc3RhbnQyKTogTGlrZXdpc2UuCgkocHVzaF9pbnRfY29uc3QpOiBDYXN0IGZpbmRfY29uc3RhbnQxJ3MgaW50ZWdlciBhcmd1bWVudHMgdG8gYGp3b3JkJy4KCShmaW5kX2NvbnN0YW50X3dpZGUpOiBDYXN0IGZpbmRfY29uc3RhbnQyJ3MgaW50ZWdlciBhcmd1bWVudHMgdG8KIAlgandvcmQnLgoJKGZpbmRfY29uc3RhbnRfaW5kZXgpOiBDYXN0IGZpbmRfY29uc3RhbnQyJ3MgYW5kIGZpbmRfY29uc3RhbnQyJ3MKIAlpbnRlZ2VyIGFyZ3VtZW50cyB0byBgandvcmQnLgoJKGVtaXRfcG9wKTogQXJndW1lbnQgYHZhbHVlJyBpcyBvZiB0eXBlIEhPU1RfV0lERV9JTlQuCgkoZW1pdF9zd2l0Y2hfcmVsb2MpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8wLgoJKGVtaXRfaWYpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8xLgoJKGVtaXRfZ290byk6IExpa2V3aXNlLgoJKGVtaXRfanNyKTogTGlrZXdpc2UuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiBVc2UgUkVMT0NBVElPTl9WQUxVRV8wLiBDYXN0IHNlY29uZAogCWFyZ3VtZW50IHRvIHB1c2hfbG9uZ19jb25zdCB0byBIT1NUX1dJREVfSU5ULgoKMTk5OS0wOS0xNSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KCgkqIE1ha2VmaWxlLmluIChwYXJzZS5vKTogRGVwZW5kIG9uICQoSkFWQV9UUkVFX0gpLgoKMTk5OS0wOS0yMCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogRXh0ZW5kIGNvbW1lbnQuCgpUaHUgU2VwIDE2IDE1OjQyOjM5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBUZXN0IGFnYWluc3QgR0VUX0NVUlJFTlRfQkxPQ0sKIAlpbnN0ZWFkIG9mIGZuZGVjbC4KCjE5OTktMDktMTYgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChnZXRfZmllbGRfbmFtZSwgcHJpbnRfbWV0aG9kX2luZm8sIHByaW50X2luY2x1ZGUsCglhZGRfbmFtZWxldCk6IFVzZSB4bWFsbG9jLCBub3QgbWFsbG9jLgoKCSogamNmLWRlcGVuZC5jIChhZGRfZW50cnkpOiBMaWtld2lzZS4gIFVzZSB4c3RyZHVwLCBub3Qgc3RyZHVwLgoJKG11bmdlKTogVXNlIHhyZWFsbG9jLCBub3QgcmVhbGxvYywgdHJ1c3QgeHJlYWxsb2MgdG8gaGFuZGxlIGEKCU5VTEwgcG9pbnRlci4KCgkqIGpjZi1pby5jIChvcGVuX2luX3ppcCwgZmluZF9jbGFzcyk6IFVzZSB4c3RyZHVwLCBub3Qgc3RyZHVwLgoKCSogamNmLXBhcnNlLmMgKGpjZl9vdXRfb2Zfc3luY2gsIHl5cGFyc2UpOiBMaWtld2lzZS4KCgkqIGpjZi1wYXRoLmMgKGFkZF9lbnRyeSk6IExpa2V3aXNlLgoKCSogamNmLmggKEFMTE9DLCBSRUFMTE9DKTogVXNlIHhtYWxsb2MveHJlYWxsb2MsIG5vdCBtYWxsb2MvcmVhbGxvYy4KCgkqIGp2LXNjYW4uYyAoeG1hbGxvYyk6IFJlbW92ZSBkZWZpbml0aW9uLgoKCSoganZnZW5tYWluLmMgKHhtYWxsb2MpOiBMaWtld2lzZS4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IFVzZSB4Y2FsbG9jLCBub3QgeG1hbGxvYy9iemVyby4KCgkqIGxleC5jIChqYXZhX3N0b3JlX3VuaWNvZGUpOiBVc2UgeHJlYWxsb2MsIG5vdCByZWFsbG9jLgoKCSogcGFyc2Utc2Nhbi55OiBVc2UgY29uY2F0LCBub3Qgb2YgeG1hbGxvYy9hc3NpZ24vc3RyY3B5LiAgVXNlCgljb25jYXQsIG5vdCB4bWFsbG9jL3NwcmludGYuCgkoamF2YV9wdXNoX3BhcnNlcl9jb250ZXh0KTogVXNlIHhjYWxsb2MsIG5vdCB4bWFsbG9jL2J6ZXJvLgoJKHhzdHJkdXApOiBSZW1vdmUgZGVmaW5pdGlvbi4KCgkqIHBhcnNlLnkgKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcl9wLAoJY29uc3RydWN0b3JfY2lyY3VsYXJpdHlfbXNnLCB2ZXJpZnlfY29uc3RydWN0b3JfY2lyY3VsYXJpdHksCgljaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMsIGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzLAoJamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzLCBwYXRjaF9tZXRob2RfaW52b2NhdGlvbiwKCWNoZWNrX2Zvcl9zdGF0aWNfbWV0aG9kX3JlZmVyZW5jZSwgcGF0Y2hfYXNzaWdubWVudCwgcGF0Y2hfYmlub3AsCglwYXRjaF9jYXN0LCBhcnJheV9jb25zdHJ1Y3Rvcl9jaGVja19lbnRyeSwgcGF0Y2hfcmV0dXJuLAoJcGF0Y2hfY29uZGl0aW9uYWxfZXhwcik6IFVzZSB4c3RyZHVwLCBub3Qgc3RyZHVwLgoKCSogemV4dHJhY3QuYyAoQUxMT0MpOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KClN1biBTZXAgMTIgMjM6MzA6MDkgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IERlcGVuZCBvbiBzeXN0ZW0uaCBhbmQgZ2NjLmguCgoJKiBqdnNwZWMuYzogSW5jbHVkZSBnY2MuaC4gIERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkoZG9fc3BlYywgbGFuZ19zcGVjaWZpY19wcmVfbGluaywgbGFuZ19zcGVjaWZpY19kcml2ZXIsCglpbnB1dF9maWxlbmFtZSwgaW5wdXRfZmlsZW5hbWVfbGVuZ3RoKTogRG9uJ3QgZGVjbGFyZS4KCShtYWluX2NsYXNzX25hbWUsIGp2Z2VubWFpbl9zcGVjLCBsYW5nX3NwZWNpZmljX2RyaXZlcik6CglDb25zdGlmeSBhIGNoYXIqLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogQWxsIGNhbGxzIHRvIHRoZSBmdW5jdGlvbiBwb2ludGVyCglwYXJhbWV0ZXIgbm93IGV4cGxpY2l0bHkgY2FsbCBgZmF0YWwnLgoKU2F0IFNlcCAxMSAxNjo0Njo0NCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IFNlYXJjaAogCWFic3RyYWN0IGNsYXNzZXMgYXMgaW50ZXJmYWNlcy4KClRodSBTZXAgIDkgMTc6MzM6MjggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfY2xhc3MpOiBXZSdyZSBub3cgb3V0c2lkZSBhIHZhbGlkIG1ldGhvZAogCWRlY2xhcmF0aW9uLiBUZWxsIHRoZSByZXN0IG9mIGdjYyBzby4KCjE5OTktMDktMDggIEJydWNlIEtvcmIgIGF1dG9nZW5AbGludXhib3guY29tCgoJKiBNYWtlZmlsZS5pbjogR2l2ZSB0aGUgZ3BlcmYgdXNlciBhIGhpbnQgYWJvdXQgd2h5ICJncGVyZiAtRiIgZmFpbHMuCgoxOTk5LTA5LTA3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoYWRkX2NsYXNzX2RlY2wpOiBHZW5lcmF0ZSBpbmNsdWRlIGZvciBnY2ovYXJyYXkuaCwgbm90CglqYXZhLWFycmF5LmguCgkoZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IERvbid0IGVtaXQgIjo6IiBpbiBKQXJyYXk8Pi4KCShwcmludF9uYW1lbGV0KTogT25seSBwcmludCB0cmFpbGluZyBgOycgd2hlbiBwcmludGluZyBhIGNsYXNzLgoKRnJpIFNlcCAxMCAxMDozMjozMiAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGphdmEtdHJlZS5oOiBEZWxldGUgZGVjbGFyYXRpb25zIGZvciBhbGwgdHJlZSBub2RlcyBub3cgbW92ZWQgdG8KCWdsb2JhbF90cmVlcy4KCSogZGVjbC5jOiBEZWxldGUgdGhlaXIgZGVmaW5pdGlvbnMuCgoxOTk5LTA5LTA0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYzEpOiBEZXBlbmQgb24gZ2djLWNhbGxiYWNrcy5vLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBnZ2MtY2FsbGJhY2tzLm8uCgkoT0JKREVQUyk6IExpa2V3aXNlLgoKMTk5OS0wOS0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc3RyaXBfb3V0X3N0YXRpY19maWVsZF9hY2Nlc3NfZGVjbCk6IFJldHVybiBvcGVyYW5kIGlmCglpdCBzYXRpc2ZpZXMgSkRFQ0xfUC4KCjE5OTktMDktMDIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChkZWNvZGVfc2lnbmF0dXJlX3BpZWNlKTogRW1pdCAiOjoiIGluIEpBcnJheTw+LgoJSGFuZGxlIG5lc3RlZCBhcnJheXMsIGxpa2UgYFtbSScuCgoxOTk5LTA5LTAyICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChmaW5pc2hfY2xhc3MpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciwgYWxsIGNhbGxlcnMKCWNoYW5nZWQuCgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXRocm93KTogQ2hhbmdlIHJldHVybiB0eXBlIHRvIHZvaWQuCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTWFrZSBzdXJlIGVhY2ggY2FzZSBpbiBzd2l0Y2ggcmV0dXJucyBhCgl2YWx1ZS4KCgkqIGphdmEtdHJlZS5oIChmaW5pc2hfY2xhc3MpOiBGaXggcHJvdG90eXBlIHRvIHRha2Ugdm9pZCBhcmdzLgoKCSogamNmLWR1bXAuYyAodXNhZ2UpOiBNYXJrIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoJKG1haW4pOiBJc3N1ZSByZXR1cm4gZnJvbSBtYWluLCBub3QgZXhpdC4KCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9jbGFzc19maWxlKTogRml4IGNhbGwgdG8gYGZpbmlzaF9jbGFzcycuCgoJKiBqY2YuaCAoamNmX3VuZXhwZWN0ZWRfZW9mKTogTWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCgkqIGp2LXNjYW4uYyAobWFpbik6IElzc3VlIHJldHVybiBmcm9tIG1haW4sIG5vdCBleGl0LgoKCSogcGFyc2UueSAoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2RlZmluaXRpb25zLAoJamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IEZpeCBjYWxsIHRvIGBmaW5pc2hfY2xhc3MnLgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgYG9sZHBjJwoJYW5kIGBwcmV2cGMnLgoKMTk5OS0wOC0zMCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGFuZy5jIChsYW5ndWFnZV9zdHJpbmcpOiBDb25zdGlmeS4KCjE5OTktMDgtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChMSUJTKTogRml4IGRlZmluaXRpb24gc28gd2UgbGluayB3aXRoICQoQ0xJQikuCglSZW1vdmUgaGFja3MgZm9yIHN0dWZmIHdoaWNoIGNvbWVzIGZyb20gbGliaWJlcnR5LgoKCSogTWFrZS1sYW5nLmluOiBMaWtld2lzZS4KCk1vbiBBdWcgMzAgMTY6NDE6NDEgMTk5OSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIE1ha2VmaWxlLmluICh4cmVmLm8pOiBEZXBlbmQgb24geHJlZi5jIGV4cGxpY2l0bHkuCgoxOTk5LTA4LTI5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBqYXZhLXRyZWUuaCAobGFuZ19wcmludGFibGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBsYW5nLmMgKGxhbmdfcHJpbnRhYmxlX25hbWUpOiBMaWtld2lzZS4KCkZyaSBBdWcgMjcgMjM6MzE6NTcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2phdmFoLmMsIGpjZi13cml0ZS5jLCB2ZXJpZnkuYzogRG8gbm90IHVzZSBDKysgc3R5bGUKCWNvbW1lbnRzIGluIEMgY29kZS4KCjE5OTktMDgtMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9jeHhfY2xhc3NuYW1lKTogUHJpbnQgIjo6IiBiZWZvcmUgcXVhbGlmaWVkCgluYW1lLgoKVGh1IEF1ZyAyNiAwOToxMDo1OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGxvb2t1cF9jbCk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBOb3cgZG9lcyBpdHMgYmVzdAogCXRvIHNldCB0aGUgY29sdW1uIG51bWJlci4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogVGFrZSBXRkwgd3JhcHBlcnMgaW50byBhY2NvdW50LgoKV2VkIEF1ZyAyNSAxNTozNzoxNSAxOTk5ICBHcmVnZyBUb3duc2VuZCAgPGdtdEBjcy5hcml6b25hLmVkdT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IERvbid0IGNoZWNrIGluc3RydWN0aW9uCgl2YWxpZGl0eSBiZXlvbmQgZW5kIG9mIG1ldGhvZC4KCjE5OTktMDgtMjUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IENvcnJlY3RseSBoYW5kbGUgLS1oZWxwIGFnYWluLgoKMTk5OS0wOC0yNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2phdmFoLmMgKHByaW50X25hbWUsIHByaW50X2Jhc2VfY2xhc3NuYW1lLCB1dGY4X2NtcCwKCWN4eF9rZXl3b3JkX3N1YnN0LCBnZW5lcmF0ZV9hY2Nlc3MsIG5hbWVfaXNfbWV0aG9kX3AsCglnZXRfZmllbGRfbmFtZSwgcHJpbnRfZmllbGRfbmFtZSwgc3VwZXJfY2xhc3NfbmFtZSwgcHJpbnRfaW5jbHVkZSwKCWRlY29kZV9zaWduYXR1cmVfcGllY2UsIHByaW50X2NsYXNzX2RlY2xzLCB1c2FnZSwgaGVscCwKCWphdmFfbm9fYXJndW1lbnQsIHZlcnNpb24sIGFkZF9uYW1lbGV0LCBwcmludF9uYW1lbGV0KTogQWRkIHN0YXRpYwoJcHJvdG90eXBlLgoJKHByaW50X2Jhc2VfY2xhc3NuYW1lLCB1dGY4X2NtcCwgY3h4X2tleXdvcmRfc3Vic3QsCgluYW1lX2lzX21ldGhvZF9wKTogQ29uc3RpZnkgYSBjaGFyKi4KCShnZXRfZmllbGRfbmFtZSk6IExpa2V3aXNlLiAgUHJlZmVyIHhzdHJkdXAgb3ZlciBtYWxsb2Mvc3RyY3B5LgoJUHJvdmlkZSBhIGZpbmFsIGVsc2UgY2xhdXNlIGluIGFuIGlmLWVsc2UtaWYuCgkocHJpbnRfZmllbGRfaW5mbyk6IEFkZCBtaXNzaW5nIGZpbmFsIGFyZyBpbiBmdW5jdGlvbiBjYWxsIHRvCglgcHJpbnRfZmllbGRfbmFtZScuCgkocHJpbnRfbWV0aG9kX2luZm8sIGRlY29tcGlsZV9tZXRob2QsIGRlY29kZV9zaWduYXR1cmVfcGllY2UsCglwcmludF9jX2RlY2wsIHByaW50X2Z1bGxfY3h4X25hbWUsIHByaW50X3N0dWIsCglwcmludF9tYW5nbGVkX2NsYXNzbmFtZSwgc3VwZXJfY2xhc3NfbmFtZSwgcHJpbnRfaW5jbHVkZSwKCWFkZF9uYW1lbGV0LCBhZGRfY2xhc3NfZGVjbCwgcHJpbnRfY2xhc3NfZGVjbHMsIHByb2Nlc3NfZmlsZSwKCWhlbHApOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogamNmLXdyaXRlLmMgKGpjZl9oYW5kbGVyLCBwdXNoX2NvbnN0YW50MSwgcHVzaF9jb25zdGFudDIsCglwdXNoX2ludF9jb25zdCwgZmluZF9jb25zdGFudF93aWRlLCBmaW5kX2NvbnN0YW50X2luZGV4LAoJcHVzaF9sb25nX2NvbnN0LCBmaWVsZF9vcCwgbWF5YmVfd2lkZSwgZW1pdF9kdXAsIGVtaXRfcG9wLAoJZW1pdF9paW5jLCBlbWl0X2xvYWRfb3Jfc3RvcmUsIGVtaXRfbG9hZCwgZW1pdF9zdG9yZSwgZW1pdF91bm9wLAoJZW1pdF9iaW5vcCwgZW1pdF9yZWxvYywgZW1pdF9zd2l0Y2hfcmVsb2MsIGVtaXRfY2FzZV9yZWxvYywKCWVtaXRfaWYsIGVtaXRfZ290bywgZW1pdF9qc3IsIGNhbGxfY2xlYW51cHMsCgltYWtlX2NsYXNzX2ZpbGVfbmFtZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShnZW5lcmF0ZV9ieXRlY29kZV9yZXR1cm4sIGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogUGFzcyBhCglOVUxMX1BUUiwgbm90IGEgTlVMTF9UUkVFLgoKCSoganYtc2Nhbi5jOiBJbmNsdWRlICJqY2YuaCIuCgkobWFpbik6IERlY2xhcmUgdXNpbmcgREVGVU4gbWFjcm8uCgoJKiBqdnNwZWMuYyAoZmluZF9zcGVjX2ZpbGUsIGxhbmdfc3BlY2lmaWNfcHJlX2xpbmssCglsYW5nX3NwZWNpZmljX2RyaXZlcik6IEFkZCBwcm90b3R5cGVzLgoJKGZpbmRfc3BlY19maWxlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGtleXdvcmQuZ3BlcmYgKGhhc2gsIGphdmFfa2V5d29yZCk6IEFkZCBwcm90b3R5cGVzLgoKCSogbGFuZy5jIChsYW5nX3ByaW50X2Vycm9yKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkobGFuZ19pbml0KTogUHJlZmVyIG1lbWNweSBvdmVyIGJjb3B5IHRvIGF2b2lkIGNhc3RzLgoKCSogbGV4LmMgKHl5bGV4KTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBwYXJzZS1zY2FuLnk6IEluY2x1ZGUgImxleC5jIiBlYXJsaWVyLgoKCSogcGFyc2UuaDogUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbiBmb3IgYHl5bGV4Jy4KCgkqIHBhcnNlLnkgKGphdmFfZGVjbF9lcXVpdiwgYmlub3BfY29tcG91bmRfcCwgc2VhcmNoX2xvb3AsCglsYWJlbGVkX2Jsb2NrX2NvbnRhaW5zX2xvb3BfcCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShub3RfYWNjZXNzaWJsZV9wKTogTWFrZSBzdGF0aWMgdG8gbWF0Y2ggcHJvdG90eXBlLgoKCSogdmVyaWZ5LmMgKHN0YXJ0X3BjX2NtcCk6IERvbid0IG5lZWRsZXNzbHkgY2FzdCBhd2F5IGNvbnN0LgoKU3VuIEF1ZyAyMiAxMTowNzo0MSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBDaGFuZ2VkIGxlYWRpbmcgY29tbWVudC4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RfZGVmaW5pdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBDYWxsIGl0LgoJKHZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlcik6IEZpeGVkIGluZGVudGF0aW9uLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogTGlrZXdpc2UuCgpUaHUgQXVnIDE5IDEwOjI2OjE4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAobWV0aG9kX2hlYWRlcik6IFJldHVybiBhIG51bGwgcG9pbnRlciBpZiB0aGUgY3VycmVudAogCWNsYXNzIG5vZGUgaXMgbnVsbC4KCShmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogUmV0dXJuIGlmIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGRlY2wKIAlpcyBudWxsLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IExpa2V3aXNlLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogTGlrZXdpc2UuCgpXZWQgQXVnIDE4IDEzOjE3OjE1IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZW1pdF9yZWdpc3Rlcl9jbGFzcyk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgY2FsbCB0bwogCXN0YXJ0X3NlcXVlbmNlLgoJKiBwYXJzZS55IChsYWJlbGVkX2Jsb2NrX2NvbnRhaW5zX2xvb3BfcCk6IFJlbW92ZWQgdW51c2VkIGxvY2FsCiAJdmFyaWFibGUuCgpUdWUgQXVnIDE3IDIyOjUxOjQ0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9yZWZvbGQpOiBBZGRlZCBwcm90b3R5cGUuCgpUdWUgQXVnIDE3IDIxOjQ4OjQxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoQklOT1BfQ09NUE9VTkRfQ0FORElEQVRFUyk6IE5ldyBtYWNyby4KCShqYXZhX3N0YWJpbGl6ZV9yZWZlcmVuY2UpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGBlbHNlJy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IFNldCBmbGFnIHRvIHJlbWVtYmVyIGJvb2xlYW4uIENhbGwKCWphdmFfcmVmb2xkLiBBZGRlZCBjb21tZW50cy4KCShqYXZhX2RlY2xfZXF1aXYpOiBOZXcgZnVuY3Rpb24uCgkoYmlub3BfY29tcG91bmRfcCk6IExpa2V3aXNlLgoJKGphdmFfcmVmb2xkKTogTGlrZXdpc2UuCgkocGF0Y2hfdW5hcnlvcCk6IFN0cmlwZWQgc3RhdGljIGZpZWxkIGFjY2VzcyBhc3NpZ25lZCB0byBkZWNsIGFuZAoJb3AuIENoYW5nZWQgcHJvbW90aW9uIHNjaGVtZSBmb3IgKysvLS0gb3BlcmF0b3JzLgoJKHNlYXJjaF9sb29wKTogTmV3IGZ1bmN0aW9uLgoJKGxhYmVsZWRfYmxvY2tfY29udGFpbnNfbG9vcF9wKTogTGlrZXdpc2UuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiBDYWxsIGxhYmVsZWRfYmxvY2tfY29udGFpbnNfbG9vcF9wLiBBZGRlZAoJY29tbWVudC4KCShwYXRjaF9iY19zdGF0ZW1lbnQpOiBDYWxsIHNlYXJjaF9sb29wLiBGaXhlZCBjb21tZW50LgoKMTk5OS0wOC0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IE1hcmsgc3RhdGljIGFycmF5IGRhdGEgYXMKCXJlZmVyZW5jZWQuCgpUdWUgQXVnCTEwIDAwOjI4OjMxIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSoganZnZW5tYWluLmMgKG1haW4pOiBOVUwtdGVybWluYXRlIG5hbWVfb2JzdGFjay4KCjE5OTktMDgtMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfYm9vbDJfaW5pdCwgZG9uZV9hbHRlcm5hdGl2ZSk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZXMuCgoJKiBjbGFzcy5jIChhZGRfaW50ZXJmYWNlX2RvLCBtYXliZV9sYXlvdXRfc3VwZXJfY2xhc3MpOiBMaWtld2lzZS4KCShhZGRfbWV0aG9kLCBidWlsZF91dGY4X3JlZiwgYnVpbGRfY2xhc3NfcmVmLAoJYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUsIGxheW91dF9jbGFzc19tZXRob2QpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZGVjbC5jIChwdXNoX3Byb21vdGVkX3R5cGUsIG1ha2VfYmluZGluZ19sZXZlbCk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZXMuCgkocHVzaF9wcm9tb3RlZF90eXBlLCBwdXNoZGVjbCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBleGNlcHQuYyAoZmluZF9oYW5kbGVyX2luX3JhbmdlLCBsaW5rX2hhbmRsZXIsCgljaGVja19zdGFydF9oYW5kbGVycyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCgkqIGV4cHIuYyAocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZ2phdmFoLmMgKG1haW4pOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogamF2YS10cmVlLmggKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zLCBwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6CglDb25zdGlmeSBhIGNoYXIqLgoKCSogamNmLWRlcGVuZC5jIChmcmVlX2VudHJ5LCBhZGRfZW50cnksIG11bmdlLCBwcmludF9lbnRzKTogQWRkCglzdGF0aWMgcHJvdG90eXBlcy4KCShhZGRfZW50cnksIGpjZl9kZXBlbmRlbmN5X3NldF90YXJnZXQsIGpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQsCgltdW5nZSwgcHJpbnRfZW50cyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtZHVtcC5jIChkaXNhc3NlbWJsZV9tZXRob2QpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHByaW50X2NvbnN0YW50X3Bvb2wsIHByaW50X2V4Y2VwdGlvbl90YWJsZSk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShwcmludF9jb25zdGFudCwgcHJpbnRfZXhjZXB0aW9uX3RhYmxlLCBtYWluLCBkaXNhc3NlbWJsZV9tZXRob2QpOgoJQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzZmlsZSwgZmluZF9jbGFzcyk6IExpa2V3aXNlLgoKCSogamNmLXBhcnNlLmMgKEpQT09MX1VURl9EQVRBLCBmaW5kX2luX2N1cnJlbnRfemlwKTogTGlrZXdpc2UuCgkoc2V0X3NvdXJjZV9maWxlbmFtZSwgcHJlZGVmaW5lZF9maWxlbmFtZV9wKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKHNldF9zb3VyY2VfZmlsZW5hbWUsIGdldF9jb25zdGFudCwgZ2V0X2NsYXNzX2NvbnN0YW50LAoJZmluZF9pbl9jdXJyZW50X3ppcCk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtcGF0aC5jIChmcmVlX2VudHJ5LCBhcHBlbmRfZW50cnksIGFkZF9lbnRyeSwgYWRkX3BhdGgpOiBBZGQKCXN0YXRpYyBwcm90b3R5cGVzLgoJKGFkZF9lbnRyeSwgYWRkX3BhdGgsIGpjZl9wYXRoX2NsYXNzcGF0aF9hcmcsCglqY2ZfcGF0aF9DTEFTU1BBVEhfYXJnLCBqY2ZfcGF0aF9pbmNsdWRlX2FyZyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqY2YtcmVhZGVyLmMgKGdldF9hdHRyaWJ1dGUsIGpjZl9wYXJzZV9wcmVhbWJsZSwKCWpjZl9wYXJzZV9jb25zdGFudF9wb29sLCBqY2ZfcGFyc2VfY2xhc3MsIGpjZl9wYXJzZV9maWVsZHMsCglqY2ZfcGFyc2Vfb25lX21ldGhvZCwgamNmX3BhcnNlX21ldGhvZHMsCglqY2ZfcGFyc2VfZmluYWxfYXR0cmlidXRlcyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlcy4KCShnZXRfYXR0cmlidXRlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIGpjZi5oIChmaW5kX2NsYXNzLCBmaW5kX2NsYXNzZmlsZSwgamNmX2RlcGVuZGVuY3lfc2V0X3RhcmdldCwKCWpjZl9kZXBlbmRlbmN5X2FkZF90YXJnZXQsIGpjZl9wYXRoX2NsYXNzcGF0aF9hcmcsCglqY2ZfcGF0aF9DTEFTU1BBVEhfYXJnLCBqY2ZfcGF0aF9pbmNsdWRlX2FyZyk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBqdi1zY2FuLmMgKG1haW4pOiBDb25zdGlmeSBhIGNoYXIqLgoJKGdjY19vYnN0YWNrX2luaXQpOiBBZGQgcHJvdG90eXBlIGFyZ3VtZW50cy4KCgkqIGp2Z2VubWFpbi5jIChnY2Nfb2JzdGFja19pbml0KTogTGlrZXdpc2UuCgkobWFpbik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBsYW5nLmMgKHB1dF9kZWNsX3N0cmluZywgcHV0X2RlY2xfbm9kZSwgamF2YV9kdW1teV9wcmludCk6IEFkZAoJc3RhdGljIHByb3RvdHlwZXMuCgkocHV0X2RlY2xfc3RyaW5nLCBsYW5nX3ByaW50X2Vycm9yKTogQ29uc3RpZnkgYSBjaGFyKi4KCShsYW5nX2luaXQpOiBSZW1vdmUgcmVkdW5kYW50IGV4dGVybiBwcm90b3R5cGUuCgoJKiBtYW5nbGUuYyAoZW1pdF91bmljb2RlX21hbmdsZWRfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgoJKiB0eXBlY2suYyAoY29udmVydF9pZWVlX3JlYWxfdG9faW50ZWdlciwgcGFyc2Vfc2lnbmF0dXJlX3R5cGUpOgoJQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKGdldF90eXBlX2Zyb21fc2lnbmF0dXJlKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHZlcmlmeS5jIChjaGVja19wZW5kaW5nX2Jsb2NrLCB0eXBlX3N0YWNrX2R1cCwgc3RhcnRfcGNfY21wICk6CglBZGQgc3RhdGljIHByb3RvdHlwZXMuCgkoc3RhcnRfcGNfY21wKTogUHJlZmVyIFBUUiBvdmVyIEdFTkVSSUNfUFRSLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogQ29uc3RpZnkgYSBjaGFyKi4KCgkqIHhyZWYuYyAoeHJlZl9mbGFnX3ZhbHVlKTogTGlrZXdpc2UuCgoJKiB4cmVmLmggKHhyZWZfZmxhZ192YWx1ZSk6IExpa2V3aXNlLgoKCSogemV4dHJhY3QuYyAobWFrZXdvcmQsIG1ha2Vsb25nKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKG1ha2V3b3JkLCBtYWtlbG9uZyk6IENvbnN0aWZ5IGEgdWNoKi4KCjE5OTktMDgtMDkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxhbmcuYyAoamF2YV9kdW1teV9wcmludCk6IENvbnN0aWZ5IGEgY2hhciouCgkobGFuZ19wcmludF9lcnJvcik6IExpa2V3aXNlLgoJKGxhbmdfaW5pdCk6IFJlbW92ZSByZWR1bmRhbnQgcHJvdG90eXBlIGZvciBgcHJpbnRfZXJyb3JfZnVuY3Rpb24nLgoJKGxhbmdfaW5pdF9zb3VyY2UpOiBMaWtld2lzZS4KCShsYW5nX2lkZW50aWZ5KTogQ29uc3RpZnkgYSBjaGFyKi4KCjE5OTktMDgtMDkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGphdmFvcC5oIChXT1JEX1RPX0ZMT0FUKTogb25seSBpbmxpbmUgaWYgYnVpbGRpbmcgd2l0aCBnY2MuCgkoV09SRFNfVE9fTE9ORyk6IExpa2V3aXNlLgoJKFdPUkRTX1RPX0RPVUJMRSk6IExpa2V3aXNlLgoKMTk5OS0wOC0wNCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxhbmcubyk6IERlcGVuZCBvbiAkKFJUTF9IKSAkKEVYUFJfSCkuCgoJKiBleHByLmMgKGphdmFfc3RhY2tfcG9wLCBqYXZhX2FycmF5X2RhdGFfb2Zmc2V0LAoJYnVpbGRfamF2YV90aHJvd19vdXRfb2ZfYm91bmRzX2V4Y2VwdGlvbiwgY2FzZV9pZGVudGl0eSwKCWJ1aWxkX2phdmFfY2hlY2tfaW5kZXhlZF90eXBlKTogQWRkIHN0YXRpYyBwcm90b3R5cGVzLgoJKGxpbmVudW1iZXJfdGFibGUsIGV4cGFuZF9pbnZva2UsIGV4cGFuZF9qYXZhX2ZpZWxkX29wLAoJYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYsIGV4cGFuZF9ieXRlX2NvZGUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogamF2YS10cmVlLmggKGJ1aWxkX3ByaW10eXBlX3R5cGVfcmVmLCBsaW5lbnVtYmVyX3RhYmxlKToKCUNvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogQWRkIHByb3RvdHlwZS4KCgkqIGxhbmcuYzogSW5jbHVkZSBydGwuaCBhbmQgZXhwci5oLiAgUmVtb3ZlIGV4dGVybiBwcm90b3R5cGUgZm9yCglgamF2YV9sYW5nX2V4cGFuZF9leHByJy4KCgkqIGxleC5jIChqYXZhX2xleF9lcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9nZXRfdW5pY29kZSwgamF2YV9yZWFkX2NoYXIsIGphdmFfYWxsb2NhdGVfbmV3X2xpbmUsCglqYXZhX3VuZ2V0X3VuaWNvZGUsIGphdmFfc25lYWtfdW5pY29kZSk6IFByb3RvdHlwZS4KCgkqIHBhcnNlLXNjYW4ueSAoY3VycmVudF9jbGFzcywgcGFja2FnZV9uYW1lLCBtZXRob2RfZGVjbGFyYXRvciwKCXJlcG9ydF9jbGFzc19kZWNsYXJhdGlvbiwgeXllcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBwYXJzZS5oIChqYXZhX3JlcG9ydF9lcnJvcnMpOiBQcm90b3R5cGUuCgkoeXllcnJvcik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBwYXJzZS55IChjbGFzc2l0Zl9yZWRlZmluaXRpb25fZXJyb3IsIGNoZWNrX21vZGlmaWVycywKCXBhcnNlX2pkazFfMV9lcnJvciwgbG9va3VwX3BhY2thZ2VfdHlwZSwKCWxvb2t1cF9wYWNrYWdlX3R5cGVfYW5kX3NldF9uZXh0LCBnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lLAoJcHVyaWZ5X3R5cGVfbmFtZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbiwgbWF5YmVfZ2VuZXJhdGVfZmluaXQsCgl2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIsIHBhcnNlcl9hZGRfaW50ZXJmYWNlLAoJYWRkX3N1cGVyaW50ZXJmYWNlcywgamRlcF9yZXNvbHZlX2NsYXNzLCBub3RlX3Bvc3NpYmxlX2NsYXNzbmFtZSwKCWphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMsIGphdmFfZXhwYW5kX2ZpbmFscywKCWN1dF9pZGVudGlmaWVyX2luX3F1YWxpZmllZCwgamF2YV9zdGFiaWxpemVfcmVmZXJlbmNlLAoJZG9fdW5hcnlfbnVtZXJpY19wcm9tb3Rpb24sIG9wZXJhdG9yX3N0cmluZywgZG9fbWVyZ2Vfc3RyaW5nX2NzdGUsCgltZXJnZV9zdHJpbmdfY3N0ZSk6IFByb3RvdHlwZS4KCShzaW5nbGVfdHlwZV9pbXBvcnRfZGVjbGFyYXRpb24sIHl5ZXJyb3IsCgl2YXJpYWJsZV9yZWRlZmluaXRpb25fZXJyb3IsIGJ1aWxkX2FycmF5X2Zyb21fbmFtZSwKCWJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSwgY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uLAoJcmVzb2x2ZV9jbGFzcywgY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycywKCW5vdGVfcG9zc2libGVfY2xhc3NuYW1lLCByZWFkX2ltcG9ydF9kaXIsCglmaW5kX2luX2ltcG9ydHNfb25fZGVtYW5kLCByZXNvbHZlX3BhY2thZ2UsIGZpeF9jb25zdHJ1Y3RvcnMsCgljaGVja19kZXByZWNhdGlvbiwgbG9va3VwX21ldGhvZF9pbnZva2UsCgltYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYsIGFycmF5X2NvbnN0cnVjdG9yX2NoZWNrX2VudHJ5KToKCUNvbnN0aWZ5IGEgY2hhciouCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcywgamF2YV9leHBhbmRfZmluYWxzKTogTWFrZSBzdGF0aWMuCgkoY29udmVydF9uYXJyb3cpOiBSZW1vdmUgc3RhdGljIHByb3RvdHlwZS4KClR1ZSBBdWcgIDMgMjA6MjE6MjAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogTWFrZWZpbGUuaW4gKGRlY2wubyk6IERlcGVuZHMgb24gJChzcmNkaXIpLy4uL2RlZmF1bHRzLmguCgoxOTk5LTA4LTAyICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZGVjbC5jOiBJbmNsdWRlIGRlZmF1bHRzLmggaW5zdGVhZCBvZiBleHByLmguCgkqIHBhcnNlLnk6IExpa2V3aXNlLgoKMTk5OS0wOC0wMiAgSmFrdWIgSmVsaW5layAgPGpqQHVsdHJhLmxpbnV4LmN6PgoKCSogamF2YS9kZWNsLmMgKHN0YXJ0X2phdmFfbWV0aG9kKTogQ2hhbmdlIGFsbCB1c2VzIG9mCglQUk9NT1RFX1BST1RPVFlQRVMsIHNvIHRoYXQgaXQgdGVzdHMgaXQgYXMgYSBDIGV4cHJlc3Npb24uCglFbnN1cmUgZXhwci5oIGlzIGluY2x1ZGVkLgoJKiBqYXZhL2V4cHIuYyAocG9wX2FyZ3VtZW50cyk6IERpdHRvLgoJKiBqYXZhL3BhcnNlLnkgKGV4cGFuZF9zdGFydF9qYXZhX21ldGhvZCk6IERpdHRvLgoKMTk5OS0wOC0wMSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKEFMTF9DRkxBR1MpOiBBZGQgJy1XIC1XYWxsJy4KCjE5OTktMDctMzEgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZGVjbC5jOiBJbmNsdWRlICJmdW5jdGlvbi5oIi4KCSogZXhjZXB0LmM6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW46IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgoxOTk5LTA3LTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfc29mdF9kaXZtb2QpOiBQcm92aWRlIGEgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBNYXJrIHBhcmFtZXRlcnMgYHRhcmdldCcsIGB0bW9kZScgYW5kCglgbW9kaWZpZXInIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGdqYXZhaC5jIChwcm9jZXNzX2ZpbGUpOiBBZGQgYnJhY2VzIGFyb3VuZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogamNmLWR1bXAuYyAocHJpbnRfYWNjZXNzX2ZsYWdzLCBsb2NhbHZhcl9mcmVlKTogQ2hhbmdlIHJldHVybgoJdHlwZSB0byB2b2lkLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYGV4Y2VwdGlvbl9jb3B5Jy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBMaWtld2lzZSBmb3IgYGZpZWxkX2RlY2wnLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UgZm9yIGBjbGFzc190b19zZWFyY2gnLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBMaWtld2lzZSBmb3IgYG5hbWUnIGFuZCBgcHRyX3R5cGUnLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBMaWtld2lzZSBmb3IgYGxoc190eXBlJy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBjYWxsZXInLgoKMTk5OS0wNy0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAodmFfbGlzdF90eXBlX25vZGUpOiBOZXcuCgoxOTk5LTA3LTI1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9zdHViKTogTmV3IGZ1bmN0aW9uLgoJKE1FVEhPRF9JU19OQVRJVkUpOiBOZXcgbWFjcm8uCgkocHJpbnRfbWFuZ2xlZF9jbGFzc25hbWUpOiBNYWtlIHN0YXRpYy4KCShIQU5ETEVfRU5EX0ZJRUxEKTogRG9uJ3QgZW1pdCBmaWVsZHMgZHVyaW5nIHN0dWIgZ2VuZXJhdGlvbi4KCShwcm9jZXNzX2ZpbGUpOiBQZXJmb3JtIHN0dWIgZ2VuZXJhdGlvbi4KCShIQU5ETEVfTUVUSE9EKTogRG9uJ3QgZW1pdCBjbGFzcyBkZWNscyBkdXJpbmcgc3R1YgoJZ2VuZXJhdGlvbi4KCShIQU5ETEVfRU5EX01FVEhPRCk6IFRha2UgaW50byBhY2NvdW50IHN0dWIgZ2VuZXJhdGlvbi4KCShwcmludF9tZXRob2RfaW5mbyk6IEhhbmRsZSBzdHViIGdlbmVyYXRpb24uCgkocHJpbnRfc3R1Yik6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jeHhfY2xhc3NuYW1lKTogTWFrZSBzaWduYXR1cmUgY29uc2lzdGFudCB3aXRoIG90aGVycy4KCShoZWxwKTogRGVzY3JpYmUgLXN0dWJzIG9wdGlvbi4KCShtYWluKTogQ3JlYXRlIHN0dWIgZmlsZS4KCSh2ZXJzaW9uKTogVXNlIHZlcnNpb24uYy4KCShwcmludF9mdWxsX2N4eF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2NfZGVjbCk6IFVzZSBwcmludF9mdWxsX2N4eF9uYW1lLgoKVGh1IEp1bCAyMiAxMjo0MToxMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEhhbmRsZSBNQVhfRVhQUi4KCjE5OTktMDctMTUgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogbGFuZy5jIChmbGFnX3VzZV9kaXZpZGVfc3Vicm91dGluZSk6IE5ldyB2YXJpYWJsZS4KCSogdHlwZWNrLmM6IChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogQm91bmRzIGNoZWNrCglmcC10by1pbnRlZ2VyIGNvbnZlcnNpb24uCgkoY29udmVydCk6IENhbGwgY29udmVydF9pZWVlX3JlYWxfdG9faW50ZWdlciB3aGVuIGZsYWdfZmFzdF9tYXRoCglpcyBub3Qgc2V0LgoKCSogZXhwci5jIChidWlsZF9qYXZhX3NvZnRfZGl2bW9kKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2phdmFfYmlub3ApOiBDYWxsIGJ1aWxkX2phdmFfc29mdF9kaXZtb2QgaWYKCWZsYWdfdXNlX2RpdmlkZV9zdWJyb3V0aW5lIGlzIHNldC4KCSogZGVjbC5jOiBzb2Z0X2lkaXZfbm9kZSwgc29mdF9pcmVtX25vZGUsIHNvZnRfbGRpdl9ub2RlLCB0cmVlCglzb2Z0X2xyZW1fbm9kZTogbmV3IGJ1aWx0aW4gZnVuY3Rpb25zLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKSBJbml0aWFsaXplIHRoZSBuZXcgYnVpbHRpbnMuCgkqIGphdmEtdHJlZS5oIHNvZnRfaWRpdl9ub2RlLCBzb2Z0X2lyZW1fbm9kZSwgc29mdF9sZGl2X25vZGUsIHRyZWUKCXNvZnRfbHJlbV9ub2RlOiBuZXcgYnVpbHRpbiBmdW5jdGlvbnMuCgkoYnVpbGRfamF2YV9zb2Z0X2Rpdm1vZCk6IE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueTogQ2FsbCBidWlsZF9qYXZhX3NvZnRfZGl2bW9kIGlmCglmbGFnX3VzZV9kaXZpZGVfc3Vicm91dGluZSBpcyBzZXQuCgkqIHBhcnNlLmM6IFJlYnVpbHQuCgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBBbHdheXMgYWxsb3cgYW4gZXh0cmEgYXJnIChmb3IKCWEgLS1zcGVjcz0gYXJnKSBldmVuIGlmIG5vdCBsaW5raW5nLgoJKiBsYW5nLW9wdGlvbnMuaCAoREVGSU5FX0xBTkdfTkFNRSAoIkphdmEiKSk6IEFkZAoJLWZ1c2UtZGl2aWRlLXN1YnJvdXRpbmUKClR1ZSBKdWwgMjAgMTM6MjA6MDUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChyZXNvbHZlX2FuZF9sYXlvdXQpOiBDaGVjayBtZXRob2RzIG9ubHkgb25jZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBWZXJpZnkgdGhyb3duIGV4Y2VwdGlvbnMKIAljb21wYXRpYmlsaXR5LgoJKGNoZWNrX3Rocm93bl9leGNlcHRpb25zKTogUmVqZWN0IGV4Y2VwdGlvbnMgdGhyb3duIGluCiAJaW5pdGlhbGl6ZXIuIEVycm9yIG1lc3NhZ2UgdHVuZWQuCgoxOTk5LTA3LTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBEbyBub3QgcmV0dXJuIHRoZSBsYXN0IHN0YXRlbWVudCBpbiBhCglibG9jayBhcyB0aGUgYmxvY2sncyB2YWx1ZS4KClNhdCBKdWwgIDMgMjI6MjY6MzIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpOiBTYXZlIHRoZSBDT01QT1VORF9FWFBSJ2VkCiAJQ0FMTF9FWFBSLCB0byBhdm9pZCBvcmRlciBvZiBldmFsdWF0aW9uIGNoYW5nZXMuCgpGcmkgSnVsICAyIDE3OjQ0OjA4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IERvIG5vdCB1c2UKIAlJREVOVElGSUVSX0xPQ0FMX1ZBTFVFIHdoZW4gbmFtZSBpcyBhIFNUUklOR19DU1QuCgpUaHUgSnVsICAxIDIzOjMxOjE2IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogSGFuZGxlIE1BWF9FWFBSLgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpOiBGb3JjZSBtZXRob2QgY2FsbCBhcmd1bWVudHMgdG8KIAliZSBldmFsdWF0ZWQgaW4gbGVmdC10by1yaWdodCBvcmRlci4KCSogcGFyc2UueSAocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IExvb3AgYWdhaW4gdG8gcXVhbGlmeQogCU5FV19BUlJBWV9FWFBSIHByb3Blcmx5LgoKV2VkIEp1biAzMCAxNzoyNzo1OCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6IFJlc29sdmUgdW5yZXNvbHZlZCBpbnZva2VkIG1ldGhvZAogCXJldHVybmVkIHR5cGUuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFNUUklOR19DU1QgdG8gcXVhbGlmeSBleHByZXNzaW9uIGZvcgogCXR5cGUgbmFtZSByZXNvbHV0aW9uLgoKMTk5OS0wNi0yNCAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfY2xhc3MpOiBXaGVuZXZlciBhIGRlZmVycmVkIG1ldGhvZCBpcwoJb3V0cHV0LCByZXNjYW4gdGhlIGxpc3Qgb2YgbWV0aG9kcyB0byBzZWUgaWYgYSBuZXcgY2FuZGlkYXRlIGZvcgoJb3V0cHV0IGNhbiBiZSBmb3VuZC4KCjE5OTktMDYtMjggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IFJlY29nbml6ZSAtLWhlbHAuCgpGcmkgSnVuIDI1IDEzOjM1OjE5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVzb2x2ZV9wYWNrYWdlKTogRml4ZWQgYm9ndXMgcmV0dXJuIHN0YXRlbWVudC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IFJlc29sdmUgbWV0aG9kIGludm9jYXRpb24gYmVnaW5uaW5nIHdpdGgKIAlhIHBhY2thZ2UgbmFtZSBxdWFsaWZpZXIuCgoxOTk5LTA2LTI1ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuc3RhZ2UxKTogRGVwZW5kIG9uIHN0YWdlMS1zdGFydC4KCShqYXZhLnN0YWdlMik6IExpa2V3aXNlIGZvciBzdGFnZTItc3RhcnQuCgkoamF2YS5zdGFnZTMpOiBMaWtld2lzZSBmb3Igc3RhZ2UzLXN0YXJ0LgoJKGphdmEuc3RhZ2U0KTogTGlrZXdpc2UgZm9yIHN0YWdlNC1zdGFydC4KClRodSBKdW4gMjQgMTM6MTI6MTUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6IFdoZW4gZG9pbmcgY3Jvc3MgcmVmZXJlbmNpbmcsIGRvbid0CiAJdHJ5IHRvIGtlZXAgZmlsZSBsb2NhdGlvbiBvbiBhIFdGTCBleHBhbmRlZCBhcyBhIENBTExfRVhQUi4KCldlZCBKdW4gMjMgMTQ6Mzc6MTUgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogSW5zZXJ0IGEgUkVUVVJOX0VYUFIgd2hlbgogCWNvbXBpbGluZyB0byBjbGFzcyBmaWxlIGEgdm9pZCBtZXRob2Qgd2l0aCBhbiBlbXB0eSBtZXRob2QgYm9keS4KICAJQXMgYSBzaWRlIGVmZmVjdCwgdGhlIGJ5dGVjb2RlIGJhY2tlbmQgd2lsbCBnZW5lcmF0ZSB0aGUKIAlhcHByb3ByaWF0ZSBgcmV0dXJuJyBpbnN0cnVjdGlvbi4KClR1ZSBKdW4gMjIgMjA6NDM6NDkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChsb29rdXBfcGFja2FnZV90eXBlX2FuZF9zZXRfbmV4dCk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGUuCgkocmVzb2x2ZV9wYWNrYWdlKTogU2VhcmNoIGN1cnJlbnQgYW5kIGltcG9ydGVkIHBhY2thZ2VzLgoJKGxvb2t1cF9wYWNrYWdlX3R5cGVfYW5kX3NldF9uZXh0KTogTmV3IGZ1bmN0aW9uLgoKMTk5OS0wNi0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBDaGVjayBmb3IgcGVuZGluZyBibG9ja3MKCWJlZm9yZSBpbnZhbGlkIFBDIHRlc3QgYW5kIG9wY29kZSBzd2l0Y2gsIG5vdCBhZnRlci4KCjE5OTktMDYtMjEgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGZpbmRfaGFuZGxlcl9pbl9yYW5nZSk6IFRoZSB1cHBlciBsaW1pdCBmb3IgZXhjZXB0aW9uCglyYW5nZXMgaXMgZXhjbHVzaXZlLCBub3QgaW5jbHVzaXZlOiAoc3RhcnQgPD0gcGMgPCBlbmQpLgoJKGxpbmtfaGFuZGxlcik6IGZpbmQgY2hpbGQgcG9pbnRlciB3aGljaCBwb2ludHMgdG8gb3V0ZXIgYnkKCXNlYXJjaGluZyBzaWJsaW5nIGxpc3Q6IHByZXZpb3VzIGNvZGUgaW5jb3JyZWN0bHkgYXNzdW1lZCB0aGF0CglvdXRlci0+b3V0ZXItPmZpcnN0X2NoaWxkIG11c3QgcG9pbnQgdG8gb3V0ZXIuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IEZJWE1FIGFkZGVkIHRvIGNvZGUgZm9yCglgYXRocm93Jy4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IERvIG5vdCBhc3N1bWUgdGhhdCB0aGUgbGFzdCBibG9jawoJcHJvY2Vzc2VkIGluIGEgc3Vicm91dGluZSBpcyBhIGJsb2NrIHdoaWNoIGVuZHMgd2l0aCBhIGByZXQnCglpbnN0cnVjdGlvbi4gIFdpdGggc29tZSBjb250cm9sIGZsb3dzIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3QKCWJsb2NrIGVuZHMgd2l0aCBhbiBgYXRocm93Jy4KCk1vbiBKdW4gMTQgMTM6MTM6MzkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogUmVvcmdhbml6ZWQgdGhlIHBvc3QKIAlldmFsdWF0aW9uIG9mIG5vbiBXRkwgbGVhZGluZyBleHByZXNzaW9uIG5vZGVzLgoKRnJpIEp1biAxMSAyMTozNzoxOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBIYW5kbGUgQVJSQVlfUkVGIGFmdGVyCiAJQ09OVkVSVF9FWFBSLgoKVGh1IEp1biAxMCAyMjoyNjoxNyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBIYW5kbGUgcXVhbGlmaWVkIGV4cHJlc3Npb24KIAliZWdpbm5pbmcgd2l0aCBhIFNUUklOR19DU1QuCgpUaHUgSnVuIDEwIDIwOjI3OjI1IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocmVnaXN0ZXJfZmllbGRzKTogU2V0IERFQ0xfSU5JVElBTCBvbiBib3RoCiAJcHJlLWluaXRpYWxpemVkIHN0YXRpYyBhbmQgcHVibGljIGZpZWxkcy4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IFN0YXRpYyBmaWVsZCBhY2Nlc3MgZXhwcmVzc2lvbnMgdG8gYWx3YXlzCiAJdXNlIHBvaW50ZXIgdHlwZXMuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFdvcmsgb3V0IGJ1cmllZCBDQUxMX0VYUFIgZm9yIHByb3BlcgogCXF1YWxpZmljYXRpb24uIENPTlZFUlRfRVhQUiB0byBiZSByZXNvbHZlZCBhcyBhbiBleHByZXNzaW9uIG5hbWUuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBJZGVudGlmeSBhbmQgYWNjZXNzIHF1YWxpZmllZCBmaW5hbAogCWluaXRpYWxpemVkIGZpZWxkIGluIHN3aXRjaCBzdGF0ZW1lbnQgY2FzZSBleHByZXNzaW9uLgoJKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBQcmUtaW5pdGlhbGl6ZWQgZmllbGQgZGVjbCBjb25zdGFudCB0bwogCWJlIGZvbGRlZC4KCk1vbiBKdW4gIDcgMTY6MDk6NTEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChub3RlX3Bvc3NpYmxlX2NsYXNzbmFtZSk6IE1hcmsgcmV0dXJuZWQgbm9kZSB3aXRoCiAJUVVBTElGSUVEX1Agb25seSBpZiB0aGUgb3JpZ2luYWwgY2xhc3MgbmFtZSBjb250YWluZWQgYSAnLycuCgpTYXQgSnVuICA1IDExOjQ2OjU5IDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChnY2poKTogTW9yZSBwYXJhbGxlbCBidWlsZCBmaXhlcy4KCjE5OTktMDYtMDMgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkNGX0RVTVBfU09VUkNFUywganZnZW5tYWluKTogRml4IHBhcmFsbGVsIGJ1aWxkcy4KCldlZCBKdW4gIDIgMTA6NDQ6MzggMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAobGlua19oYW5kbGVyKTogQ2hhaW4gZXhjZXB0aW9uIGhhbmRsZXJzIGluIG9yZGVyLgoKV2VkIEp1biAgMiAxMDo0MToyNCAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6IEZpbGwgdW5yZWFjaGFibGUgYnl0ZWNvZGUgcmVnaW9ucwogCXdpdGggbm9wcyBhbmQgcHJvY2VzcyBhcyB1c3VhbCBpbiBvcmRlciB0byBhbHdheXMgc2V0IGNvcnJlY3QgRUgKIAlyYW5nZXMuICBFbWl0IGRldGFpbGVkIHdhcm5pbmdzIGFib3V0IHVucmVhY2hhYmxlIGJ5dGVjb2Rlcy4KCldlZCBKdW4gIDIgMTA6MzU6MTMgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IE1hcmsgY2luaXQgYW5kIHV0ZjggdHJlZSBub2RlcyBhcwogCWNvbnN0YW50LgoKRnJpIE1heSAyOCAxODoyMjo0NSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGxvb2t1cF9maWVsZF93cmFwcGVyKTogVW5pZmllZCByZXR1cm5lZCB2YWx1ZSB0byBOVUxMCgkgIG9yIHRoZSBzZWFyY2hlZCBmaWVsZCBkZWNsLgoKRnJpIE1heSAyOCAxMTozNDowNSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBDb252ZXJ0IG51bWVyaWNhbCBjb25zdGFudAogCXZhbHVlcyB0byB0aGUgdHlwZSBvZiB0aGUgYXNzaWduZWQgZmllbGQuCgpUaHUgTWF5IDI3IDE5OjU3OjQwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChsb29rdXBfZmllbGQpOiBSZWxheGVkIHRoZSB0ZXN0IG9uIGNsYXNzIGxvYWRpbmcgZXJyb3IKIAlkZXRlY3Rpb24uCgkqIHBhcnNlLnkgKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiBFbmFiZWxlZCBvbGQgY29kZS4KCldlZCBNYXkgMjYgMTg6MDY6MDIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBMZXQgYF9Kdl9DaGVja0Nhc3QnCiAJZGVjaWRlIHRoZSB2YWxpZGl0eSBvZiB0aGUgY2FzdCBvZiBhIGphdmEubGFuZy5DbG9uZWFibGUgcmVmZXJlbmNlCiAJdG8gYW4gYXJyYXkuCgkocGF0Y2hfY29uZGl0aW9uYWxfZXhwcik6IEZpeGVkIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0bwogCWJpbmFyeV9udW1lcmljX3Byb21vdGlvbi4KCldlZCBNYXkgMjYgMTU6MzM6MDYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogVGFrZSBpbnRvIGFjY291bnQgdGhhdCBhCiAJQ09OVkVSVF9FWFBSIG1pZ2h0IHNwZWNpZnkgYSB0eXBlIGFzIGEgV0ZMLgoKVHVlIE1heSAyNSAxNTowNjoxMyAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Fzc2lnbm1lbnQpOiBTYXZlIHRoZSByaHMgYmVmb3JlIHVzaW5nIGl0IGFzIGFuCglhcmd1bWVudCB0byBfSnZfQ2hlY2tBcnJheVN0b3JlLgoKVHVlIE1heSAyNSAxMToyMzo1OSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX3BhcnNlX2RvY19zZWN0aW9uKTogRml4ZWQgYHRhZycgYnVmZmVyIHNpemUuCgpNb24gTWF5IDI0IDEzOjI2OjAwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogbGV4LmMgKGphdmFfbGV4KTogQWNjZXB0cyBgKycgb3IgYC0nIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgYQoJZmxvYXRpbmcgcG9pbnQgbGl0dGVyYWwgb25seSB3aGVuIHRoZSBleHBvbmVudCBpbmRpY2F0b3IgaGFzIGJlZW4KCXBhcnNlZC4KClNhdCBNYXkgMjIgMTM6NTQ6NDEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmb3JtYWxfcGFyYW1ldGVyOik6IENvbnN0cnVjdCBhcmd1bWVudCB0cmVlIGxpc3QKIAllbGVtZW50IGV2ZW4gaWYgYSB5ZXQgdW5zdXBwb3J0ZWQgZmluYWwgcGFyYW1ldGVyIHdhcyBlbmNvdW50ZXJlZC4KClR1ZSBNYXkgMTggMDA6Mjg6NTggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmaW5pc2hfbWV0aG9kX2RlY2xhcmF0aW9uKTogSXNzdWUgZXJyb3JzIGZvciBuYXRpdmUgb3IKIAlhYnN0cmFjdCBtZXRob2RzIGRlY2xhcmVkIHdpdGggYSBtZXRob2QgYm9keSwgYXMgd2VsbCBhcyBmb3Igbm9uCiAJbmF0aXZlIG9yIG5vbiBhYnN0cmFjdCBtZXRob2RzIHdpdGggbm8gbWV0aG9kIGJvZHkuCgoxOTk5LTA1LTE5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IEluaXRpYWxpemUgdmFyaWFibGUgYGZpZWxkJy4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBmaWVsZCcuCgoJKiBleHByLmMgKGJ1aWxkX2tub3duX21ldGhvZF9yZWYpOiBNYXJrIHBhcmFtZXRlcnMgYG1ldGhvZF90eXBlJywKCWBtZXRob2Rfc2lnbmF0dXJlJyBhbmQgYGFyZ19saXN0JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBsZW5ndGgnLgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogTWFyayB2YXJpYWJsZXMgYHNhd19tYXRoJywKCWBzYXdfbGliYycsIGBzYXdfZ2MnLCBgc2F3X3RocmVhZGxpYicgYW5kIGBzYXdfbGliZ2NqJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcGFyc2UueSAobWF5YmVfZ2VuZXJhdGVfY2xpbml0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJYGhhc19ub25fcHJpbWl0aXZlX2ZpZWxkcycuCgkoZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6IEluaXRpYWxpemUgdmFyaWFibGVzIGBub2RlX3RvX3VzZScKCWFuZCBgY2wnLgoJKHBhdGNoX2Jpbm9wKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBwcm9tX3R5cGUnLgoJKHBhdGNoX3VuYXJ5b3ApOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYHByb21fdHlwZScuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGxhc3QnLgoKCSogeHJlZi5jICh4cmVmX3RhYmxlKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIuCgoxOTk5LTA1LTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqYXZhLWV4Y2VwdC5oIChzdHJ1Y3QgZWhfcmFuZ2UpOiBSZW1vdmVkIHVudXNlZCBgbmV4dCcgbWVtYmVyLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBDYWxsIGNoZWNrX25lc3RlZF9yYW5nZXMKCWFmdGVyIGFkZGluZyBhbGwgZXhjZXB0aW9uIGhhbmRsZXJzLiAgU29ydCBleGNlcHRpb24gcmFuZ2VzIGluCglvcmRlciBvZiBzdGFydCBQQy4KCShzdHJ1Y3QgcGNfaW5kZXgpOiBOZXcgc3RydWN0dXJlLgoJKHN0YXJ0X3BjX2NtcCk6IE5ldyBmdW5jdGlvbi4KCSogZXhjZXB0LmMgKGFkZF9oYW5kbGVyKTogUmV0dXJuIGB2b2lkJy4gIERvbid0IGNhbGwgbGlua19oYW5kbGVyOwoJaW5zdGVhZCBjb25zdHJ1Y3QgYW4gb3JkaW5hcnkgbGlua2VkIGxpc3QgYW5kIGRvIHJhbmdlCgljb2FsZXNjaW5nLgoJKGNoZWNrX25lc3RlZF9yYW5nZXMpOiBOZXcgZnVuY3Rpb24uCgkobGlua19oYW5kbGVyKTogQ2hhbmdlZCBpbnRlcmZhY2UgdG8gYWxsb3cgbWVyZ2luZyBvZiBlaF9yYW5nZXMuCglTcGxpdCBvdmVybGFwcGluZyByYW5nZXMuICBSZXR1cm4gYHZvaWQnLgoKTW9uIE1heSAxNyAxOToyMDoyNCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbnN0cnVjdG9yX2Jsb2NrX2VuZDopOiBOZXcgcnVsZSwgdGFnZ2VkIDxub2RlPi4KCShjb25zdHJ1Y3Rvcl9ib2R5Oik6IFVzZSBgY29uc3RydWN0b3JfYmxvY2tfZW5kJyBpbnN0ZWFkIG9mCiAJYGJsb2NrX2VuZCcuCgpNb24gTWF5IDE3IDE4OjAxOjQwIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc3RhdGVtZW50X25zaTopOiBQb3AgYGZvcicgc3RhdGVtZW50IGJsb2NrLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGFiZWxlZCBibG9ja3MgY29udGFpbmluZyBubyBzdGF0ZW1lbnQgYXJlCiAJbWFya2VkIGFzIGNvbXBsZXRpbmcgbm9ybWFsbHkuCgpGcmkgTWF5IDE0IDEyOjMxOjA4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogeHJlZi5jICh4cmVmX3NldF9jdXJyZW50X2ZwKTogTmV3IGZ1bmN0aW9uLCBkZWZpbmVkLgoJKiB4cmVmLmggKHhyZWZfc2V0X2N1cnJlbnRfZnApOiBOZXcgZnVuY3Rpb24sIHByb3RvdHlwZWQuCgpGcmkgTWF5IDE0IDExOjU3OjU0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogVGFrZSBpbnRvIGFjY291bnQgdGhhdAogCUxBQkVMRURfQkxPQ0tfU1RNVCBjYW4gYmUgZW1wdHkuCgpUaHUgTWF5IDEzIDE4OjMwOjQ4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBXYXJuaW5nIGNoZWNrIG9uIG5vdAogCW92ZXJyaWRpbmcgbWV0aG9kcyB3aXRoIGRlZmF1bHQgYWNjZXNzIGluIG90aGVyIHBhY2thZ2VzIGRvZXMgbm90CiAJYXBwbHkgdG8gYDxjbGluaXQ+Jy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IElmIGJsb2NrIGJvZHkgaXMgYW4gZW1wdHlfc3RtdF9ub2RlLCByZXBsYWNlCiAJaXQgYnkgTlVMTF9UUkVFLiBUaGlzIHByZXZlbnRzIGdjYyBmcm9tIGdlbmVyYXRpbmcgYW4gaXJyZWxldmFudAogCXdhcm5pbmcuCgpUaHUgTWF5IDEzIDEzOjIzOjM4IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogUmVtb3ZlZCBjb2RlIGFjY2VwdGluZyB0byBzZWUgdGhpbmdzCglmYWxsaW5nIHRocm91Z2ggZGVmYXVsdDosIHdoZW4gZG9pbmcgeHJlZnMuCgkqIGphdmEtdHJlZS5oIChkb19ub3RfZm9sZCk6IE5ldyBnbG9iYWwgdmFyaWFibGUsIGRlY2xhcmVkLgoJKiBwYXJzZS55IChkb19ub3RfZm9sZCk6IE5ldyBnbG9iYWwgdmFyaWFibGUsIGRlZmluZWQuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogU2V0IGBkb19ub3RfZm9sZCcgdG8gdGhlIHZhbHVlIG9mCiAJYGZsYWdfZW1pdF94cmVmJy4gV2hlbiBkb2luZyB4cmVmczogY29weSB0aGUgdGhyb3duIGV4Y2VwdGlvbnMsCiAJYW5kIHJlaW5zdGFsbCB0aGVtIGFmdGVyIHRoZW0gaGF2ZSBiZWVuIHB1cmdlZDsgZG8gbm90IGNoZWNrIGZvcgogCWluaXRpYWxpemF0aW9uczsgZG8gbm90IGlzc3VlIG1pc3NpbmcgcmV0dXJuIGVycm9ycy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IERvIG5vdCBhdHRlbXB0IHRvIHBhdGNoIElOU1RBTkNFT0ZfRVhQUiBub2RlcwogCXdoZW4gZG9pbmcgeHJlZnMuCgkocGF0Y2hfYmlub3ApOiBTa2lwIHRoZSBmb2xkIHBhcnQgd2hlbiBkb2luZyB4cmVmcy4KCShidWlsZF9zdHJpbmdfY29uY2F0ZW5hdGlvbik6IFNraXAgdGhlIGNvbmNhdGVuYXRpb24gcGFydCB3aGVuCiAJZG9pbmcgeHJlZnMuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IERvIG5vdCBnZW5lcmF0ZSBhIHRyeS1maW5hbGx5IHdoZW4KIAlkb2luZyB4cmVmcy4KCShwYXRjaF90aHJvd19zdGF0ZW1lbnQpOiBXaGVuIGRvaW5nIHhyZWZzLCBkbyBub3QgY2FsbCBCVUlMRF9USFJPVwogCWFuZCBrZWVwIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgdGhyb3cgd2FzIHNlZW4uCgkqIHR5cGVjay5jIChjb252ZXJ0KTogV2hlbiBgZG9fbm90X2ZvbGQnIGlzIHNldCwgZG8gbm90IGF0dGVtcHQKIAlhbnkgdHJlYXRtZW50IG9uIHRoZSBjb252ZXJ0ZWQgbm9kZSBhbiBzaW1wbHkgcmV0dXJuIGEgTk9QX0VYUFIgb2YKIAl0aGUgdGFyZ2V0ZWQgdHlwZS4KCSogeHJlZi5jICh4cmVmX2dldF9kYXRhKTogTmV3IGZ1bmN0aW9uLCBkZWZpbmVkLgoJKiB4cmVmLmggKHhyZWZfZ2V0X2RhdGEpOiBOZXcgZnVuY3Rpb24sIGRlY2xhcmVkLgoJKFhSRUZfR0VUX0RBVEEpOiBVc2UgeHJlZl9nZXRfZGF0YS4KCjE5OTktMDUtMTMgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdqYXZhaC5jIChwcmludF9pbmNsdWRlKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIGludAoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhIHNpZ25lZCB2YWx1ZS4KCShhZGRfbmFtZWxldCk6IExpa2V3aXNlLgoKMTk5OS0wNS0xMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogTWFyayBwYXJhbWV0ZXIgYG5hcmdzJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKFBSRV9MT09LVVBfU1dJVENIKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBtYXRjaCcuCgoJKiBqY2YtaW8uYyAoamNmX3VuZXhwZWN0ZWRfZW9mKTogTWFyayBwYXJhbWV0ZXIgYGNvdW50JyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogamNmLXJlYWRlci5jIChnZXRfYXR0cmlidXRlKTogQ2FzdCBhIHZhbHVlIHRvIGxvbmcKCXdoZW4gY29tcGFyaW5nIGFnYWluc3QgYSBzaWduZWQgZXhwcmVzc2lvbi4gIExpa2V3aXNlLgoKCSogbGV4Lmg6IE5ldmVyIGRlZmluZSBIT1NUX1dJREVfSU5ULCBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIG9yCglIT1NUX0JJVFNfUEVSX0NIQVIuCgoxOTk5LTA1LTExICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBJZiB0aGUgY3VycmVudCBtZXRob2QgY29udGFpbnMKCWFueSBleGNlcHRpb24gaGFuZGxlcnMsIGZvcmNlIGFzeW5jaHJvbm91c19leGNlcHRpb25zOiB0aGlzIGlzCgluZWNlc3NhcnkgYmVjYXVzZSBzaWduYWwgaGFuZGxlcnMgaW4gbGliamF2YSBtYXkgdGhyb3cgZXhjZXB0aW9ucy4KCSogZGVjbC5jIChlbmRfamF2YV9tZXRob2QpOiBEaXR0by4KCjE5OTktMDUtMTEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBEb24ndCBkZWZpbmUgV0lUSF9USFJFQURfeCBvciBXSVRIX0dDX3gKCWZsYWdzLgoJKiBqdnNwZWMuYyAoVEhSRUFEX05BTUUpOiBSZW1vdmVkLgoJKEdDX05BTUUpOiBMaWtld2lzZS4KCShNQVRITElCKTogTGlrZXdpc2UuCgkoV0lUSExJQkMpOiBMaWtld2lzZS4KCShHQ0xJQik6IExpa2V3aXNlLgoJKFRIUkVBRExJQik6IExpa2V3aXNlLgoJKE1BVEhfTElCUkFSWSk6IExpa2V3aXNlLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogRG9uJ3QgYWRkIGAtbCcgb3B0aW9ucyB0byBjb21tYW5kIGxpbmUuCglJbnN0ZWFkLCBhZGQgYSBzaW5nbGUgLS1zcGVjcyBvcHRpb24uICBSZWNvZ25pemUgYC1MJyBvcHRpb25zIGFuZAoJdXNlIHRoZW0gdG8gc2VhcmNoIGZvciBzcGVjIGZpbGUuCgkoZmluZF9zcGVjX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkoU1BFQ19GSUxFKTogTmV3IGRlZmluZS4KClR1ZSBNYXkgMTEgMTE6NDY6MzYgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy1vcHRpb25zLmg6IC1NRCwgLU1NRCwgLU0gYW5kIC1NTSBub3QgbmVlZGVkIGhlcmUgZm9yCgljcHBsaWItZW5hYmxlZCBidWlsZC4KCjE5OTktMDUtMDUgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFrZV9maWVsZF92YWx1ZSk6ICBERUNMX0lOSVRJQUwgbWF5IGJlIGEgc3RyaW5nIGxpdGVyYWw7Cgl0ZW1wb3JhcmlseSB6ZXJvIGl0IHdoaWxlIGNhbGxpbmcgcmVzdF9vZl9kZWNsX2NvbXBpbGF0aW9uLgoKCSogamF2YS10cmVlLmggKHN0cmluZ19wdHJfdHlwZV9ub2RlKTogIEFkZCBkZWNsYXJhdGlvbi4KCSogZGVjbC5jOiAgRGVmaW5lIGFuZCBpbml0aWFsaXplIHN0cmluZ19wdHJfdHlwZV9ub2RlLgoJKiBwYXJzZS55IChwYXRjaF9zdHJpbmdfY3N0KTogIFVzZSBzdHJpbmdfcHRyX3R5cGVfbm9kZS4KCgkqIHBhcnNlLmggKExPT1BfSEFTX0xBQkVMX1AsIExPT1BfSEFTX0xBQkVMX1NLSVBfUCk6ICBSZW1vdmVkLgoJKiBwYXJzZS55IChmb3Jfc3RhdGVtZW50KTogIE5vdyB1bmNvbmRpdGlvbmFsbHkgZXhpdF9ibG9jay4KCShmaW5pc2hfbGFiZWxlZF9zdGF0ZW1lbnQpOiAgTm8gbG9uZ2VyIGV4aXRfYmxvY2sgaWYgZm9yLWxvb3AuCgkocGF0Y2hfbG9vcF9zdGF0ZW1lbnQpOiAgQ2hlY2sgaGFyZGVyIGlmIHRoZSBsb29wIGlzIGFscmVhZHkgbGFiZWxlZC4KCgkqIHBhcnNlLnkgKHBhdGNoX2luaXRpYWxpemVkX3N0YXRpY19maWVsZCk6ICBSZW1vdmVkIGZ1bmN0aW9uLgoJKG1heWJlX2dlbmVyYXRlX2NsaW5pdCk6ICBSZW1vdmVkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGludGVyZmFjZXMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6ICBEbyBhIHByZWxpbWluYXJ5IGphdmFfY29tcGxldGVfdHJlZQoJb24gPGNsaW5pdD4gdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBiZSByZW1vdmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6ICBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBmb3IgPGNsaW5pdD4uCgkoamF2YV9jb21wbGV0ZV9saHMpOiAgRm9yIEJMT0NLIGFuZCBFWFBSX1dJVEhfRklMRV9MT0NBVElPTgoJb3B0aW1pemUgaWYgd2UgZ2V0IGJhY2sgZW1wdHlfc3RtdF9ub2RlLgoJRm9yIE1PRElGWV9FWFBSLCByZS1kbyBjaGVja2luZyBvZiBzdGF0aWMgaW5pdGlhbGl6ZXJzLgoJKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiAgRG9uJ3QgcmV0dXJuIGltbWVkaWF0ZSBpZiBWQVJfREVDTC4KCUZvciBWQVJfREVDTCwgcGFzcyBjb3JyZWN0IGNvbnRleHQuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgQmV0dGVyIGVycm9yIG1lc3NhZ2VzLgoKMTk5OS0wNS0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55IChpbnRlcmZhY2VfZGVjbGFyYXRpb24pOiBDYWxsCglyZXBvcnRfY2xhc3NfZGVjbGFyYXRpb24gZm9yIGludGVyZmFjZXMuCgoxOTk5LTA0LTMwIDIwOjU0IC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluOiBSZW1vdmUgLXYgZnJvbSBiaXNvbiBjb21tYW5kIGxpbmVzLgoKRnJpIEFwciAzMCAxNzo1NDo0MCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNoZWNrLWluaXQuYyAoY2hlY2tfaW5pdCk6IEV4Y2x1ZGUgYSBjYXNlIG9mIGVycm9yIHdoZW4gZG9pbmcKIAl4cmVmcy4KCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6IERvbid0IGdlbmVyYXRlIHRoZSBlcnJvciBtZXNzYWdlCiAJdHdpY2Ugd2hlbiBjb21waWxpbmcgZnJvbSBzb3VyY2UuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGRlZCBgLVdyZWR1bmRhbnQtbW9kaWZlcnMnIGFuZAoJYC1XdW51c3VwcG9ydGVkLWpkazExJyBmbGFncyBhbmQgaGVscCB0ZXh0LgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZGVkIHN1cHBvcnQgZm9yCiAJYC1XdW5zdXBwb3J0ZWQtamRrMTEnIGFuZCBgLVdyZWR1bmRhbnQtbW9kaWZpZXJzJy4KCWZsYWdfc3RhdGljX2xvY2FsX2pkazExIGFuZCBmbGFnX3JlZHVuZGFudCBzZXQgYWNjb3JkaW5nbHkuCgkqIGxleC5jIChqYXZhX2xleCk6IENhbGwgQlVJTERfT1BFUkFUT1Igb24gQ0NCX1RLLgoJKiBwYXJzZS5oIChFWFBSX1dGTF9BRERfQ09MKTogTmV3IG1hY3JvLgoJKERFQ0xfRU5EX1NPVVJDRV9MSU5FKTogTGlrZXdpc2UuCgkoREVDTF9JTkhFUklURURfU09VUkNFX0xJTkUpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoc3RhdGljX3JlZl9lcnIpOiBOZXcgZnVuY3Rpb24sIHByb3RvdHlwZWQuCgkoQ0NCX1RLKTogTm93IHRhZ2dlZCA8b3BlcmF0b3I+LgoJKGNsYXNzX2JvZHk6KTogUmVtZW1iZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBjbG9zaW5nICd9JyBvZiBhIGNsYXNzCiAJZGVmaW5pdGlvbiB3aGVuIGRvaW5nIHhyZWZzLgoJKGJsb2NrOik6IExpa2V3aXNlLgoJKGJsb2NrX2VuZDopOiBMaWtld2lzZS4KCShjcmVhdGVfY2xhc3MpOiBSZW1lbWJlciB0aGUgbG9jYXRpb24gb2YgdGhlIGluaGVyaXRlZCBjbGFzcwogCWlkZW50aWZpZXIgd2hlbiBkb2luZyB4cmVmcy4KCShyZWdpc3Rlcl9maWVsZHMpOiBBZGRlZCB0ZXN0IG9uIGZpcnN0IG9wZXJhbmQgb2YgYGluaXQnIGJlZm9yZQogCXRlc3RpbmcgaXQgVFJFRV9DT0RFLgoJKG1ldGhvZF9oZWFkZXIpOiBTdG9yZSB0aGUgbG9jYXRpb24gb2YgdGhlIGNsYXNzIGlkZW50aWZpZXIgaW4gdGhlCiAJY2xhc3MgZGVjbCB3aGVuIGRvaW5nIHhyZWZzLgoJKGZpbmlzaF9tZXRob2RfZGVjbGFyYXRpb24pOiBEb24ndCBjb21iaW5lIGZpcnN0L2xhc3QgbWV0aG9kIGxpbmUKIAl3aGVuIGRvaW5nIHhyZWYuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBXYXJuaW5nIGNoZWNrIG9uIG5vdCBvdmVycmlkaW5nCiAJbWV0aG9kcyB3aXRoIGRlZmF1bHQgYWNjZXNzIG9uIG90aGVyIHBhY2thZ2VzIG1vdmUgYmVmb3JlIGNoZWNrIG9uCiAJc3RhdGljIG1ldGhvZHMuIEluaXRpYWxpemF0aW9uIG9mIGBhZmxhZ3MnIGFsc28gbW92ZWQgdXAuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBDYWxsIHN0YXRpY19yZWZfZXJyIHRvIHJlcG9ydCB0aGUgZXJyb3IuCgkoc3RhdGljX3JlZl9lcnIpOiBOZXcgZnVuY3Rpb24sIGltcGxlbWVudGVkLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogUmV0dXJuZWQgc2ltcGxpZmllZCBzdGF0aWMgZmllbGQgYWNjZXNzCiAJd2hlbiBkb2luZyB4cmVmcy4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBDaGVjayBmb3IgaWxsZWdhbCB1c2Ugb2YKIAlzdGF0aWMgZmllbGRzIGluIGEgbm9uIHN0YXRpYyBjb250ZXh0LiBDYWxsIHN0YXRpY19yZWZfZXJyIHRvCiAJcmVwb3J0IGVycm9yIGluIHZhcmlvdXMgcGxhY2VzLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IERvIG5vdCBmb2xkIGluaXRpYWxpemVkIHN0YXRpYyBmaWVsZHMgd2hlbgogCWRvaW5nIHhyZWZzLgoJKGphdmFfY29tcGxldGVfbGhzKTogTGlrZXdpc2UuCgoxOTk5LTA0LTI5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZ2VuZXJhdGVfbmFtZSk6IFVzZSBBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwgdG8KCWNyZWF0ZSBpbnRlcm5hbCBsYWJlbHMuCgkobG9va3VwX2xhYmVsKTogRGl0dG8uCgpTYXQgQXByIDI0IDE2OjUwOjE5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6IEdlbmVyYXRlIDxjbGluaXQ+J3MgcnRsIGZvcgogCWludGVyZmFjZXMuCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBjYWxsIF9Kdl9Jbml0Q2xhc3MKIAlmb3IgaW50ZXJmYWNlcycgPGNsaW5pdD4uCgkqIGV4cHIuYyAobG9va3VwX2ZpZWxkKTogU2VhcmNoIGZvciBmaWVsZHMgaW4gaW50ZXJmYWNlcy4KCShleHBhbmRfaW52b2tlKTogRml4ZWQgaW5kZW50YXRpb24uCgkoZXhwYW5kX2phdmFfZmllbGRfb3ApOiBMaWtld2lzZS4gVXNlIElTX0NMSU5JVC4KCSogcGFyc2UuaCAoSlBSSU1JVElWRV9UWVBFX09SX1ZPSURfUCk6IE1hY3JvIHJlbW92ZWQuCgkoSVNfQ0xJTklUKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55ICh0eXBlX2RlY2xhcmF0aW9uOik6IENhbGwgbWF5YmVfZ2VuZXJhdGVfY2xpbml0IGFmdGVyIGFuCiAJaW50ZXJmYWNlIHdhcyBwYXJzZWQuCgkobWF5YmVfZ2VuZXJhdGVfY2xpbml0KTogRG9uJ3QgZ2VuZXJhdGUgaWYgdGhlIGN1cnJlbnQgY2xhc3MgaXMgYW4KIAlpbnRlcmZhY2Ugd2l0aCBvbmx5IGZpZWxkcyBvZiBwcmltaXRpdmUgdHlwZXMuCgkocmVzZXRfbWV0aG9kX25hbWUpOiBVc2UgSVNfQ0xJTklULgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IEV4cGFuZCA8Y2xpbml0PiB3aGVuIGl0IGV4aXN0cyBmb3IKIAlpbnRlcmZhY2VzLiBVc2UgSVNfQ0xJTklULgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogVXNlIERFQ0xfQ09OVEVYVCBpbnN0ZWFkIG9mCiAJY3VycmVudF9jbGFzcyB0byBidWlsZCBzdGF0aWMgZmllbGQgcmVmZXJlbmNlcy4KCShqYXZhX2NvbXBsZXRlX2xocyk6IFVzZSBJU19fQ0xJTklULiBEb24ndCB1c2UgU0FWRV9FWFBSIG9uCiAJQVJSQVlfUkVGIHdoZW4gZG9pbmcgeHJlZmVyZW5jaW5nLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQpOiBGaXhlZCB0eXBvIGluIGxlYWRpbmcgY29tbWVudC4gVXNlCiAJSVNfQ0xJTklULgoJKHBhdGNoX2FycmF5X3JlZik6IERvbid0IGZ1bGx5IGV4cGFuZCBhcnJheSByZWZlcmVuY2VzIHdoZW4KIAl4cmVmZXJlbmNpbmcuCgkocGF0Y2hfcmV0dXJuKTogVXNlIElTX0NMSU5JVC4KCShwYXRjaF90aHJvd19zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCjE5OTktMDQtMjIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9TUkNTKTogQWRkZWQgY2hlY2staW5pdC5jLgoKV2VkIEFwciAyMSAxMToxMzozNiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHJlZGVmX2ZpbGVuYW1lcywgcHJlZGVmX2ZpbGVuYW1lc19zaXplKTogTmV3IGdsb2JhbHMKCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IHByZWRlZl9maWxlbmFtZXMgYW5kIHByZWRlZl9maWxlbmFtZXNfc2l6ZQogCWluaXRpYWxpemVkLgoJKiBqYXZhLXRyZWUuaCAocHJlZGVmX2ZpbGVuYW1lcywgcHJlZGVmX2ZpbGVuYW1lc19zaXplKTogRGVjbGFyZWQKIAlleHRlcm4uCgkqIGpjZi1wYXJzZS5jIChwcmVkZWZpbmVkX2ZpbGVuYW1lX3ApOiBOZXcgZnVuY3Rpb24uCgkoeXlwYXJzZSk6IENoZWNrIHRoYXQgZmlsZXMgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgc3BlY2lmaWVkIG9ubHkKIAlvbmNlIGFuZCBpc3N1ZSBhIHdhcm5pbmcgb3RoZXJ3aXNlLgoJKiBwYXJzZS5oIChKUFJJTUlUSVZFX1RZUEVfT1JfVk9JRF9QKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogTnVsbGlmeSBOT1AgbWV0aG9kIGJvZGllcywgdG8KIAlhdm9pZCBhIGdjYyB3YXJuaW5nIHdpdGggLVcgLVdhbGwgdHVybmVkIG9uLgoJKGphdmFfZXhwYW5kX2NsYXNzZXMpOiBBYm9ydCBpZiBlcnJvcnMgd2VyZSBlbmNvdW50ZXJlZC4KCShqYXZhX2NvbXBsZXRlX2xocyk6IElmIHRoZSBjcm9zcyByZWZlcmVuY2UgZmxhZyBpcyBzZXQsIHdyYXAKIAlmaWVsZCBERUNMIG5vZGUgYXJvdW5kIGEgV0ZMIHdoZW4gcmVzb2x2aW5nIGV4cHJlc3Npb24gbmFtZS4KCk1vbiBBcHIgMTkgMTQ6NDQ6NDggMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEZpeGVkIHJldHVybmVkIHZhbHVlIHdoZW4gcGFyc2luZwogCWAtZnhyZWY9Li4uJyBhbmQgYC1XYWxsJy4KCSogcGFyc2UueSAoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IERvIG5vdCBnZW5lcmF0ZSBjb2RlIHdoZW4KIAlmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBEbyBub3QgYnVpbGQgc3RhdGljIGZpZWxkIGFjY2VzcyB3aGVuCiAJZmxhZ19lbWl0X3hyZWYgaXMgc2V0LgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogTm8gc3BlY2lhbCB0cmVhdG1lbnQgb24gYGxlbmd0aCcgd2hlbgogCWZsYWdfZW1pdF94cmVmIGlzIHNldC4gRG8gbm90IGJ1aWxkIHF1YWxpZmllZCBzdGF0aWMgZmllbGQgYWNjZXNzCiAJd2hlbiBmbGFnX2VtaXRfeHJlZiBpcyBzZXQuCgkocGF0Y2hfaW52b2tlKTogS2VlcCB0aGUgbWV0aG9kIERFQ0wgYXMgb3BlcmFuZCAwIG9mIHRoZSBDQUxMX0VYUFIKIAl3aGVuIGZsYWdfZW1pdF94cmVmIGlzIHNldC4KCShwYXRjaF9hc3NpZ25tZW50KTogRG8gbm90IGdlbmVyYXRlIGFycmF5IHN0b3JlIHJ1bnRpbWUgY2hlY2sgd2hlbgogCWZsYWdfZW1pdF94cmVmIGlzIHNldC4KCSogeHJlZi5jICh4cmVmX2ZsYWdfdmFsdWUpOiBGaXhlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbgogCWluZGVudGF0aW9uLgoJKHhzZXRfc2V0X2RhdGEpOiBOZXcgZnVuY3Rpb24uCgkqIHhyZWYuaCAoeHJlZl9zZXRfZGF0YSk6IEFkZGVkIHByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uLgoJKHR5cGVkZWYgc3RydWN0IHhyZWZfZmxhZ190YWJsZSk6IE5ldyBmaWVsZCBkYXRhLgoJKFhSRUZfR0VUX0RBVEEpOiBOZXcgbWFjcm8uCgoxOTk5LTA0LTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiB4cmVmLmggKGVudW0pOiBSZW1vdmVkIHRyYWlsaW5nIGNvbW1hLgoKCSogcGFyc2UueSAocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogQWRkZWQgbWlzc2luZwoJYGJyZWFrJy4KClRodSBBcHIgMTUgMTM6MDg6MDMgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBnamF2YWguYzogTmV3IHByb3RvdHlwZXMgZm9yIGphdmFfZmxvYXRfZmluaXRlIGFuZAoJamF2YV9kb3VibGVfZmluaXRlLgoKTW9uIEFwciAxMiAxODoyNzozMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX3VuYXJ5b3ApOiBGaXhlZCArKy8tLSBvcGVyYXRvciBjaGVjayBvbiBhcnJheQogCXJlZmVyZW5jZXMuCgpUdWUgQXByICA2IDIzOjE1OjUyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChUUkVFX0gpOiBBZGQgdHJlZS1jaGVjay5oLgoJKFJUTF9IKTogQWRkIGdlbnJ0bC5oLgoKVHVlIEFwciAgNiAxNToxNTo1MSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2Fzc2lnbm1lbnQpOiBBZGRlZCBBcnJheVN0b3JlRXhjZXB0aW9uIHJ1bnRpbWUKCWNoZWNrLgoKMTk5OS0wNC0wNiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKHBvcF90eXBlXzApOiAgTmV3IGZ1bmN0aW9uLgoJKHBvcF90eXBlKTogIFVzZSBwb3BfdHlwZV8wLgoJKiBqYXZhLXRyZWUuaCAocG9wX3R5cGVfMCk6ICBOZXcgZGVjbGFyYXRpb24uCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBDaGVjayByZXR1cm4gaW5zdHJ1Y3Rpb25zLgoKCSogcGFyc2UueSAocGF0Y2hfYmlub3ApOiAgRG9uJ3QgZm9sZCBpZiBub24tY29uc3RhbnQgYW5kIGVtaXRpbmcKCWNsYXNzIGZpbGVzLgoKTW9uIEFwciAgNSAxNjowNjowOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZ2phdmFoLm8pOiBEZXBlbmQgb24gJChKQVZBX1RSRUVfSCkuCgoJKiBnamF2YWguYzogSW5jbHVkZSBtYXRoLmggZWFybGllci4gIEluY2x1ZGUgdHJlZS5oL2phdmEtdHJlZS5oLgoJKG1haW5famNmKTogRG9uJ3QgZGVmaW5lLgoJKHByb2Nlc3NfZmlsZSk6IERvbid0IHNldCBgbWFpbl9qY2YnLgoKCSogamF2YS10cmVlLmggKG1haW5famNmKTogRG9uJ3QgZGVjbGFyZS4KCgkqIGpjZi1wYXJzZS5jIChtYWluX2pjZik6IEFkZCBzdGF0aWMgZGVmaW5pdGlvbi4KCgkqIGxhbmcuYyAobWFpbl9qY2YpOiBEb24ndCBkZWZpbmUuCgpNb24gQXByICA1IDE1OjQzOjUxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNsYXNzLmMgKGFkZF9tZXRob2RfMSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGBiemVybycgdG8gUFRSLgoKCSogZGVjbC5jIChjb3B5X2xhbmdfZGVjbCk6IExpa2V3aXNlIGZvciBgYmNvcHknLgoKCSogamNmLWRlcGVuZC5jOiBJbmNsdWRlICJjb25maWcuaCIsIG5vdCA8Y29uZmlnLmg+LgoKCSogamNmLXBhcnNlLmMgKGpjZl9maWd1cmVfZmlsZV90eXBlKTogQ2FzdCB0aGUgYXJndW1lbnRzIG9mCglgYmNvcHknIHRvIFBUUi4KCgkqIGpjZi1wYXRoLmM6IEluY2x1ZGUgImNvbmZpZy5oIiwgbm90IDxjb25maWcuaD4uCgoJKiBsZXguYzogRG9uJ3QgaW5jbHVkZSB2YXJpb3VzIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoamF2YV9pbml0X2xleCk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGBiemVybycgdG8gUFRSCgoJKiBwYXJzZS1zY2FuLnkgKGphdmFfcHVzaF9wYXJzZXJfY29udGV4dCk6IExpa2V3aXNlLgoKCSogcGFyc2UueSAoamF2YV9wdXNoX3BhcnNlcl9jb250ZXh0KTogTGlrZXdpc2UuCgkocGF0Y2hfYmNfc3RhdGVtZW50KTogTWF0Y2ggZm9ybWF0IHNwZWNpZmllciB0byB2YXJpYWJsZSBhcmd1bWVudC4KCgkqIHhyZWYuYzogRG9uJ3QgaW5jbHVkZSA8c3RkaW8uaD4uCgpNb24gQXByICA1IDExOjI0OjE5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc3RydWN0IHBhcnNlcl9jdHh0ICpjdHhwKTogTm93IGdsb2JhbC4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZSBXRkwgY29tcG91bmQgdmFsdWUgZm9yIHRoZQogCWRlY2xhcmF0aW9uIHNvdXJjZSBsaW5lIHZhbHVlLCB3aGVuIGRvaW5nIGNyb3NzLXJlZmVyZW5jaW5nLgoKMTk5OS0wMy0zMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBBbGxvdyBjb25zdGFudHMgb2Ygb3RoZXIgdHlwZXMuCgkocHJpbnRfaW5jbHVkZSk6IEdlbmVyYXRlIGluY2x1ZGUgd2hlbiBuZXcgbmFtZSBpcyBwcm9wZXIgcHJlZml4CglvZiBhbHJlYWR5IHByaW50ZWQgbmFtZS4KCShhZGRfbmFtZWxldCk6IExpa2V3aXNlLgoJKGN4eF9rZXl3b3JkX3N1YnN0KTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X21ldGhvZF9pbmZvKTogVXNlIGl0LgoJKHByaW50X2ZpZWxkX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2ZpZWxkX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfZmllbGRfaW5mbyk6IFVzZSBnZXRfZmllbGRfbmFtZSBhbmQgcHJpbnRfZmllbGRfbmFtZS4KCldlZCBNYXIgMzEgMTE6MDA6MzIgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGtleXdvcmQuaCk6IEdlbmVyYXRlIHVzaW5nIGdwZXJmIGxhbmd1YWdlICdDJywgbm90CgknS1ItQycsIHNvIGdwZXJmIHVzZXMgdGhlIGBjb25zdCcga2V5d29yZCBvbiBzdHJpbmdzLgoKCSoga2V5d29yZC5ncGVyZiAoamF2YV9rZXl3b3JkKTogQ29uc3QtaWZ5IGEgY2hhciouCgpUdWUgTWFyIDMwIDExOjMxOjUzIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYmNfc3RhdGVtZW50KTogRml4ZWQgaWRlbnRhdGlvbiBhbmQgYSBib2d1cwogCWBwcmludGYnIGZvcm1hdC4KClR1ZSBNYXIgMzAgMTE6Mjk6MjkgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9hc3NpZ25tZW50KTogQWxsb3cgc3RhdGljIHZhcmlhYmxlcyBpbiBvdGhlcgogCWNsYXNzZXMgdG8gYmUgYXNzaWduZWQuCgpTdW4gTWFyIDI4IDIyOjEyOjEwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNsYXNzLmMgKG1heWJlX2FkZF9pbnRlcmZhY2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCglgaW50ZXJmYWNlX2JpbmZvJy4KCShtYWtlX2NsYXNzX2RhdGEpOiBVc2UgPSBmb3IgYXNzaWdubWVudCwgbm90ID09LiAgTGlrZXdpc2UuCgkoZW1pdF9yZWdpc3Rlcl9jbGFzc2VzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgZGVjbCcuCgoJKiBsZXguYzogRml4IGNvbW1lbnQgc28gYXMgbm90IHRvIGNvbnRhaW4gYW4gZW1iZWRkZWQgYC8qJy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWBzZWxmX3R5cGUnLgoKU2F0IE1hciAyNyAxNTo0OToxOCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbXBsZXRlX2xvb3BfYm9keSk6ICBSZW5hbWUgdG8gZmluaXNoX2xvb3BfYm9keS4KIAkoY29tcGxldGVfbGFiZWxlZF9zdGF0ZW1lbnQpOiAgUmVuYW1lIHRvIGZpbmlzaF9sYWJlbGVkX3N0YXRlbWVudC4KCShjb21wbGV0ZV9mb3JfbG9vcCk6ICBSZW5hbWUgdG8gZmluaXNoX2Zvcl9sb29wLgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsYXJhdGlvbik6ICBSZW5hbWUgdG8gZmluaXNoX21ldGhvZF9kZWNsYXJhdGlvbi4KCgkqIGphdmEtdHJlZS5oIChjb250aW51ZV9pZGVudGlmaWVyX25vZGUpOiAgTmV3IGdsb2JhbCBub2RlLgoJKiBkZWNsLmM6ICBEZWZpbmUgYW5kIGluaXRpYWxpemUgY29udGludWVfaWRlbnRpZmllcl9ub2RlLgoJKiBwYXJzZS55IChnZW5lcmF0ZV9sYWJlbGVkX2Jsb2NrKTogIFJlbW92ZSAtIG5vIGxvbmdlciBuZWVkZWQuCgkoYnVpbGRfbG9vcF9ib2R5KTogIFVzZSBjb250aW51ZV9pZGVudGlmaWVyX25vZGUgZm9yIGNvbnRpbnVlIGJsb2NrLgoJKGZpbmlzaF9sYWJlbGVkX3N0YXRlbWVudCk6ICBBbHNvIGRvIHBvcF9sYWJlbGVkX2Jsb2NrIGFjdGlvbnMuCgkoamF2YV9jb21wbGV0ZV9saHMpOiAgUE9QX0xPT1AgZXZlbiBpZiBlcnJvci4KCShidWlsZF9sYWJlbGVkX2Jsb2NrKTogIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGNvbnRpbnVlX2lkZW50aWZpZXJfbm9kZS4KCShwYXRjaF9sb29wX3N0YXRlbWVudCk6ICBSZS1vcmdhbml6ZS4KCShwYXRjaF9iY19zdGF0ZW1lbnQpOiAgUmUtd3JpdGUuCgpTYXQgTWFyIDI3IDE1OjEzOjIxIDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoRVhQUl9XRkxfR0VUX0xJTkVDT0wpOiBTZXQgYSBsaW5lIGFuZCBjb2x1bW4gY291bnQKIAl1c2luZyBhIFdGTCBjb21wb3VuZCB2YWx1ZS4KCSogcGFyc2UueSAoeHJlZi5oKTogSW5jbHVkZS4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBTZXQgREVDTF9TT1VSQ0VfTElORSB0byB0aGUKIAlXRkwgY29tcG91bmQgdmFsdWUuCgkocmVnaXN0ZXJfZmllbGRzKTogU2V0IFdGTCBjb21wb3VuZCB2YWx1ZSB0byBsaW5lbm8gaWYgZG9pbmcKIAl4cmVmcy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBDYWxsIGV4cGFuZF94cmVmIGlmIGZsYWdfZW1pdF94cmVmCiAJaXMgc2V0LgoJKiB4cmVmLmMgKHN5c3RlbS5oLCBqY2YuaCwgcGFyc2UuaCwgb2JzdGFjay5oKTogSW5jbHVkZS4KCSogeHJlZi5oIChleHBhbmRfeHJlZik6IFByb3RvdHlwZSByZW5hbWVkIGZyb20geHJlZl9nZW5lcmF0ZS4KClNhdCBNYXIgMjcgMTQ6MTY6MzIgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oIChCTE9DS19DSEFJTl9ERUNMKTogTmV3IHVzZSBHRVRfQ1VSUkVOVF9CTE9DSy4KCShHRVRfQ1VSUkVOVF9CTE9DSyk6IE5ldyBtYWNyby4KCSogcGFyc2UueSAoY3VycmVudF9zdGF0aWNfYmxvY2spOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKG1ldGhvZF9ib2R5Oik6IERlZmluZSBhY3Rpb24uCgkoY29tcGxldGVfbWV0aG9kX2RlY2xhcmF0aW9uKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZGVjbCB0byBOVUxMCiAJd2hlbiB3b3JrIG9uIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBkb25lLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogVXNlIEdFVF9DVVJSRU5UX0JMT0NLLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogRGlzYWJsZSB0aGUgdXNlIG9mIGB0aGlzJyB3aGVuCiAJZXhwYW5kaW5nIDxjbGluaXQ+LgoJKGVudGVyX2FfYmxvY2spOiBJZiBubyBjdXJyZW50IG1ldGhvZCBleGlzdCwgdXNlCiAJY3VycmVudF9zdGF0aWNfYmxvY2sgdG8gbGluayBzdGF0aWMgaW5pdGlhbGl6ZXIgYmxvY2tzLgoJKGV4aXRfYmxvY2spOiBSZXdyaXR0ZW4gdG8gdXNlIGN1cnJlbnRfc3RhdGljX2Jsb2NrIHdoZW4gbm8gY3VycmVudAogCW1ldGhvZCBkZWNsIGV4aXN0cy4KCShsb29rdXBfbmFtZV9pbl9ibG9ja3MpOiBVc2UgR0VUX0NVUlJFTlRfQkxPQ0suCgkocGF0Y2hfcmV0dXJuKTogRm9yYmlkIHRoZSB1c2Ugb2YgYHJldHVybicgaW4gc3RhdGljIGluaXRpYWxpemVycy4KCShwYXRjaF90aHJvd19zdGF0ZW1lbnQpOiBGaXhlZCBpbmRlbnRhdGlvbi4gSXNzdWUgc3BlY2lmaWMgZXJyb3IKIAlmb3IgdW5jYXVnaHQgdGhyb3duIGNoZWNrZWQgZXhjZXB0aW9uIGluIHN0YXRpYyBpbml0aWFsaXplcgogCWJsb2Nrcy4gUmVtb3ZlZCBGSVhNRS4KCjE5OTktMDMtMjUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogamF2YS9NYWtlLWxhbmcuaW46IFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBnY2ouby9nY2ouYy4KCUxpbmsgZ2NqIGZyb20gZ2NjLm8uCgpUdWUgTWFyIDIzIDEwOjQ4OjI0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogV2hlbiBkZWFsaW5nCiAJd2l0aCBpbnRlcmZhY2U6IGVuc3VyZSB0aGF0IGEgZ2l2ZW4gaW50ZXJmYWNlIG9yIGphdmEubGFuZy5PYmplY3QKIAlhcmUgc2VhcmNoZWQgb25seSBvbmNlLgoKVHVlIE1hciAyMyAxMDowNToyNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnamF2YWguYyAocHJpbnRfY19kZWNsKTogUmVtb3ZlIHVudXNlZCBhcmd1bWVudCBgZmxhZ3MnLgoKCSogamNmLWR1bXAuYyAocHJpbnRfYWNjZXNzX2ZsYWdzKTogQWRkIGJyYWNlcyBhcm91bmQgaWYtZWxzZS4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IFdyYXAgdmFyaWFibGUgYGxlbicgaW4gbWFjcm8KCUNPTUJJTkVfSU5QVVRTLgoKCSogbGV4LmMgKGJ1aWxkX3dmbF9ub2RlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBsZXguaCAoYnVpbGRfd2ZsX25vZGUpOiBSZW1vdmUgc3RhdGljIHByb3RvdHlwZS4KCgkqIHBhcnNlLnk6IEluY2x1ZGUgbGV4LmMgZWFybHkgZW5vdWdoIHRvIGRlY2xhcmUgZXZlcnl0aGluZyBuZWVkZWQuCglFbnN1cmUgY2FsbHMgdG8gYGJ1aWxkX3dmbF9ub2RlJyBwYXNzIHRoZSBwcm9wZXIgYXJndW1lbnRzLgoJKGNyZWF0ZV9jbGFzcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHN1cGVyX2RlY2wnLgoJKGdldF9wcmludGFibGVfbWV0aG9kX25hbWUpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBuYW1lJy4KCk1vbiBNYXIgMjIgMjA6MTQ6MjYgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBDaGFuZ2Vsb2c6IEZpeGVkIDE5OTktMDMtMjIgdHlwb3MuCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogRml4ZWQgdHlwbyBpbiBlcnJvciBzdHJpbmcgaW4gdGhlCiAJWEFSRyBzZWN0aW9uLgoKMTk5OS0wMy0yMiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogQWRkZWQgZW50cnkgeHJlZi5vLgoJKHhyZWYubyk6IE5ldyBydWxlLgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19lbWl0X3hyZWYpOiBEZWNsYXJlZCBleHRlcm4uCgkqIGxhbmcuYyAoeHJlZi5oKTogSW5jbHVkZWQuCgkoZmxhZ19lbWl0X3hyZWYpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZGVkIHN1cHBvcnQgZm9yIC1meHJlZi4KCSogeHJlZi5jOiBDcmVhdGVkLgoJKiB4cmVmLmg6IExpa2V3aXNlLgoKMTk5OS0wMy0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZS1sYW5nLmluICgkKEdDSikkKGV4ZWV4dCkpOiBBZGQgaW50bC5vIHRvIGxpc3Qgb2YgZmlsZXMgdG8gYmUKCWxpbmtlZCB3aXRoLgoKU3VuIE1hciAyMSAwODozMDozMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoamNmLWR1bXAubyk6IERlcGVuZCBvbiAkKENPTkZJR19IKQoJJChzcmNkaXIpLy4uL3N5c3RlbS5oIGFuZCAkKEpBVkFfVFJFRV9IKS4KCShqY2YtaW8ubyk6IERlcGVuZCBvbiAkKEpBVkFfVFJFRV9IKS4KCShtYW5nbGUubyk6IExpa2V3aXNlLgoKCSogY2hlY2staW5pdC5jIChjaGVja19jb25kX2luaXQpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCgkqIGNsYXNzLmMgKGJ1aWxkX2phdmFfbWV0aG9kX3R5cGUsIGhhc2hVdGY4U3RyaW5nLAoJbWFrZV9maWVsZF92YWx1ZSwgZ2V0X2Rpc3BhdGNoX3ZlY3RvciwgZ2V0X2Rpc3BhdGNoX3RhYmxlLAoJYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUsIG1hbmdsZV9zdGF0aWNfZmllbGQpOiBMaWtld2lzZS4KCShzdHJMZW5ndGhVdGY4KTogSGlkZSB1bnVzZWQgZGVmaW5pdGlvbi4KCShoYXNoVXRmOFN0cmluZyk6IENvbnN0LWlmeS4KCShtYWtlX2ZpZWxkX3ZhbHVlKTogVW4tQU5TSS1meS4KCgkqIGNvbnN0YW50cy5jOiBNb3ZlIGluY2x1c2lvbiBvZiBqY2YuaCBhYm92ZSBqYXZhLXRyZWUuaC4KCShzZXRfY29uc3RhbnRfZW50cnksIGZpbmRfY2xhc3Nfb3Jfc3RyaW5nX2NvbnN0YW50LAoJZmluZF9uYW1lX2FuZF90eXBlX2NvbnN0YW50LCBnZXRfdGFnX25vZGUsCglidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogZGVjbC5jIChwdXNoX2p2bV9zbG90LCBidWlsdGluX2Z1bmN0aW9uLAoJbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IExpa2V3aXNlLgoJKGJ1aWx0aW5fZnVuY3Rpb24pOiBDb25zdC1pZnkuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2phdmFfaGFuZGxlciwgZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOgoJQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBleHByLmMgKGZsdXNoX3F1aWNrX3N0YWNrLCBwdXNoX3ZhbHVlLCBwb3BfdmFsdWUsCglqYXZhX3N0YWNrX3N3YXAsIGphdmFfc3RhY2tfZHVwLCBidWlsZF9qYXZhX2F0aHJvdywKCWJ1aWxkX2phdmFfanNyLCBidWlsZF9qYXZhX3JldCwgZXhwYW5kX2phdmFfbXVsdGlhbmV3YXJyYXksCglleHBhbmRfamF2YV9hcnJheXN0b3JlLCBleHBhbmRfamF2YV9hcnJheWxvYWQsCglleHBhbmRfamF2YV9hcnJheV9sZW5ndGgsIGJ1aWxkX2phdmFfbW9uaXRvciwgZXhwYW5kX2phdmFfcHVzaGMsCglleHBhbmRfamF2YV9yZXR1cm4sIGV4cGFuZF9qYXZhX05FVywgZXhwYW5kX2phdmFfSU5TVEFOQ0VPRiwKCWV4cGFuZF9qYXZhX0NIRUNLQ0FTVCwgZXhwYW5kX2lpbmMsIGV4cGFuZF9qYXZhX2Jpbm9wLCBub3RlX2xhYmVsLAoJZXhwYW5kX2NvbXBhcmUsIGV4cGFuZF90ZXN0LCBleHBhbmRfY29uZCwgZXhwYW5kX2phdmFfZ290bywKCWV4cGFuZF9qYXZhX2NhbGwsIGV4cGFuZF9qYXZhX3JldCwgcG9wX2FyZ3VtZW50cywgZXhwYW5kX2ludm9rZSwKCWV4cGFuZF9qYXZhX2ZpZWxkX29wLCBqYXZhX3B1c2hfY29uc3RhbnRfZnJvbV9wb29sKTogTGlrZXdpc2UuCgoJKGRlY29kZV9uZXdhcnJheV90eXBlLCBleHBhbmRfaWluYyk6IFVuLUFOU0ktZnkuCgkoYnVpbGRfamF2YV9hcnJheW51bGxfY2hlY2spOiBNYXJrIHBhcmFtZXRlcnMgYG5vZGUnIGFuZCBgdHlwZScKCXdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShub3RlX2xhYmVsKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgY3VycmVudF9wYycuCgkoZXhwYW5kX2phdmFfY2FsbCwgZXhwYW5kX2phdmFfcmV0KTogSGlkZSB1bnVzZWQgZGVmaW5pdGlvbi4KCgkqIGphdmEtdHJlZS5oIChtYWtlX2NsYXNzLCBidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IsCglqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlLCBwb3BfbGFiZWxlZF9ibG9jaywgZW1pdF9oYW5kbGVycywKCWluaXRfb3V0Z29pbmdfY3Bvb2wsIHJlZ2lzdGVyX2NsYXNzLCBlbWl0X3JlZ2lzdGVyX2NsYXNzZXMsCglqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMpOiBQcm90b3R5cGUuCgkodW5pY29kZV9tYW5nbGluZ19sZW5ndGgpOiBDb25zdC1pZnkuCgkoYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUsIGFwcGVuZF9ncHBfbWFuZ2xlZF9jbGFzc3R5cGUsCgllbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLCBmb3JtYXRfaW50LCBmb3JtYXRfdWludCwKCWpjZl90cmltX29sZF9pbnB1dCwgamNmX3ByaW50X3V0ZjgsIGpjZl9wcmludF9jaGFyLAoJamNmX3ByaW50X3V0ZjhfcmVwbGFjZSwgb3Blbl9jbGFzcyk6IFByb3RvdHlwZS4KCgkqIGpjZi1kdW1wLmM6IEluY2x1ZGUgImNvbmZpZy5oIiwgbm90IDxjb25maWcuaD4uICBEb24ndCBpbmNsdWRlCgk8c3RkaW8uaD4uICBJbmNsdWRlIHRyZWUuaC9qYXZhLXRyZWUuaC4KCSh1dGY4X2VxdWFsX3N0cmluZyB1c2FnZSwgcHJvY2Vzc19jbGFzcyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKG9wZW5fY2xhc3MpOiBEb24ndCBwcm90b3R5cGUgdGhpcyBoZXJlLgoJKHV0ZjhfZXF1YWxfc3RyaW5nKTogTWF0Y2ggYXJndW1lbnRzIHRvIGZvcm1hdCBzcGVjaWZpZXJzLgoJKEhBTkRMRV9DT0RFX0FUVFJJQlVURSwgQlJBTkNILCBKU1IsIFJFVCwgTE9PS1VQX1NXSVRDSCwKCVRBQkxFX1NXSVRDSCwgZGlzYXNzZW1ibGVfbWV0aG9kKTogTGlrZXdpc2UuCgoJKiBqY2YtaW8uYzogSW5jbHVkZSB0cmVlLmgvamF2YS10cmVlLmguCgkob3Blbl9jbGFzcywgZmluZF9jbGFzc2ZpbGUsIGpjZl9wcmludF91dGY4LAoJamNmX3ByaW50X3V0ZjhfcmVwbGFjZSk6IENvbnN0LWlmeS4KCgkqIGpjZi1wYXJzZS5jIChwYXJzZV96aXBfZmlsZV9lbnRyaWVzLCBwcm9jZXNzX3ppcF9kaXIsCglwYXJzZV9jbGFzc19maWxlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IE1hdGNoIGRlZmluaXRpb24gdG8gZXhpc3Rpbmcgc3RhdGljCglwcm90b3R5cGUuCgoJKiBqY2Ytd3JpdGUuYzogSW5jbHVkZSBqY2YuaCBiZWZvcmUgdHJlZS5oL2phdmEtdHJlZS5oLgoJKGFsbG9jX2NodW5rLCBhcHBlbmRfY2h1bmssIGFwcGVuZF9jaHVua19jb3B5LCBnZW5famNmX2xhYmVsLAoJZmluaXNoX2pjZl9ibG9jaywgZGVmaW5lX2pjZl9sYWJlbCwgZ2V0X2pjZl9sYWJlbF9oZXJlLAoJcHV0X2xpbmVudW1iZXIsIGxvY2FsdmFyX2FsbG9jLCBsb2NhbHZhcl9mcmVlLCBnZXRfYWNjZXNzX2ZsYWdzLAoJd3JpdGVfY2h1bmtzLCBhZGp1c3RfdHlwZWRfb3AsIGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsLAoJZ2VuZXJhdGVfYnl0ZWNvZGVfcmV0dXJuLCBwZXJmb3JtX3JlbG9jYXRpb25zLCBpbml0X2pjZl9zdGF0ZSwKCWluaXRfamNmX21ldGhvZCwgcmVsZWFzZV9qY2Zfc3RhdGUsIGdlbmVyYXRlX2NsYXNzZmlsZSk6CiAJQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZW1pdF91bm9wKTogTWFyayBwYXJhbWV0ZXIgYHR5cGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShtYWtlX2NsYXNzX2ZpbGVfbmFtZSk6IENvbnN0LWlmeS4KCgkqIGpjZi5oIChmaW5kX2NsYXNzZmlsZSk6IENvbnN0LWlmeS4KCgkqIGp2LXNjYW4uYyAocmVzZXRfcmVwb3J0KTogUmVtb3ZlIHByb3RvdHlwZS4KCgkqIGp2Z2VubWFpbi5jOiBJbmNsdWRlIGpjZi5oL3RyZWUuaC9qYXZhLXRyZWUuaC4KCShlcnJvcik6IFJld3JpdGUgdG8gYWxsb3cgdmFyYXJncy4KCgkqIGxhbmcuYyAobGFuZ19mX29wdGlvbnMpOiBDb25zdC1pZnkuCgoJKiBsZXguYyAoamF2YV9wYXJzZV9lc2NhcGVfc2VxdWVuY2UpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KICAJKGphdmFfYWxsb2NhdGVfbmV3X2xpbmUpOiBNYXRjaCBkZWZpbml0aW9uIHRvIGV4aXN0aW5nIHN0YXRpYwogCXByb3RvdHlwZS4KCgkqIG1hbmdsZS5jIEluY2x1ZGUgdHJlZS5oL2phdmEtdHJlZS5oLgoJKHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoLCBlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lLAoJYXBwZW5kX2dwcF9tYW5nbGVkX25hbWUsIGFwcGVuZF9ncHBfbWFuZ2xlZF9jbGFzc3R5cGUpOiBDb25zdC1pZnkuCgoJKiBwYXJzZS5oIChqZGVwX2NvZGUpOiBSZW1vdmUgdHJhaWxpbmcgY29tbWEgaW4gZW51bWVyYXRpb24uCgkoamF2YV9nZXRfbGluZV9jb2wpOiBNb3ZlIHByb3RvdHlwZSBvdXRzaWRlIG9mICFKQzFfTElURSB0ZXN0LgoJKHJlc2V0X3JlcG9ydCk6IEFkZCBwcm90b3R5cGUuCgoJKiB2ZXJpZnkuYyAocHVzaF9wZW5kaW5nX2xhYmVsLCBtZXJnZV90eXBlcyk6IEFkZCBzdGF0aWMKCXByb3RvdHlwZXMuCgoJKiB6aXBmaWxlLmggKG9wZW5kaXJfaW5femlwLCBvcGVuX2luX3ppcCk6IFByb3RvdHlwZS4KCjE5OTktMDMtMTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogRXh0ZW5kIHRoZQoJc2VhcmNoIHRvIHN1cGVyaW50ZXJmYWNlcyB3aGVuIHJlbGV2YW50LgoJKHNlYXJjaF9hcHBsaWNhYmxlX21ldGhvZHNfbGlzdCk6IE5ldyBmdW5jdGlvbi4KCjE5OTktMDMtMTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAodW5tYW5nbGVfY2xhc3NuYW1lKTogSW1wbGVtZW50ZWQgc3RyaWN0ZXIgdGVzdGluZwoJYmVmb3JlIHNldHRpbmcgdGhlIFFVQUxJRklFRF9QIGZsYWcgb24gYW4gaWRlbnRpZmllci4KClR1ZSBNYXIgMTYgMTU6MTU6NDEgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX2xocyk6ICBDYWxsIGZvcmNlX2V2YWx1YXRpb25fb3JkZXIKCWFmdGVyIHBhdGNoX25ld2FycmF5LgoJKHBhdGNoX2Jpbm9wKTogIERvbid0IGNhbGwgZm9sZCBpZiB0aGVyZSBhcmUgc2lkZSBlZmZlY3RzLgoKMTk5OS0wMy0xNiAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChqYXZhX3N0YWJpbGl6ZV9yZWZlcmVuY2UpOiBVc2Ugc2F2ZV9leHByIGluc3RlYWQgb2YKCWJ1aWxkaW5nIGEgU0FWRV9FWFBSIG5vZGUuCgkoamF2YV9jb21wbGV0ZV9saHMpOiBQYXRjaCB0aGUgcmVzdWx0aW5nIHN0cmluZyBvZiB0aGUgYCs9JwoJb3BlcmF0b3IgKGlmIG5lY2Vzc2FyeSkgYW5kIGNvbXBsZXRlIHRoZSBSSFMgYWZ0ZXIgaGF2aW5nIGJ1aWx0Cgl0aGUgY2FzdC4KCk1vbiBNYXIgMTUgMTI6MTg6MjkgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzKTogIERvbid0IHNldCBDTEFTU19QIGhlcmUgKGJlY2F1c2UKCXRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgYnkgYnVpbGRfamF2YV9hcnJheV90eXBlKS4KCShwdXNoX2NsYXNzKTogIFNldCBDTEFTU19QIGhlcmUgaW5zdGVhZC4KCSogcGFyc2UuaCAoVFlQRV9DTEFTU19QKTogIENoZWNrIGZvciBUWVBFX0FSUkFZX1AgaXMgcmVkdW5kYW50LgoKCSogamNmLWR1bXAuYyAocHJpbnRfYWNjZXNzX2ZsYWdzKTogIFRha2UgZXh0cmEgcGFyYW1ldGVyIHRvIGluZGljYXRlCgljb250ZXh0LiAgSWYgdGhlIGNvbnRleHQgaXMgY2xhc3MsIHBlcmZlciAic3VwZXIiIG92ZXIgInN5bmNocm9uaXplZCIuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgRG9uJ3QgYWRkIEFDQ19TVVBFUiBpZiBpbnRlcmZhY2UuCgoJKiBwYXJzZS55IChjcmVhdGVfY2xhc3MpOiAgRG9uJ3QgY2FsbCBwYXJzZXJfY2hlY2tfc3VwZXIgaGVyZTsKCWl0IGlzIG5vdCByb2J1c3QuICBBbHdheXMgd2FpdCB1bnRpbCBsYXRlci4KCgkqIHBhcnNlLnkgKG1ldGhvZF9oZWFkZXIpOiAgRm9yIGludGVyZmFjZXMsIHNldCBBQ0NfQUJTVFJBQ1QgKHRvCgltYXRjaCB3aGF0IEpESyAxLjIgZG9lcyksIGJ1dCBkb24ndCBzZXQgQUNDX1BVQkxJQy4KClNhdCBNYXIgMTMgMTg6MTY6MzQgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9yZWFkX2NoYXIpOiAgVU5HRVQgaW52YWxpZCBub24taW5pdGlhbCB1dGY4IGNoYXJhY3Rlci4KCSogbGV4LmggKFVOR0VUQyk6ICBDaGFuZ2UgbWlzbGVhZGluZyBtYWNyby4KCjE5OTktMDMtMTIgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoamF2YV9zdGFiaWxpemVfcmVmZXJlbmNlKTogUmV0dXJuIE5PREUgd2hlbiBwYXRjaGluZyBhCglDT01QT1VORF9FWFBSLgoJKGphdmFfY29tcGxldGVfbGhzKTogUHV0IHBhcmVudGhlc2lzIGFyb3VuZCB0cnV0aCB2YWx1ZXMuCgoxOTk5LTAzLTEyICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc19tZXRob2QpOiBEb24ndCBtYWtlIHJ0bCBmb3IgaW50ZXJmYWNlCgltZXRob2RzLgoJKiBwYXJzZS5oIChHRVRfVFlQRV9OQU1FKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChpZl90aGVuX3N0YXRlbWVudDopOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShpZl90aGVuX2Vsc2Vfc3RhdGVtZW50Oik6IExpa2V3aXNlLgoJKGZvcl9zdGF0ZW1lbnQ6KTogRml4ZWQgc3BhY2luZy4KCSh0cnlfc3RhdGVtZW50Oik6IEZpeGVkIGluZGVudGF0aW9uLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBEb24ndCBmb3JjZSBpbnRlcmZhY2VzIHRvIGJlIGFic3RyYWN0LgoJKG1ldGhvZF9oZWFkZXIpOiBBYnN0cmFjdCBtZXRob2RzIGFyZSBPSyBpbiBpbnRlcmZhY2VzLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6IEZpeGVkIGluZGVudGF0aW9uLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBHRVRfVFlQRV9OQU1FIHRvIHJlcG9ydAoJbm9uIGFjY2Vzc2libGUgZmllbGRzLgoJKGphdmFfc3RhYmlsaXplX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2NvbXBsZXRlX2xocyk6IEZpeGVkIGluZGVudGF0aW9uLiBVc2UKCWphdmFfc3RhYmlsaXplX3JlZmVyZW5jZSBpbiBjb21wb3VuZCBhc3NpZ25lbWVudC4gSW5zZXJ0IHRoZQoJY2FzdC4gSWYgbm90IHByb2Nlc3NpbmcgYCsnIGZpeCBzdHJpbmcgY29uc3RhbnRzIGJlZm9yZSBwcm9jZXNzaW5nCgliaW5vcC4KCkZyaSBNYXIgMTIgMTk6NDI6NTUgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uc3RhbnRzLmMgKGZpbmRfY2xhc3Nfb3Jfc3RyaW5nX2NvbnN0YW50KTogQ2FzdCB2YXJpYWJsZSBgaicKIAl0byBhIGBqd29yZCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCglgaGFzX2ZpbmFsbHlfcCcgYW5kIGBvcDAnLgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBDYXN0IGEgdmFsdWUgdG8gamludCB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IgYSBqbG9uZy4KCShhZGRfbmFtZWxldCk6IExpa2V3aXNlIGNhc3QgYSBgc2l6ZW9mJyB0byBhbiBpbnQgd2hlbiBjb21wYXJpbmcKCWFnYWluc3QgYSBzaWduZWQgcXVhbnRpdHkuCgoJKiBqY2YtZHVtcC5jIChwcmludF9zaWduYXR1cmVfdHlwZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGRpZ2l0Jy4KCShwcmludF9zaWduYXR1cmUpOiBEb24ndCBuZWVkbGVzc2x5IGRlcmVmZXJlbmNlIHZhcmlhYmxlIGBzdHInCgoJKiBqY2YtcmVhZGVyLmMgKGdldF9hdHRyaWJ1dGUpOiBNYXJrIHZhcmlhYmxlcyBgbWF4X3N0YWNrJyBhbmQKCWBtYXhfbG9jYWxzJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoamNmX3BhcnNlX2NsYXNzKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBpbmRleCcuCgoJKiBwYXJzZS5oIChyZXZlcnNlX2pkZXBfbGlzdCk6IFJlbW92ZSBzdGF0aWMgcHJvdG90eXBlLgoKCSogcGFyc2UueSAoYnVpbGRfanVtcF90b19maW5hbGx5KTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCShyZXZlcnNlX2pkZXBfbGlzdCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfaWVlZV9yZWFsX3RvX2ludGVnZXIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGFzc2lnbm1lbnQnIGFuZCBgZXhwcl9kZWNsJy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFJlbW92ZSB1bnVzZWQgbGFiZWwgYGJhZF9sZGMnLgoKMTk5OS0wMy0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiBhbGxvY2EgbGVuKzIgcmF0aGVyIHRoYW4gbGVuKzEgYnl0ZXM7Cgl3ZSdsbCBuZWVkIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBhbmQgYSBudWxsIGNoYXJhY3Rlci4KCldlZCBNYXIgMTAgMjM6MjA6MTEgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgSGFuZGxlIF9fYnVpbHRpbl9mbW9kLCBmb3IgJS4KCiAgVHVlIE1hciAgOSAxMTo1MjowOCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCiAJKiBwYXJzZS55IChtZXRob2RfaGVhZGVyKTogRG9uJ3Qgc2V0IEFDQ19BQlNUUkFDVCBmbGFncyBvbgogIAlpbnRlcmZhY2VzLgoKRnJpIE1hciAgNSAxNToxNzoyOSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX3BhcnNlX2VuZF9jb21tZW50KTogIFRha2UgZXh0cmEgcGFyYW1ldGVyIChuZXh0IGNoYXIpLgoKCSogY2xhc3MuYyAoYnVpbGRfdXRmOF9yZWYpOiAgRml4IHBvc3NpYmxlIG5hbWUgY2xhc3MvYW1iaWd1aXR5LgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6ICBBIHN0YXRpYyBtZXRob2QgaW4gYSBiYXNlIGNsYXNzCglpcyBuZXZlciBvdmVycmlkZGVuLCBzbyB0cmVhdCBpdCBsaWtlIGl0IGRvZXNuJ3QgZXhpc3QuCglIb3dldmVyLCBkbyBjb21wbGFpbiBhYm91dCBwcml2YXRlIG5vbi1zdGF0aWMgbWV0aG9kIG92ZXJyaWRpbmcKCXB1YmxpYyBzdGF0aWMgbWV0aG9kLgoKCSogcGFyc2UueTogIERvbid0IHNldCB1bnVzZWQgSU5JVElBTElaRURfUCBmbGFnLgoJKiBqYXZhLXRyZWUuaCAoSU5JVElBTElaRURfUCk6ICBSZW1vdmVkIG5vLWxvbmdlciBuZWVkZWQgZmxhZy4KCgkqIHBhcnNlLnkgKGZpbmRfZXhwcl93aXRoX3dmbCk6ICBPcHRpbWl6ZSB0YWlsLWNhbGxzLgoJKGJ1aWxkX2FycmF5X2Zyb21fbmFtZSk6ICBSZS1vcmRlciAmaW5kZXhbc3RyaW5nXSB0byAmc3RyaW5nW2luZGV4XS4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIERvbid0IGNhbGwgcGF0Y2hfYXNzaWdubWVudCBpZiByaHMgaXMKCWVycm9yX21hcmsgKGl0IG1pZ2h0IGNhdGNoIG1vcmUgZXJyb3JzLCBidXQgaXQgaXMgbW9yZSBsaWtlbHkgdG8gbG9zZSkuCgpTYXQgTWFyICA2IDExOjE3OjE2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChqY2YtcGFyc2Uubyk6IERlcGVuZCBvbiAkKFBBUlNFX0gpLgoJKHBhcnNlLXNjYW4ubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZhbHVlKTogQWRkIHByb3RvdHlwZS4gIE1ha2UgaXQgc3RhdGljLgogIAlSZW1vdmUgdW51c2VkIHNlY29uZCBhcmd1bWVudCwgY2FsbGVyIGNoYW5nZWQuCgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKCWByZXR1cm5fbGFiZWwnLgoKCSogamF2YS10cmVlLmg6IERvbid0IHByb3RvdHlwZSBmaW5kX2luX2N1cnJlbnRfemlwLgoJQWRkIHByb3RvdHlwZXMgZm9yIHZlcmlmeV9jb25zdGFudF9wb29sLCBzdGFydF9qYXZhX21ldGhvZCwKCWVuZF9qYXZhX21ldGhvZCwgZ2l2ZV9uYW1lX3RvX2xvY2FscywgZXhwYW5kX2J5dGVfY29kZSwKCW9wZW5faW5femlwLCBzZXRfY29uc3RhbnRfdmFsdWUsIGZpbmRfY29uc3RhbnQxLCBmaW5kX2NvbnN0YW50MiwKCWZpbmRfdXRmOF9jb25zdGFudCwgZmluZF9zdHJpbmdfY29uc3RhbnQsIGZpbmRfY2xhc3NfY29uc3RhbnQsCglmaW5kX2ZpZWxkcmVmX2luZGV4LCBmaW5kX21ldGhvZHJlZl9pbmRleCwgd3JpdGVfY29uc3RhbnRfcG9vbCwKCWNvdW50X2NvbnN0YW50X3Bvb2xfYnl0ZXMgYW5kIGVuY29kZV9uZXdhcnJheV90eXBlLgoKCSogamNmLWR1bXAuYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgTE9OR190ZW1wJy4KCgkqIGpjZi1wYXJzZS5jOiBJbmNsdWRlIHBhcnNlLmguCgkoamNmX3BhcnNlX3NvdXJjZSk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkoZmluZF9pbl9jdXJyZW50X3ppcCk6IExpa2V3aXNlLiAgQWxzbyByZW1vdmUgdW51c2VkIHBhcmFtZXRlciwKCWFsbCBjYWxsZXJzIGNoYW5nZWQuCgkocmVhZF9jbGFzcyk6IEluaXRpYWxpemUgdmFyaWFibGUgYHNhdmVkX3BvcycuCgoJKiBqY2YtcmVhZGVyLmMgKGpjZl9wYXJzZV9wcmVhbWJsZSk6IE1hcmsgdmFyaWFibGVzCglgbWlub3JfdmVyc2lvbicgYW5kIGBtYWpvcl92ZXJzaW9uJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBsZXguYyAoamF2YV9pc19lb2wpOiBXcmFwIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbiBpbiAhSkMxX0xJVEUuCgkoamF2YV9pbml0X2xleCk6IFdyYXAgdmFyaWFibGUgYGphdmFfbGFuZ19pbXBvcnRlZCcgaW4gIUpDMV9MSVRFLgoJKGphdmFfcGFyc2VfZG9jX3NlY3Rpb24pOiBJbml0aWFsaXplIHZhcmlhYmxlIGBzZWVuX3N0YXInLgoJKGphdmFfbGV4KTogV3JhcCB2YXJpYWJsZSBgbnVtYmVyX2JlZ2lubmluZycgaW4gIUpDMV9MSVRFLgoJKGphdmFfbGV4X2Vycm9yKTogTWFyayBwYXJhbWV0ZXJzIGBtc2cnIGFuZCBgZm9yd2FyZCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShqYXZhX2dldF9saW5lX2NvbCk6IE1hcmsgcGFyYW1ldGVycyBgZmlsZW5hbWUnIGFuZCBgbGluZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHBhcnNlLXNjYW4ueTogSW5jbHVkZSB0b3BsZXYuaC4KCSh5eWVycm9yKTogTWFyayBwYXJhbWV0ZXIgYG1zZycgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogcGFyc2UuaDogdXNlIGBzdHJ1Y3QgSkNGJywgbm90IHBsYWluIGBKQ0YnLgoJKGphdmFfcGFyc2VyX2NvbnRleHRfc2F2ZV9nbG9iYWwsIGphdmFfZXhwYW5kX2NsYXNzZXMKCWphdmFfcGFyc2VyX2NvbnRleHRfcmVzdG9yZV9nbG9iYWwsIGphdmFfcGFyc2UpOiBBZGQgcHJvdG90eXBlcy4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQoJYG5vZGUnLgoKV2VkIEZlYiAyNCAxNjoxMzo1OSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAZGVuZWIuY3lnbnVzLmNvbT4KCgkqICBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiAgQ09QWU4gdGFrZXMgd29yZCBjb3VudCwgbm90IGJpdCBjb3VudC4KCkZyaSBGZWIgMjYgMTQ6MDY6MjEgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9pZWVlX3JlYWxfdG9faW50ZWdlcik6ICBVc2Ugc2F2ZV9leHByIGluc3RlYWQgb2YKCWV4cGxpY2l0IGJ1aWxkX2RlY2wuICAoQXZvaWRzIGNyYXNoIGluIHJlbG9hZCB3aGVuIG9wdGltaXppbmcuKQoKVGh1IEZlYiAyNSAyMTowNTowNCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgSGFuZGxlIHN5bmNocm9uaXplZCBtZXRob2QKCWV2ZW4gd2hlbiBjb21waWxpbmcgZnJvbSBieXRlY29kZS4KCjE5OTktMDItMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChhZGRfY2xhc3NfZGVjbCk6IE9ubHkgZ2VuZXJhdGUgYCNpbmNsdWRlJyBpZiBvdXRlcgoJY2xhc3MgaXMgbm90IHRoZSBuYW1lIG9mIHRoZSBjbGFzcyB3ZSBhcmUgcHJvY2Vzc2luZy4gIENvcnJlY3RseQoJYXBwZW5kIGAuaCcgaW4gI2luY2x1ZGUuCgkocHJvY2Vzc19maWxlKTogQ2xlYW4gdXAgbmV3bGluZXMgYXJvdW5kIGdlbmVyYXRlZCBgI2luY2x1ZGUncy4KCShkZWNvZGVfc2lnbmF0dXJlX3BpZWNlKTogQ29ycmVjdGx5IGhhbmRsZSBpbm5lciBjbGFzc2VzLgoJKHN0cnVjdCBpbmNsdWRlKTogTmV3IHN0cnVjdHVyZS4KCShhbGxfaW5jbHVkZXMpOiBOZXcgZ2xvYmFsLgoJKHByaW50X2luY2x1ZGUpOiBOZXcgZnVuY3Rpb24uCgkoYWRkX2NsYXNzX2RlY2wpOiBVc2UgaXQuCgkocHJvY2Vzc19maWxlKTogTGlrZXdpc2UuCgkoYWRkX2NsYXNzX2RlY2wpOiBHZW5lcmF0ZSBpbmNsdWRlIGZvciBqYXZhLWFycmF5LmggaWYgYXJyYXkKCXNlZW4uCgkocHJvY2Vzc19maWxlKTogRG9uJ3QgZ2VuZXJhdGUgamF2YS1hcnJheS5oIGluY2x1ZGUuCgoJKiBnamF2YWguYyAoYWRkX25hbWVsZXQpOiBDaGVjayBmb3Igc3RhbmRhcmQgcGFja2FnZSBuYW1lcyBoZXJlLgoJKGFkZF9jbGFzc19kZWNsKTogRG9uJ3QgY2hlY2sgZm9yIHN0YW5kYXJkIHBhY2thZ2UgbmFtZXMgaGVyZS4KCjE5OTktMDItMjUgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHJlYWRfaW1wb3J0X2Rpcik6IFVzZSBgfD0nLCBub3QgYCs9JywgdG8gc2V0IGBmb3VuZCcuCglXaGVuIHJlYWRpbmcgYSB6aXAgZmlsZSwgb25seSB1c2Ugc3RybmNtcCBpZiBib3RoIHN0cmluZ3MgYXJlCgliaWdnZXIgdGhhbiB0aGUgYnVmZmVyIGxlbmd0aC4gIEluaXRpYWxpemUgYGsnIHdoZW4gbG9vcGluZwoJdGhyb3VnaCB6aXAgZmlsZS4KCjE5OTktMDItMjQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChzdHJ1Y3QgbmFtZWxldCk6IE5ldyBzdHJ1Y3R1cmUuCgkoYWRkX25hbWVsZXQpOiBOZXcgZnVuY3Rpb24uCgkocHJpbnRfbmFtZWxldCk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jbGFzc19kZWNscyk6IFVzZSBhZGRfbmFtZWxldCBhbmQgcHJpbnRfbmFtZWxldCB0byBnZW5lcmF0ZQoJbmFtZXNwYWNlcyBhbmQgbm90IGNsYXNzZXMuCgkobWV0aG9kX3ByaW50ZWQpOiBOZXcgZ2xvYmFsLgoJKEhBTkRMRV9FTkRfTUVUSE9EKTogRXhhbWluZSBtZXRob2RfcHJpbnRlZC4KCShwcmludF9tZXRob2RfaW5mbyk6IFNldCBtZXRob2RfcHJpbnRlZCB3aGVuIHJlcXVpcmVkLiAgUHJpbnQKCWVycm9yIGlmIGZ1bmN0aW9uIHRvIGJlIGlnbm9yZWQgaXMgbWFya2VkIHZpcnR1YWwuICBIYW5kbGUgJGZpbml0JAoJbWV0aG9kLgoJKE1FVEhPRF9JU19GSU5BTCk6IE5ldyBtYWNyby4KCShwcmludF9maWVsZF9pbmZvKTogVXNlIGl0LgoJKEhBTkRMRV9NRVRIT0QpOiBDbGVhciBtZXRob2RfcHJpbnRlZC4KCShtZXRob2RfcGFzcyk6IE5ldyBnbG9iYWwuCgkoSEFORExFX0VORF9GSUVMRCk6IENhbGwgYWRkX2NsYXNzX2RlY2wgb24gdGhlIGZpcnN0IHBhc3MuCgkocHJvY2Vzc19maWxlKTogRG8gdHdvIHBhc3NlcyBvdmVyIGJvdGggZmllbGRzIGFuZCBtZXRob2RzLgoJKEhBTkRMRV9NRVRIT0QpOiBFeGFtaW5lIG1ldGhvZF9wYXNzLgoJKHJvb3QpOiBOZXcgZ2xvYmFsLgoJKGFkZF9jbGFzc19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2NsYXNzX2RlY2xzKTogRG9uJ3Qgc2NhbiBvdmVyIGVudGlyZSBjb25zdGFudCBwb29sLgoKMTk5OS0wMi0yMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSoganZzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogUmVjb2duaXplIC1mc3ludGF4LW9ubHkgYW5kCglkaXNhYmxlIGxpbmtpbmcgaW4gdGhhdCBjYXNlLgoKMTk5OS0wMi0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLmggKFVURjhfR0VUKTogTWFzayBmaXJzdCBieXRlIG9mIDMtYnl0ZSBlbmNvZGluZyB3aXRoIDB4MGYsCglub3QgMHgxZi4KClN1biBGZWIgMjEgMTQ6NTY6MTEgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX3Jlc3VsdF9kZWNsKSwgamF2YS10cmVlLmg6ICBOZXcgbWV0aG9kLgoJKGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kKTogIEhhbmRsZSBzeW5jaHJvbml6ZWQgbWV0aG9kcy4KCURvbid0IGJ1aWxkIERFQ0xfUkVTVUxUIGhlcmUuICAoT3JkZXJpbmcgZGVwZW5kZW5jeSBwcm9ibGVtLikKCShzdGFydF9qYXZhX21ldGhvZCk6ICBDYWxsIGJ1aWxkX3Jlc3VsdF9kZWNsIGhlcmUgaW5zdGVhZCAgLi4uCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6ICAuLi4gYW5kIGhlcmUuCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogRG9uJ3QgY2FsbCBjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCBoZXJlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZCk6ICBDYWxsIGl0IGhlcmUgaW5zdGVhZC4KCSogcGFyc2UuaCAoQlVJTERfTU9OSVRPUl9FTlRFUiwgQlVJTERfTU9OSVRPUl9FWElUKTogIE1vdmVkIHRvIC4uCgkqIGphdmEtdHJlZS5oOiAgLi4uIGhlcmUuCgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpOiAgRml4IHR5cG8sIGRvbid0IGhhbmRsZSBBUlJBWV9SRUYuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIERvbid0IGNhbGwgZm9yY2VfZXZhbHVhdGlvbl9vcmRlcgoJZm9yIEFSUkFZX1JFRiAtIGl0IGRvZXNuJ3Qgd29yayB3aGVuIGFycmF5IGJvdW5kcyBhcmUgY2hlY2tlZC4KCShwYXRjaF9hcnJheV9yZWYpOiAgSGFuZGxlIGl0IGhlcmUgaW5zdGVhZC4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgRW1pdCAiRXhjZXB0aW9ucyIgYXR0cmlidXRlLgoKRnJpIEZlYiAxOSAxNTozNTowMSAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglGb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb2YgYmluYXJ5IG9wZXJhdGlvbnMgZXRjLgoJKiBleHByLmMgKGZvcmNlX2V2YWx1YXRpb25fb3JkZXIpLCBqYXZhLXRyZWUuaDogIE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgUGFzcyBiaW5hcnkgb3BlcmF0aW9ucywgcHJvY2VkdXJlCgljYWxscywgYW5kIEFSUkFZX1JFRnMgdG8gZm9yY2VfZXZhbHVhdGlvbl9vcmRlci4KCSh2YXJpb3VzKTogIFNldCBUUkVFX1NJREVfRUZGRUNUUyBtb3JlIGNhcmVmdWxseS4KCglUb2xlcmF0ZSByYW5kb20gKG5vbi1VVEY4KSBlbmNvZGluZyBpbiBjb21tZW50cyB3aXRob3V0IGNvbXBsYWluaW5nLgoJKiBsZXguYyAoamF2YV9yZWFkX2NoYXIpOiAgUmV0dXJuIDB4RkZGRSBpZiBiYWQgVVRGOCBlbmNvZGluZy4KCShqYXZhX2lzX2VvbCk6ICBIYW5kbGUgJ1xyJyBmb2xsb3dlZCBieSAnXG4nIGluc3RlYWQgb2YgdmljZSB2ZXJzYS4KCgkqIHBhcnNlLnkgKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6ICBIYW5kbGUgZXJyb3JfbWFyay4KCShqYXZhX2NvbXBsZXRlX25vZGUgY2FzZSBFWFBSX1dJVEhfRklMRV9MT0NBVElPTik6ICBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIElnbm9yZSBhbiBlbXB0eSBzdGF0ZW1lbnQgaW4gYQoJQ09NUE9VTkRfRVhQUi4gIERvbid0IGNvbXBsYWluIGFib3V0IGVtcHR5IHN0YXRlbWVudCBhZnRlciByZXR1cm4uCgpGcmkgRmViIDE5IDEzOjAwOjU2IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogcGFyc2UueSAob2J0YWluX2luY29tcGxldGVfdHlwZSk6ICBEb24ndCB3cmFwIHVua25vd24gdHlwZXMKCWluIFRSRUVfTElTVCAtIGp1c3QgY2hhaW4gdGhlIFBPSU5URVJfVFlQRXMgdG9nZXRoZXIuCgkocmVzb2x2ZV9jbGFzcyk6ICBJZiB0eXBlIGFscmVhZHkgcmVzb2x2ZWQsIHJldHVybiBkZWNsLgoJQWZ0ZXIgcmVzb2x2aW5nLCB1cGRhdGUgVFJFRV9UWVBFKGNsYXNzX3R5cGUpLCBhbmQgbmFtZSAoaWYgYXJyYXkpLgoJKiBwYXJzZS5oIChkb19yZXNvbHZlX2NsYXNzKSwgcGFyc2UueTogIE1ha2Ugbm9uLXN0YXRpYy4KCSogY2xhc3MuYyAobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogIFRha2UgdGhpc19jbGFzcyBhcmd1bWVudC4KCURvIGRvX3Jlc29sdmVfY2xhc3MgaWYgbmVjZXNzYXJ5LgoJKGxheW91dF9jbGFzcywgbGF5b3V0X2NsYXNzX21ldGhvZHMpOiBBZGp1c3QgY2FsbHMgYXBwcm9wcmlhdGVseS4KCSogcGFyc2UuaCAoSkRFUF9UT19SRVNPTFZFLCBKREVQX1JFU09MVkVEX0RFQ0wsIEpERVBfUkVTT0xWRUQsCglKREVQX1JFU09MVkVEX1ApOiAgUmVkZWZpbmVkIGZvciBuZXcgVFJFRV9MSVNULWxlc3MgY29udmVudGlvbi4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6ICBEb24ndCBjYWxsIGxheW91dF9jbGFzcy4KCldlZCBGZWIgMTcgMTU6NDc6MjAgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjaGVja19wa2dfY2xhc3NfYWNjZXNzKTogQWxsb3cgcHJpdmF0ZSBjbGFzcyBhY2Nlc3MKIAl3aXRoaW4gdGhlIHNhbWUgcGFja2FnZS4KCShzdHJpcF9vdXRfc3RhdGljX2ZpZWxkX2FjY2Vzc19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX3VuYXJ5b3ApOiBDYWxsIHN0cmlwX291dF9zdGF0aWNfZmllbGRfYWNjZXNzX2RlY2wgb24gKysvLS0KIAlvcGVyYXRvciBhcmd1bWVudCBiZWZvcmUgdGVzdGluZyBpdHMgbmF0dXJlLgoKV2VkIEZlYiAgMyAxMjozODo0MyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5kZWYgKEZJTkFMTFlfRVhQUik6ICBSZW1vdmVkLiAgKE5vdyB1c2VzIFRSWV9GSU5BTExZX0VYUFIuKQoJKFRSWV9FWFBSKTogIFNpbXBsaWZ5IC0gaXQgbm8gbG9uZ2VyIGhhcyBhIGZpbmFsbHkgY2xhdXNlLgoJKiBjaGVjay1pbml0LmMgKGNoZWNrX2luaXQpOiAgSGFuZGxlIFRSWV9GSU5BTExZX0VYUFIuCglTaW1wbGVyIGhhbmRsaW5nIG9mIFRSWV9FWFBSLCB3aGljaCBubyBsb25nZXIgaGFzIGEgZmluYWxseSBjbGF1c2UuCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHByKTogIExpa2V3aXNlLgoJKiBqYXZhLXRyZWUuaCAoQ0FUQ0hfRVhQUl9HRVRfRVhQUik6ICBSZW1vdmVkIC0gbm8gbG9uZ2VyIG5lZWRlZC4KCSogcGFyc2UuaCAoamF2YV9nZXRfY2F0Y2hfYmxvY2spLCBwYXJzZS55OiAgUmVtb3ZlZCAtIG5vIGxvbmdlciBuZWVkZWQuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfbGhzKTogIEFkZCBzdXBwb3J0IGZvciBUUllfRklBTkxMWV9FWFBSLgoJKGJ1aWxkX3RyeV9zdGF0ZW1lbnQpOiAgUmVtb3ZlIGZpbmFsbHkgcGFyYW1ldGVyIGFuZCBoYW5kbGluZy4KCShidWlsZF90cnlfZmluYWxseV9zdGF0ZW1lbnQpOiAgTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX3RyeV9zdGF0ZW1lbnQpOiAgIE5vIGxvbmdlciBuZWVkIHRvIHN1cHBvcnQgZmluYWxseSBjbGF1c2UuCgkodHJ5X3N0YXRlbWVudCk6ICBVcGRhdGUgZ3JhbW1hciBhY3Rpb24gcnVsZXMuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgVFJZX0ZJTkFMTFlfRVhQUi4KCVNpbXBsZXIgaGFuZGxpbmcgb2YgVFJZX0VYUFIsIHdoaWNoIG5vIGxvbmdlciBoYXMgYSBmaW5hbGx5IGNsYXVzZS4KCjE5OTgtMTEtMjYgIEFuZHJldyBIYWxleSAgPGFwaEB2aWFncmEuY3lnbnVzLmNvLnVrPgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IEFkZCBicmFjZXMgYXJvdW5kIGNvbXB1dGF0aW9uIG9mICdkJwoJd2hlbiBSRUFMX0FSSVRITUVUSUMgaXMgbm90IGRlZmluZWQuICBbT2N0IDI2IGZpeCBnb3Qgb3ZlcndyaXR0ZW4gLVBCXQoKMTk5OS0wMi0xNyAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF91dGY4X3JlZik6IEJhY2sgb3V0IGJyb2tlbiBwYXRjaCB3aGljaCB3YXMKCWludGVuZGVkIHRvIHRvIG91dHB1dCBzaWduYXR1cmVzIHVzaW5nICcuJyBhcyBhIHNlcGFyYXRvci4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IE91dHB1dCBzaWduYXR1cmVzIHVzaW5nICcuJyBhcyBhCglzZXBhcmF0b3IsIHJhdGhlciB0aGFuICcvJy4KCShtYW5nbGVkX2NsYXNzbmFtZSk6IExpa2V3aXNlLgoJKG1ha2VfZmllbGRfdmFsdWUpOiBMaWtld2lzZS4KCShtYWtlX21ldGhvZF92YWx1ZSk6IExpa2V3aXNlLgoJKiBjb25zdGFudHMuYyAoYWxsb2NfY2xhc3NfY29uc3RhbnQpOiBMaWtld2lzZS4KCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBMaWtld2lzZS4KClRodSBGZWIgMTEgMjE6MjU6NTEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgogCSogcGFyc2UueSAodmFsaWRfYnVpbHRpbl9hc3NpZ25jb252X2lkZW50aXR5X3dpZGVuaW5nX3ApOiBHb3QgcmlkCiAJb2YgYW4gYW5jaWVudCB3b3JrYXJvdW5kLgoKV2VkIEZlYiAxMCAyMzoyNzozMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqdnNwZWMuYyAoeG1hbGxvYyk6IEtpbGwgdGhlIHByb3RvdHlwZS4gIEl0IGRvZXMgbm90IGJlbG9uZwoJaGVyZSBhbnltb3JlLgoKMTk5OS0wMi0xMCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBsZXguYyAoeXlsZXgpOiBFbmNvZGUgXDAgYXMgVVRGOC4KCjE5OTktMDItMTAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IFVzZSBsaWJnY2osIG5vdCBsaWJqYXZhLgoJKiBNYWtlZmlsZS5pbiAoamNmLXBhdGgubyk6IERlZmluZSBMSUJHQ0pfWklQX0ZJTEUuCgkobGliZ2NqX3ppcCk6IFJlbmFtZWQuCgkqIGpjZi1wYXRoLmMgKGFkZF9lbnRyeSk6IFVzZSBMSUJHQ0pfWklQX0ZJTEUsIG5vdAoJTElCSkFWQV9aSVBfRklMRS4KCShqY2ZfcGF0aF9pbml0KTogVXNlIExJQkdDSl9aSVBfRklMRS4KCgkqIGp2c3BlYy5jIChUSFJFQURfTkFNRSk6IFJlbmFtZWQgLWxxdGhyZWFkcyB0byAtbGdjamNvb3AuCgkoR0NfTkFNRSk6IFJlbmFtZWQgLWxnYyB0byAtbGdjamdjLgoKVHVlIEZlYiAgOSAxOTozMTowOSAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX2xhbmdfY2xvbmVhYmxlKTogSW5pdGlhbGl6ZS4KCSogcGFyc2UueSAoamF2YV9sYW5nX2Nsb25lYWJsZSk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IFRha2UgQ09OVkVSVF9FWFBSIGludG8gYWNjb3VudCB3aGVuCiAJZG9pbmcgb25lIG1vcmUgcXVhbGlmaWNhdGlvbiByb3VuZC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBSZWplY3QgbnVsbCBzb3VyY2Ugb3IKIAlkZXN0aW5hdGlvbi4gQWxsb3cgYW4gYXJyYXkgdG8gYmUgY2FzdCBpbnRvIGphdmEubGFuZy5DbG9uZWFibGUuCgkocGF0Y2hfY2FzdCk6IFN3YXBwZWQgdHdvIGZpcnN0IGFyZ3VtZW50cyB0byBmaXJzdCBjYWxsIHRvCiAJdmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wLgoKTW9uIEZlYiAgOCAxMTo1MDo1MCAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmg6IERFQ0xfUCByZW5hbWVkIEpERUNMX1AuCgkqIHBhcnNlLnk6IERFQ0xfUCByZXBsYWNlZCBieSBKREVDTF9QLgoJKGJ1aWxkX2FycmF5X2Zyb21fbmFtZSk6IEFsd2F5cyB1c2UgcG9pbnRlcidzIHR5cGUuCgkocGF0Y2hfYmNfc3RhdGVtZW50KTogRXh0cmEgY29kZSB0byBzZWFyY2ggY29udGludWUgdGFyZ2V0IGluIGEKCWZvciBsb29wLiBGaXhlZCBjb21tZW50cy4gQ29udGludWUgdGFyZ2V0IGlzIGN1cnJlbnQgbG9vcCB3aGVuCgl1bmxhYmVsZWQuCgoxOTk5LTAyLTA1ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFRoZSBzdXBlcmNsYXNzIG9mIGFuIGludGVyZmFjZSBzaG91bGQKCWJlIG51bGwsIG5vdCBjbGFzcyBPYmplY3QuCgoJKiBsZXguYyAoamF2YV9sZXgpOiBTaWduIGV4dGVuZCBoZXggbGl0ZXJhbHMuCgoxOTk5LTAyLTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3V0ZjhfcmVmKTogT3V0cHV0IHNpZ25hdHVyZXMgdXNpbmcgJy4nIGFzIGEKCXNlcGFyYXRvciwgcmF0aGVyIHRoYW4gJy8nLgoJKG1ha2VfY2xhc3NfZGF0YSk6IExpa2V3aXNlLgoKV2VkIEZlYiAgMyAyMjo1MDoxNyAxOTk5ICBNYXJjIEVzcGllIDxNYXJjLkVzcGllQGxpYWZhLmp1c3NpZXUuZnI+CgoJKiBNYWtlLWxhbmcuaW4gKCQoR0NKKShleGVleHQpKTogUmVtb3ZlIGNob29zZS10ZW1wLm8sIHBleGVjdXRlLm8gYW5kCglta3N0ZW1wLm8uICBHZXQgdGhlbSBmcm9tIGxpYmliZXJ0eSBub3cuCgpUdWUgRmViICAyIDE5OjQ5OjEyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGpjZi1pby5jOiBEbyBub3QgaW5jbHVkZSBzeXMvc3RhdC5oIG9yIHN5cy93YWl0LmgKClR1ZSBGZWIgIDIgMjA6MDQ6NTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSoganZzcGVjLmMgKHhtYWxsb2MpOiBGaXggdGhlIHByb3RvdHlwZSB0byBtYXRjaCB0aGUgb25lIG9idGFpbmVkCiAJZnJvbSBsaWJpYmVydHkuaAoKVHVlIEZlYiAgMiAxMDozOTo0NyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglPcHRpbWl6ZTogYHJldHVybiAoYSA/IGIgOiBjKScgYXM6IGBpZiAoYSkgcmV0dXJuIGI7IGVsc2UgcmV0dXJuIGM7Jy4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX3JldHVybik6ICBOZXcgZnVuY3Rpb24uCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgVXNlIGl0LCBmb3IgUkVUVVJOX0VYUFIuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgRm9yIFJFQUxfQ1NUIHRoYXQgaXMgMCBvciAxLAoJZ2VuZXJhdGUgc3BlY2lhbCBbZmRdY29uc3RfWzAxXSBpbnN0cnVjdGlvbnMuCgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6ICBEb24ndCBlbWl0X3JlZ2lzdGVyX2NsYXNzZXMgaWYgLWZzeW50YXgtb25seS4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBEbyBJTlZBTElEQVRFX1BDIGFmdGVyCgloYW5kbGluZyBPUENPREVfbG9va3Vwc3dpdGNoIG9yIE9QQ09ERV90YWJsZXN3aXRjaC4KCk1vbiBGZWIgIDEgMjA6NDQ6NDcgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBIYW5kbGUgY2FsbGluZyBzdGF0aWMgbWV0aG9kcywKCWV2ZW4gaW4gdGhlIGZvcm0gRVhQUi5NRVRIT0QoQVJHUyksIG5vdCBqdXN0IFRZUEUuTUVUSE9EKEFSR1MpLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgRG9uJ3QgY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUKCWV4aXQgY29uZGl0aW9uIGluIGEgZG8td2hpbGUgc3RhdGVtZW50LgoKRnJpIEphbiAyOSAxODoxOTowMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX3JlYWRfY2hhcik6IEZpeGVkIHV0ZjggZGVjb2RpbmcuCgkoamF2YV91bmljb2RlXzJfdXRmOCk6IEZpeGVkIHV0ZjggZW5jb2RpbmcgaW4gdGhlIDB4ODAwLTB4ZmZmZgogCXJhbmdlLgoJKiBwYXJzZS55ICh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IEZpeGVkCiAJY29tbWVudHMuIExvY2FsIHZhcmlhYmxlIGBhbGxfcHJpbWl0aXZlJyBpcyBnb25lLiBCcm9hZGVuZWQKIAlhY2NlcHRhbmNlIG9mIGAwJyB0byBmbG9hdGluZyBwb2ludCB0YXJnZXRzLiBgbG9uZycgY2FuIG5vdyBiZQogCXdpZGVuZWQgdG8gYGRvdWJsZScgb3IgYGZsb2F0Jy4KCSh2YWxpZF9tZXRob2RfaW52b2NhdGlvbl9jb252ZXJzaW9uX3ApOiBBZGRlZCBsZWFkaW5nCiAJY29tbWVudC4gRml4ZWQgdGFidWxhdGlvbi4KCShidWlsZF9zdHJpbmdfY29uY2F0ZW5hdGlvbik6IE9wdGltaXplIG91dCBsZWZ0IG9yIHJpZ2h0IGVtcHR5CiAJc3RyaW5nIGNvbnN0YW50cy4KClRodSBKYW4gMjggMTg6NTE6MjYgMTk5OSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAobG9jYWx2YXJfYWxsb2MpOiAgT25seSBlbWl0IGVudHJ5IGZvcgoJTG9jYWxWYXJpYWJsZVRhYmxlIGlmIGRlYnVnX2luZm9fbGV2ZWwgPiBESU5GT19MRVZFTF9URVJTRS4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBPbmx5IGNhbGwgcHV0X2xpbmVudW1iZXIgaWYKCWRlYnVnX2luZm9fbGV2ZWwgPiBESU5GT19MRVZFTF9OT05FLgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiAgSWYgbm8gLU8qIG9yIC1nKiBvcHRpb24KCWlzIHNwZWNpZmllZCwgYWRkIC1nMSAoZm9yIGNvbXBhdGliaWxpdHkgd2loIGphdmFjKS4KClRodSBKYW4gMjggMDk6MTc6NTEgMTk5OSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGphdmEvTWFrZWZpbGUuaW46IEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBmb3IgamNmLWR1bXAubywKCWdqYXZhaC5vLCBjaGVjay1pbml0Lm8sIGp2LXNjYW4ubwoKTW9uIEZlYiAgMSAwOTo1MDo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZ2phdmFoLm8pOiBEZXBlbmQgb24gJChDT05GSUdfSCkgYW5kIHN5c3RlbS5oLgoKCSogZ2phdmFoLmM6IEluY2x1ZGUgY29uZmlnLmggYW5kIHN5c3RlbS5oLgoKCSogamF2YW9wLmggKGlubGluZSk6IERvbid0IGRlZmluZSwgaXRzIGhhbmRsZWQgYnkgc3lzdGVtLmguCgkoV09SRF9UT19GTE9BVCwgV09SRFNfVE9fTE9ORywgV09SRFNfVE9fRE9VQkxFKTogQ2hhbmdlIHRoZXNlCglmcm9tIGBpbmxpbmUnIHRvIGBzdGF0aWMgaW5saW5lJy4KCgkqIGpjZi5oIChpbmxpbmUpOiBEb24ndCBkZWZpbmUsIGl0cyBoYW5kbGVkIGJ5IHN5c3RlbS5oLgoKCSogbGV4LmMgKGlubGluZSk6IExpa2V3aXNlLgoKU3VuIEphbiAzMSAyMDozNDoyOSAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGxhbmctc3BlY3MuaDogTWFwIC1RbiB0byAtZm5vLWlkZW50LgoKRnJpIEphbiAyOSAxNjo1MTo1NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogRml4IENMRUFOVVBfUE9JTlRfRVhQUiB0eXBvLgoKMTk5OS0wMS0yOSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UuaCAoQlVJTERfQVBQRU5EKTogSWYgQVJHIGlzIGEgbm9uLVN0cmluZyBvYmplY3QgcmVmZXJlbmNlLAoJdGhlbiBjYXN0IGl0IHRvIE9iamVjdCBiZWZvcmUgY2FsbGluZyBgYXBwZW5kJyBtZXRob2QuCgpUaHUgSmFuIDI4IDE0OjQ1OjM5IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19ib29sMl9pbml0LCBjaGVja19ib29sX2luaXQsIGNoZWNrX2luaXQpOgoJSGFuZGxlIFRSVVRIX0FORF9FWFBSLCBUUlVUSF9PUl9FWFBSLCBhbmQgVFJVVEhfWE9SX0VYUFIuCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBMaWtld2lzZS4KClRodSBKYW4gMjggMTE6NTA6MTEgMTk5OSAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlKTogRG9uJ3QgcGFyc2UgdGhlIHNhbWUgY2xhc3MgZmlsZSB0d2ljZS4KCSogcGFyc2UueSAocGF0Y2hfY2FzdCk6IEFsbG93IGEgYm9vbGVhbiB0byBiZSBjYXN0IGludG8gYQogCWJvb2xlYW4uCgpXZWQgSmFuIDI3IDEwOjE5OjI5IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UueTogKGNsYXNzX2RlY2xhcmF0aW9uOik6IEZpeGVkIGluZGVudGF0aW9uLgoJKGNsYXNzX21lbWJlcl9kZWNsYXJhdGlvbjopOiBFeHRyYSBgOycgYWZ0ZXIgZmllbGQgZGVjbGFyYXRpb24gbm93CiAJYWNjZXB0ZWQuCgkoaW50ZXJmYWNlX2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgZGVidWcgbWVzc2FnZXMgaW4gZXJyb3IgcmVwb3J0cy4KCShwYXRjaF9iaW5vcCk6IE5vZGVzIGNyZWF0ZWQgYW5kIHJldHVybmVkIGluaGVyaXQgdGhlIG9yaWduYWwKIAlub2RlJ3MgQ09NUE9VTkRfQVNTSUdOX1AgZmxhZyB2YWx1ZS4KCShwYXRjaF9jYXN0KTogRml4IGNhc3QgZnJvbSBjaGFyIHRvIGZsb2F0aW5nIHBvaW50LgoKTW9uIEphbiAyNSAxNzozOToxOSAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jLCBqYXZhLWV4Y2VwdC5oIChleHBhbmRfcmVzdW1lX2FmdGVyX2NhdGNoKTogbmV3CglmdW5jdGlvbi4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBjYWxsIGV4cGFuZF9yZXN1bWVfYWZ0ZXJfY2F0Y2gKCXRvIGJyYW5jaCBiYWNrIHRvIG1haW4gZmxvdyBvZiBjb250cm9sIGFmdGVyIGEgY2F0Y2ggYmxvY2suCgpTYXQgSmFuIDIzIDIzOjAyOjQzIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChwYXJzZS5vKTogRGVwZW5kIG9uICQoQ09ORklHX0gpIGFuZAoJJChzcmNkaXIpLy4uL3N5c3RlbS5oLgoJKGNsYXNzLm8pOiBEZXBlbmQgb24gJChQQVJTRV9IKSBhbmQgJChzcmNkaXIpLy4uL291dHB1dC5oLgoJKGpjZi1wYXJzZS5vKTogRGVwZW5kIG9uICQoc3JjZGlyKS8uLi90b3BsZXYuaC4KCShqY2Ytd3JpdGUubyk6IExpa2V3aXNlLgoJKGp2LXNjYW4ubyk6IERlcGVuZCBvbiAkKENPTkZJR19IKSBhbmQgJChzcmNkaXIpLy4uL3N5c3RlbS5oLgoJKG1hbmdsZS5vKTogRGVwZW5kIG9uICQoc3JjZGlyKS8uLi90b3BsZXYuaC4KCShwYXJzZS1zY2FuLm8pOiBEZXBlbmQgb24gJChDT05GSUdfSCkgYW5kICQoc3JjZGlyKS8uLi9zeXN0ZW0uaC4KCSh6ZXh0cmFjdC5vKTogRGVwZW5kIG9uICQoQ09ORklHX0gpIGFuZCAkKHNyY2RpcikvLi4vc3lzdGVtLmguCgoJKiBjbGFzcy5jOiBJbmNsdWRlIG91dHB1dC5oIGFuZCBwYXJzZS5oLgoJKG1hbmdsZWRfY2xhc3NuYW1lKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShmaW5kX25hbWVkX21ldGhvZCk6IEhpZGUgdW51c2VkIGZ1bmN0aW9uIGRlZmluaXRpb24uCgkoYnVpbGRfdXRmOF9yZWYpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgYycgdG8gdW5zaWduZWQgY2hhci4KCVVzZSBJU0FMUEhBL0lTRElHSVQgaW5zdGVhZCBvZiBpc2FscGhhL2lzZGlnaXQuCgkoYnVpbGRfY2xhc3NfcmVmKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShsYXlvdXRfY2xhc3NfbWV0aG9kKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYnVmJy4KCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHJ0bCcuCgkocHVzaGRlY2wpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBkaWZmZXJlbnRfYmluZGluZ19sZXZlbCcgYW5kCglgb2xkZ2xvYmFsJy4KCShwdXNobGV2ZWwpOiBNYXJrIHBhcmFtZXRlciBgdW51c2VkJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkobWF5YmVfYnVpbGRfY2xlYW51cCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGRlY2wnLgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9qYXZhX2hhbmRsZXIpOiBNYXJrIHBhcmFtZXRlciBgcmFuZ2UnCgl3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBleHByLmM6IEluY2x1ZGUgZXhjZXB0LmguCgkocG9wX3R5cGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpJy4KCShwb3BfdmFsdWUpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBuX3dvcmRzJyBhbmQgYGknLgoJKGV4cGFuZF9qYXZhX2FycmF5bG9hZCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgY29udmVydCcuCgkoamF2YV9sYW5nX2V4cGFuZF9leHByKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcyBgb3AwJywgYHR5cGUnLAoJYG1vZGUnLCBgdW5zaWduZWRwJywgYG5vZGUnIGFuZCBgZWxlbWVudHMnLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiBMaWtld2lzZSBmb3IgdmFyaWFibGVzIGBwcmV2X2VoX3JhbmdlcycgYW5kCglgZWhfcmFuZ2VzJy4KCShwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6IEFkZCBhIGBjb25zdCcgcXVhbGlmaWVyIHRvIGEgY2hhciouCgoJKiBnamF2YWguYyAob3V0cHV0X2RpcmVjdG9yeSk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkodGVtcF9kaXJlY3RvcnkpOiBMaWtld2lzZS4KCShwcmludF9jX2RlY2wpOiBMaWtld2lzZS4KCShwcmludF9tZXRob2RfaW5mbyk6IExpa2V3aXNlLgoJKGRlY29kZV9zaWduYXR1cmVfcGllY2UpOiBMaWtld2lzZS4KCShwcmludF9tYW5nbGVkX2NsYXNzbmFtZSk6IExpa2V3aXNlLgoKCSogamF2YS1leGNlcHQuaDogUHJvdmlkZSBwcm90b3R5cGVzIGZvciBtYXliZV9zdGFydF90cnksCgltYXliZV9lbmRfdHJ5IGFuZCBhZGRfaGFuZGxlci4KCgkqIGphdmEtdHJlZS5oIChtYW5nbGVkX2NsYXNzbmFtZSk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkocGFyc2VfZXJyb3JfY29udGV4dCk6IExpa2V3aXNlLiAgQWxzbyBhZGQgQVRUUklCVVRFX1BSSU5URl8yLgoJKHB1c2hkZWNsX3RvcF9sZXZlbCwgYWxsb2NfY2xhc3NfY29uc3RhbnQsIHVuaWNvZGVfbWFuZ2xpbmdfbGVuZ3RoLAoJaW5pdF9leHByX3Byb2Nlc3NpbmcsIHB1c2hfc3VwZXJfZmllbGQsIGluaXRfY2xhc3NfcHJvY2Vzc2luZywKCWNhbl93aWRlbl9yZWZlcmVuY2VfdG8sIGNsYXNzX2RlcHRoLCB2ZXJpZnlfanZtX2luc3RydWN0aW9ucywKCW1heWJlX3B1c2hsZXZlbHMsIG1heWJlX3BvcGxldmVscywgcHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24sCglzZXRfbG9jYWxfdHlwZSwgbWVyZ2VfdHlwZV9zdGF0ZSwgcHVzaF90eXBlLCBsb2FkX3R5cGVfc3RhdGUsCglhZGRfaW50ZXJmYWNlLCBmaW5kX2luX2N1cnJlbnRfemlwLCBhcHBlbmRfZ3BwX21hbmdsZWRfY2xhc3N0eXBlLAoJZW1pdF91bmljb2RlX21hbmdsZWRfbmFtZSk6IEFkZCBwcm90b3R5cGVzLgoKCSogamNmLWR1bXAuYyAocHJpbnRfY29uc3RhbnQpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLgoJKHByaW50X3NpZ25hdHVyZV90eXBlKTogVXNlIElTRElHSVQsIG5vdCBpc2RpZ2l0LgoJKHByaW50X3NpZ25hdHVyZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGonLgoKCSogamNmLWlvLmMgKGpjZl9maWxidWZfZnJvbV9zdGRpbyk6IENhc3QgdGhlIHJlc3VsdCBvZiBgZnJlYWQnIHRvCglpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBqY2YtcGFyc2UuYzogSW5jbHVkZSB0b3BsZXYuaC4KCgkqIGpjZi13cml0ZS5jOiBMaWtld2lzZS4gIERvbid0IGluY2x1ZGUgPHN0cmluZy5oPiBvciA8c3lzL3N0YXQuaD4uCgkobG9jYWx2YXJfZnJlZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGknLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2NvbmRpdGlvbmFsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBraW5kJy4KCgkqIGp2LXNjYW4uYzogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBSZW1vdmUgcmVkdW5kYW50CglPUyBoZWFkZXIgYW5kIGdhbnNpZGVjbC5oIGluY2x1ZGVzLgoJKHdhcm5pbmcpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLiAgQWxzbyBhZGQKCUFUVFJJQlVURV9QUklOVEZfMSB0byB0aGUgcHJvdG90eXBlLiAgQ2hlY2sgQU5TSV9QUk9UT1RZUEVTLCBub3QKCV9fU1REQ19fLCB3aGVuIGRldGVybWluaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0ktaXNtcy4KCShmYXRhbCk6IExpa2V3aXNlLiAgQWxzbyBhZGQgQVRUUklCVVRFX1VOVVNFRC4KCSh4bWFsbG9jKTogRG9uJ3QgcmVkdW5kYW50bHkgcHJvdG90eXBlIGhlcmUuCgkobWFpbik6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBlbnZwJy4gIEFsc28gZml4IHRoZSBhcmd1bWVudHMKCXBhc3NlZCB0byBmdW5jdGlvbiBgZmF0YWwnIHRvIG1hdGNoIHRoZSBmb3JtYXQgc3BlY2lmaWVyLgoKCSogbGFuZy5jIChqYXZhX3RyZWVfY29kZV9uYW1lKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCgkqIG1hbmdsZS5jOiBJbmNsdWRlIHRvcGxldi5oLgoJKGVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUpOiBEZWNsYXJlIHBhcmFtZXRlciBgbGVuJy4KCgkqIHBhcnNlLnkgKHBhcnNlX3dhcm5pbmdfY29udGV4dCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEKCWNoYXIqLiAgQWxzbyBhZGQgQVRUUklCVVRFX1BSSU5URl8yIHRvIHRoZSBwcm90b3R5cGUuICBDaGVjawoJYEFOU0lfUFJPVE9UWVBFUycgbm90IGBfX1NURENfXycgZm9yIHdoZXRoZXIgdG8gdXNlIEFOU0ktaXNtcy4KCShpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvCglhIGNoYXIqLgoJKHBhcnNlX2Vycm9yX2NvbnRleHQpOiBMaWtld2lzZS4gIEFsc28gY2hlY2sgYEFOU0lfUFJPVE9UWVBFUycKCW5vdCBgX19TVERDX18nIGZvciB3aGV0aGVyIHRvIHVzZSBBTlNJLWlzbXMuCgoJKiB0eXBlY2suYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogTWFyayBwYXJhbWV0ZXJzIGB2YWx1ZScgYW5kCglgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHBhcnNlX3NpZ25hdHVyZV90eXBlKTogVXNlIElTRElHSVQsIG5vdCBpc2RpZ2l0LgoKCSogdmVyaWZ5LmMgKGNoZWNrX3BlbmRpbmdfYmxvY2spOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZCB0byBhIGNoYXIqLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogTGlrZXdpc2UuICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGZpZWxkX25hbWUnIGFuZCBgZGVmYXVsdF92YWwnLgoKCSogemV4dHJhY3QuYzogSW5jbHVkZSBjb25maWcuaCBhbmQgc3lzdGVtLmguICBSZW1vdmUgcmVkdW5kYW50CglPUyBoZWFkZXIgaW5jbHVkZXMuCgoJKiB6aXBmaWxlLmg6IFByb3RvdHlwZSBgcmVhZF96aXBfYXJjaGl2ZScuCgpUaHUgSmFuIDIxIDE2OjAwOjA2IDE5OTkgIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnQpOiBBbGxvdyBjb252ZXJzaW9ucyB0byB2b2lkIHR5cGU6IHNvbWUKIAlvcHRpbWl6YXRpb25zIGluIGdjYyBkbyB0aGlzLgoKVGh1IEphbiAyMSAxNToyMTo0OSAxOTk5ICBBbmRyZXcgSGFsZXkgIDxhcGhAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2llZWVfcmVhbF90b19pbnRlZ2VyKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnZlcnQpOiBXaGVuIG5vdCB1c2luZyBmYXN0LW1hdGggYW5kIHVzaW5nIGhhcmR3YXJlIGZwLCBjb252ZXJ0CiAJYW4gSUVFRSBOYU4gdG8gemVyby4KCjE5OTktMDEtMTggIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogcGFyc2UueSAocGF0Y2hfYmlub3ApOiBEbyBhIHR5cGUgY29udmVyc2lvbiBmcm9tIHNpZ25lZCB0bwoJdW5zaWduZWQgYW5kIHRoZW4gYmFjayB0byBzaWduZWQgd2hlbiBhICI+Pj4iIGlzIGZvdW5kLgoKU3VuIEphbiAxNyAyMjozNDoyMiAxOTk5ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oOiAoY2hlY2tfZm9yX2luaXRpYWxpemF0aW9uKTogQWRkZWQgcHJvdG90eXBlLgoJKiBsZXguYyAoamF2YV9wYXJzZV9kb2Nfc2VjdGlvbik6IGBcbicgYnJlYWtzIHRoZSBgKi8nIHN0cmluZy4KCSogcGFyc2UueSAoZG9fcmVzb2x2ZV9jbGFzcyk6IFJlbW92ZWQgdW51c2VkIGxvY2Fscy4KCShyZWFkX2ltcG9ydF9kaXIpOiBMaWtld2lzZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBBcnJheSBjcmVhdGlvbgogCWV4cHJlc3Npb25zIGFyZSB2YWxpZCBwcmltYXJ5IGV4cHJlc3Npb25zLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBMaWtld2lzZS4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50KTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwuCgpTdW4gSmFuIDE3IDIxOjU1OjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluICh6ZXh0cmFjdC5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluOiBEbyBub3QgcHV0IF5McyBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lLgoKRnJpIEphbiAxNSAyMDoxNjoyMCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiAgQ29lcmNlIHRvIGNvcnJlY3QgVGhyb3dhYmxlCglzdWItdHlwZSB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRoYXQgZ2V0cyB0aGUgZXhjZXB0aW9uIHZhbHVlLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6ICBJZiBmbGFnc19zeW50YXhfb25seSwKCWRvbid0IGNhbGwgZmluaXNoX2NsYXNzLgoKCSogcGFyc2UueSAoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiAgSWYgTUVUSE9EX1BSSVZBVEUsCgljbGVhciBmb3VuZCBiZWZvcmUgY29udGludWluZy4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBPbiBhbiBhcnJheSBsb2FkLCBhbGxvdwoJYW5kIGhhbmRsZSB0b3Agb2Ygc3RhY2sgdG8gYmUgVFlQRV9OVUxMLgoKCSogZ2phdmFoLmMgKGdlbmVyYXRlX2FjY2Vzcyk6ICBUcmFuc2xhdGUgSmF2YSBwYWNrYWdlIHByaXZhdGUgb3IKCXByb3RlY3RlZCBhY2Nlc3MgdG8gQysrIHB1YmxpYywgYnV0IHdpdGggYSBjb21tZW50LgoKMTk5OS0wMS0xMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGdlbmVyYXRlX25hbWUpOiBOYW1lIHByZWZpeCBjaGFuZ2VkIHRvIGF2b2lkIGNsYXNoZXMKCXdpdGggYXNzZW1ibGVyIHRlbXAgbGFiZWxzLgoKCSogcGFyc2UueSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6IFNldCBUUkVFX1NJREVfRUZGRUNUUyBvbgoJTU9ESUZZX0VYUFIuICBXaXRob3V0IHRoaXMsIGNvZGUgZm9yIHRoZSBhc3NpZ25lbWVudCBtYXkgbm90IGJlCglnZW5lcmF0ZWQgYXQgYWxsIGFuZCB0aGUgc3luY2hyb25pemVkIHN0YXRlbWVudCB3aWxsIHJlYWQgYW4KCXVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpXZWQgSmFuIDEzIDAxOjI0OjU0IDE5OTkgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfbGF5b3V0X3N1cGVyX2NsYXNzKTogRml4ZWQgcmV0dXJuZWQgdmFsdWUuCgkqIGxleC5jOiBBZGRlZCAxOTk5IHRvIHRoZSBjb3B5cmlnaHQuCgkoamF2YV9pbml0X2xleCk6IEluaXRpYWxpemUgamF2YV9sYW5nX2ltcG9ydGVkLgoJKiBsZXguaDogQWRkZWQgMTk5OSB0byB0aGUgY29weXJpZ2h0LgoJKiBwYXJzZS5oOiBBZGRlZCAxOTk5IHRvIHRoZSBjb3B5cmlnaHQuCgkoUkVHSVNURVJfSU1QT1JUKTogRml4ZWQgdHlwbyBpbiB0cmFpbGluZyBtYWNyby4KCShDVVJSRU5UX09TQik6IE5ldyBtYWNyby4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGRzIG9zYl9kZXB0aCwgb3NiX2xpbWl0LgoJKiBwYXJzZS55IChqYXZhX2xhbmdfaWQpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKHR5cGVfaW1wb3J0X29uX2RlbWFuZF9kZWNsYXJhdGlvbik6IERvbid0IGltcG9ydCBqYXZhLmxhbmcuKiB0d2ljZS4KCShhcnJheV9jcmVhdGlvbl9leHByZXNzaW9uOik6IFVzZSBDVVJSRU5UX09TQi4KCShkaW1zOik6IFVzZXMgYSBzdGFjayB0byBrZWVwIHRyYWNrIG9mIGFycmF5IGRpbWVuc2lvbnMuCgkoY2FzdF9leHByZXNzaW9uOik6IFVzZSBDVVJSRU5UX09TQi4KCShmaW5kX2V4cHJfd2l0aF93ZmwpOiBSZXR1cm4gTlVMTCBpZiBub2RlIGZvdW5kIGRvZXNuJ3QgbWVldCB0aGUKIAljb25kaXRpb25zLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IEZpeGVkIHR5cG9zIGluIGNvbW1lbnQuCgkoY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbik6IEZpeGVkIGNvbW1lbnQgaW5kZW50YXRpb24uCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBTZXQgc2F2ZWQgZm91bmQgd2ZsIHRvIE5VTEwgYWZ0ZXIKIAloYXZpbmcgcmVpbnN0YWxsZWQgaXQgaW4gdGhlIHByZXZpb3VzbHkgZm91bmQgREVDTF9OQU1FLgoKU3VuIEphbiAxMCAxMzozNjoxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGphdmFfZmxvYXRfZmluaXRlKTogVXNlIGEgdW5pb24gdG8gZG8gdHlwZSBwdW5uaW5nLgoJKGphdmFfZG91YmxlX2Zpbml0ZSk6IExpa2V3aXNlLgoKU2F0IEphbiAgOSAxMToyNTowMCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGJ1aWxkX25ld19hcnJheV9pbml0KTogIERvbid0IHNldCBFWFBSX1dGTF9MSU5FQ09MCglvbiBDT05TVFJVQ1RPUiAoc2luY2UgdGhhdCB0cmFzaGVzIFRSRUVfQ1NUX1JUTCkuCgkocGF0Y2hfbmV3X2FycmF5X2luaXQpOiAgQ2xlYXIgVFJFRV9DT05TVEFOVCBhbHNvIGlmIElORElSRUNUX1JFRi4KCShyZWdpc3Rlcl9maWVsZHMpOiAgU2V0IFRSRUVfU1RBVElDIG9uIE5FV19BUlJBWV9JTklULCBub3Qgb24KCUNPTlNUUlVDVE9SICh3aGljaCBjYXVzZXMgZXhwYW5kX2V4cHIgdG8gY2FsbCBvdXRwdXRfY29uc3RhbnRfZGVmKS4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiAgQ2hlY2sgVFJFRV9TVEFUSUMgb2YgTkVXX0FSUkFZX0lOSVQuCgpGcmkgSmFuICA4IDE1OjQ4OjAzIDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2hlY2staW5pdC5jIChjaGVja19pbml0KTogIElmIGNvbXBpbGluZyB0byBuYXRpdmUsIHdlIGRvbid0CglzZWUgVEhST1dfRVhQUi4gIEluc3RlYWQsIGxvb2sgZm9yIGEgY2FsbCB0byB0aHJvd19ub2RlIChfSnZfVGhyb3cpLgoKMTk5OS0wMS0wOCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2Utc2Nhbi55ICh2YXJpYWJsZV9kZWNsYXJhdG9yX2lkKTogU2V0IG9yIGluY3JlbWVudAoJYnJhY2tldF9jb3VudC4KCShicmFja2V0X2NvdW50KTogTmV3IGdsb2JhbC4KCShmb3JtYWxfcGFyYW1ldGVyKTogSGFuZGxlIGNhc2Ugd2hlcmUgYnJhY2tldCBwYWlycyB0cmFpbCB2YXJpYWJsZQoJZGVjbGFyYXRvciBpZC4KCjE5OTktMDEtMDcgIEFuZHJldyBIYWxleSAgPGFwaEB2aWFncmEuY3lnbnVzLmNvLnVrPgoKCSogamNmLXBhcnNlLmMgKHl5cGFyc2UpOiB2YXJpYWJsZSBsZW4gY2hhbmdlZCBmcm9tIGEgY2hhciB0byBhbgoJaW50IHRvIHByZXZlbnQgb3ZlcmZsb3cuCgpXZWQgSmFuICA2IDE3OjE5OjQ2IDE5OTkgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmg6ICBEZWNsYXJlIHJlYWRfY2xhc3MuCgkqIGpjZi1wYXJzZS5jIChyZWFkX2NsYXNzKTogIE5ldyBmdW5jdGlvbi4KCShsb2FkX2NsYXNzKTogIE5vdyBqdXN0IGNhbGwgcmVhZF9jbGFzcy4KCgkqIGphdmEtdHJlZS5oIChqYXZhX3BhcnNlX2Fib3J0X29uX2Vycm9yKTogIE9ubHkgcmV0dXJuIGlmIG5ldyBlcnJvcnMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6ICBEZWNsYXJlIHNhdmVfZXJyb3JfY291bnQsCgl3aGljaCBpcyBuZWVkZWQgYnkgamF2YV9wYXJzZV9hYm9ydF9vbl9lcnJvciBtYWNybywKCSogcGFyc2UueSAoamF2YV9sYXlvdXRfY2xhc3NlcywgamF2YV9leHBhbmRfY2xhc3Nlcyk6ICBMaWtld2lzZS4KCgkqIHBhcnNlLnkgKHJlZ2lzdGVyX2ZpZWxkcyk6ICBTZXQgVFJFRV9TVEFUSUMgZmxhZyBvZiBORVdfQVJSQVlfSU5JVAoJY29uc3RydWN0b3IsIGlmIGluaXRpYWxpemluZyBhIHN0YXRpYyBmaWVsZC4KCShwYXRjaF9uZXdfYXJyYXlfaW5pdCk6ICBTZXQgVFJFRV9DT05TVEFOVCBpZiBpdCBpcy4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiAgRm9yIGEgc3RhdGljIGFycmF5IGNvbnN0cnVjdG9yCglvZiBwcmltaXRpdmUgZWxlbWVudHMsIGFsbG9jYXRlIHRoZSBhcnJheSBpdHNlbGYgc3RhdGljYWxseS4KCURpc2FibGVkIHVudGlsIHdlIGNhbiBzZXQgdGhlIHZ0YWJsZSBmaWVsZCBzdGF0aWNhbGx5LgoKCSogY2hlY2staW5pdC5jOiAgTmV3IGZpbGUuICBDaGVja3MgZm9yIGRlZmluaXRlIGFzc2lnbm1lbnQuCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiAgQWRkIGNoZWNrLWluaXQuby4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogQ2FsbCBjaGVja19mb3JfaW5pdGlhbGl6YXRpb24uCgkqIHBhcnNlLmggKEJMT0NLX0VYUFJfREVDTFMsIEJMT0NLX0VYUFJfQk9EWSk6ICBNb3ZlZCB0byBqYXZhLXRyZWUuaC4KCldlZCBKYW4gIDYgMTQ6NTM6MTAgMTk5OSAgR3JhaGFtIDxncmFoYW1zQHJjcC5jby51az4KCgkqIHBhcnNlLnkgOiBpbmNsdWRlIHN5c3RlbS5oIGluc3RlYWQgb2YgaW5jbHVkaW5nCglzdGFuZGFyZCBoZWFkZXJzIGRpcmVjdGx5IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiA8ZGlyZW50Lmg+LgoKV2VkIEphbiAgNiAxNjoyMDowNiAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGxleC5oOiAgTW92ZWQgc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0byBsZXguYywKCXRvIHNodXQgdXAgc29tZSAtV2FsbCB3YXJuaW5ncy4KCSogbGV4LmM6ICBTdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zIG1vdmVkIGhlcmUuCgkqIGpjZi1kdW1wLmM6ICBTbWFsbCBmaXhlcyB0byBzaHV0IHVwIC1XYWxsIHdhcm5pbmdzLgoKVHVlIEphbiAgNSAyMjoxNTo0MCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKCQoR0NKKS5vKTogRGVwZW5kIG9uIHByZWZpeC5oLgoKVHVlIERlYyAyMiAxMToyNToxOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiAgRG8gbG9hZF90eXBlX3N0YXRlIGFmdGVyIEpTUi4KCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIEZpeCBvZmYtYnktb25lIGVycm9yLgoKCSogamNmLXdyaXRlLmMgKENIRUNLX1BVVCk6ICBBZGQgKHZvaWQpIGNhc3QgdG8gYXZvaWQgLVdhbGwgd2FybmluZ3MuCgkobG9jYWx2YXJfYWxsb2MpOiAgQ2hhbmdlIHJldHVybiB0eXBlIHRvIHZvaWQsCgkoZW1pdF91bm9wKTogIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgc2l6ZS4KCgkqIGpjZi13cml0ZS5jIChzdHJ1Y3QgamNmX2Jsb2NrKTogIEFkZCBuZXcgdW5pb24uCgkoUEVORElOR19DTEVBTlVQX1BDLCBQRU5ESU5HX0VYSVRfUEMsIFVOREVGSU5FRF9QQyk6ICBOZXcgbWFjcm9zLgoJKGNhbGxfY2xlYW51cHMpOiAgTmV3IGZ1bmN0aW9ucy4KCShzdHJ1Y3QgamNmX3BhcnRpYWwpOiAgTmV3IGZpZWxkcyBudW1fZmluYWxpemVycyBhbmQgcmV0dXJuX3ZhbHVlX2RlY2wuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgU3VwcG9ydCBDTEVBTlVQX1BPSU5UX0VYUFIgYW5kCglXSVRIX0NMRUFOVVBfRVhQUi4gIEhhbmRsZSBjbGVhbnVwcyBpbiBSRVRVUk5fRVhQUiBhbmQgRVhJVF9CTE9DS19FWFBSLgoJKiBsYW5nLmMgKGxhbmdfaW5pdCk6ICBDYWxsIHVzaW5nX2VoX2Zvcl9jbGVhbnVwcy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV9saHMpOiAgRm9yIFNZTkNIUk9OSVpFRF9FWFBSLCBkZWZlcgoJY29tcGxldGluZyBvcGVyYW5kcyB0byBwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50LgoJU3VwcG9ydCBDTEVBTlVQX1BPSU5UX0VYUFIsIFdJVEhfQ0xFQU5VUF9FWFBSLgoJKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQpOiBSZS13cml0ZSBzdWluZyBDTEVBTlVQX1BPSU5UX0VYUFIgYW5kCglXSVRIX0NMRUFOVVBfRVhQUiBpbnN0ZWFkIG9mIFRSWV9FWFBSLgoKU3VuIERlYyAyMCAxNjoxNTo0NCAxOTk4ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIE1ha2UtbGFuZy5pbjogQ29tbWVudCBvdXQgY29udHJvbC1MczsgdGhleSB1cHNldCBzb21lIG1ha2VzLgoKMTk5OC0xMi0xOCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogcGFyc2UueSAoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogVXNlIERJUl9TRVBBUkFUT1IKCWNvbnNpc3RlbnRseS4KCjE5OTgtMTItMTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKERJUl9TRVBBUkFUT1IpOiBOZXcgZGVmaW5lLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IFVzZSBpdC4KCgkqIHBhcnNlLXNjYW4ueSAocmVwb3J0X21haW5fZGVjbGFyYXRpb24pOiBSZWNvZ25pemUKCWBqYXZhLmxhbmcuU3RyaW5nJyBpbiBhcmd1bWVudCB0byBtYWluLgoKV2VkIERlYyAxNiAxNjoxODo1OSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNyZWF0ZV9pbnRlcmZhY2UpOiAgUmVtb3ZlIGJvZ3VzIHRlc3QuCgpXZWQgRGVjIDE2IDE0OjQyOjE5IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6ICBTZXQgVFJFRV9UWVBFIGZvciBzdHJpbmcgY29uc3RhbnRzLgoJKEhBTkRMRV9DT05TVEFOVFZBTFVFKTogIElmIGZsYWdfZW1pdF9jbGFzc19maWxlcywgY2FsbCBnZXRfY29uc3RhbnQuCgoxOTk4LTEyLTE2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKHF1YWxpZmllZF9uYW1lKTogVXNlIGNvcnJlY3Qgc3ByaW50ZiBmb3JtYXQuCgoxOTk4LTEyLTE1ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAocHJpbnRfZmllbGRfaW5mbyk6IENoYW5nZWQgaG93IG1vc3QgbmVnYXRpdmUgbnVtYmVyIGlzCglwcmludGVkLgoKTW9uIERlYyAxNCAxODo0OToyOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGZvbGRfY29uc3RhbnRfZm9yX2luaXQpOiAgTmV3IGZ1bmN0aW9uLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogIERvbid0IHJlcGxhY2Ugc3RhdGljIGZpbmFsCiAJY29uc3RhbnQtaW5pdGlhbGl6ZWQgZmllbGRzIGJ5IGl0cyB2YWx1ZS4KCShqYXZhX2NvbXBsZXRlX2xocyk6ICBOZXcuICBTYW1lIGFzIGphdmFfY29tcGxldGVfdHJlZSwgZXhjZXB0IGRvZXMKCW5vdCByZXBsYWNlIHN0YXRpYyBmaW5hbCBjb25zdGFudC1pbml0aWFsaXplZCBmaWVsZHMgYnkgdGhlaXIgdmFsdWVzLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6ICBJZiB0aGVyZSBpcyBhbiBpbml0aWFsaXplciwgc2V0IERFQ0xfSU5JVElBTCBhbmQKCU1PRElGWV9FWFBSX0ZST01fSU5JVElBTElaQVRJT05fUC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiAgRm9yIE1PRElGWV9FWFBSLCB1c2UgamF2YV9jb21wbGV0ZV9saHMgZm9yIGxocy4KCU9ubHkgY2FsbCBwYXRjaF9pbml0aWFsaXplZF9zdGF0aWNfZmllbGQgaWYKCU1PRElGWV9FWFBSX0ZST01fSU5JVElBTElaQVRJT05fUC4KCShwYXRjaF9pbml0aWFsaXplZF9zdGF0aWNfZmllbGQpOiAgSWYgbm90IHZhbGlkIGNvbnN0YW50LCBjbGVhcgoJREVDTF9JTklUSUFMLgoKCSogcGFyc2UueSAobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiAgRml4IHRoaW5rby4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBJbiBFWFBSX1dJVEhfRklMRV9MT0NBVElPTiwKCXNldCBhbmQgcmVzdG9yZSBnbG9iYWwgbGluZW5vLgoKMTk5OC0xMi0xNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2ZpZWxkX2luZm8pOiBJZiB2YWx1ZSB0byBwcmludCBpcyB0aGUgc21hbGxlc3QKCXZhbHVlIG9mIGl0cyBzaXplLCB0aGVuIHByaW50IGFzIGhleCB0byBhdm9pZCBsYXRlciB3YXJuaW5ncyBmcm9tCglDKysgY29tcGlsZXIuCgoxOTk4LTEyLTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoZGVjb21waWxlX21ldGhvZCk6IERlY29tcGlsZSBgcmV0dXJuIG51bGwnLgoJKHByb2Nlc3NfZmlsZSk6IEdlbmVyYXRlIGAjcHJhZ21hIGludGVyZmFjZScuCgkobWV0aG9kX2RlY2xhcmVkKTogTmV3IGdsb2JhbC4KCShwcmludF9tZXRob2RfaW5mbyk6IFNldCBpdC4KCShIQU5ETEVfQ09ERV9BVFRSSUJVVEUpOiBPbmx5IHByaW50IGl0IG1ldGhvZF9kZWNsYXJlZCBzZXQuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBIYW5kbGUgYWJzdHJhY3QgbWV0aG9kcy4KClN1biBEZWMgMTMgMTc6MzE6NDAgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6ICBJZiBjbGFzc19kZWNsIGlzIG51bGwKCShlLmcuIGFuIGFycmF5IHR5cGUpLCB1c2Ugb3JpZ2luYWwgdHlwZS4KCgkqIHBhcnNlLnkgKGNoZWNrX3Rocm93bl9leGNlcHRpb25zKTogIFRlbXBvcmFyeSBoYWNrIHRvIHN1cHByZXNzCgllcnJvcnMgYWJvdXQgdW5jYXVnaHQgZXhjZXB0aW9uIGZyb20gY2xvbmUgKG9mIGFycmF5LCBzcGVjaWZpY2FsbHkpLgoKMTk5OC0xMi0xMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKGRlY29tcGlsZV9tZXRob2QpOiBIYW5kbGUgYWxsIHR5cGVzIG9mIGByZXR1cm4nCglvcGNvZGUuICBEZWNvbXBpbGUgYHJldHVybiB0aGlzJyBhbmQgYHJldHVybicuCgkobWV0aG9kX2FjY2Vzcyk6IE5ldyBnbG9iYWwuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBTZXQgaXQuCgkoZGVjb21waWxlX21ldGhvZCk6IERvbid0IGRlY29tcGlsZSBhIHN5bmNocm9uaXplZCBtZXRob2QuCgoxOTk4LTEyLTEzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtcmVhZGVyLmMgKGpjZl9wYXJzZV9vbmVfbWV0aG9kKTogUmVjb2duaXplCglIQU5ETEVfRU5EX01FVEhPRC4KCSogZ2phdmFoLmMgKEhBTkRMRV9FTkRfTUVUSE9EKTogTmV3IG1hY3JvLgoJKEhBTkRMRV9DT0RFX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCShkZWNvbXBpbGVfbWV0aG9kKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X21ldGhvZF9pbmZvKTogRG9uJ3QgcHJpbnQgYDtcbicgYXQgZW5kIG9mIGZ1bmN0aW9uIGRlY2wuCglJbmNsdWRlIGphdmEtb3Bjb2Rlcy5oLgoJKGRlY29tcGlsZWQpOiBOZXcgZ2xvYmFsLgoKU2F0IERlYyAxMiAyMDoxMzoxOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZik6ICBIYW5kbGUgUFJJTVRZUEUuY2xhc3MgaWYKCWZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogZXhwci5jIChleHBhbmRfamF2YV9maWVsZF9vcCk6ICBEb24ndCBvcHRpbWl6ZSBqYXZhLmxhbmcuWFhYLlRZUEUKCWlmIGZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlKTogIFByZS1saW1pbmFyeSBzdXBwb3J0IGZvcgoJQ09NUE9ORU5UX1JFRiAtIG9ubHkgdG8gaGFuZGxlIFBSSU1DTEFTUy5UWVBFLgoKCSogcGFyc2UueSAocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCk6ICAgRG9uJ3QgY2FsbCBtb25pdG9yZXhpdAogCXVubGVzcyBibG9jayBDQU5fQ09NUExFVEVfTk9STUFMTFkuICBQcm9wYWdhdGUgdGhhdCBmbGFnIHByb3Blcmx5LgoKCSogamF2YS10cmVlLmggKERFQ0xfTE9DQUxfU1RBVElDX1ZBTFVFKTogIFJlbW92ZWQgLSBubyBsb25nZXIgdXNlZC4KCgkqIHppcGZpbGUuaCAob3BlbmRpcl9pbl96aXApOiAgTmV3IGRlY2xhcmF0aW9uLgoJKiBqY2YtaW8uYyAoc2F3X2phdmFfc291cmNlKTogIE1vdmVkIHRvIGpjZi1wYXJzZS5jLgoJKG9wZW5kaXJfaW5femlwKTogIE5ldyBmdW5jdGlvbiwgdXNpbmcgY29kZSBmcm9tIG9wZW5faW5femlwLgoJKG9wZW5faW5femlwKTogIENhbGwgb3BlbmRpcl9pbl96aXAuCgkoZmluZF9jbGFzcyk6ICBSZW1vdmUgbm8tbG9uZ2VyLXVzZWQgZG9fY2xhc3NfZmlsZSBwYXJhbWV0ZXIsCglidXQgYWRkIHNvdXJjZV9vayBwYXJhbWV0ZXIuICBDaGFuZ2UgbG9naWMgc28gaWYgd2UgZmluZCBhIC5qYXZhIGZpbGUsCgl3ZSBkb24ndCBsb29rIGZvciAuY2xhc3MgaW4gbGF0ZXIgY2xhc3NwYXRoIGVtdHJpZXMuCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzKTogIFBhc3Mgc2F3X2phdmFfc291cmNlIHRvIGZpbmRfY2xhc3MuCgkoamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiAgT25seSBjYWxsIG9wZW5faW5femlwIGlmIGNvcnJlY3QgbWFnaWMgbnVtYmVyLgoJKiBnamF2YWguYzogVXBkYXRlIGNhbGwgdG8gZmluZF9jbGFzcy4KCSogamNmLWR1bXAuYzogIExpa2V3aXNlLgoKCSogamNmLXdyaXRlLmMgKHB1dF9saW5lbnVtYmVyKTogIEhhbmRsZSBkdXBsaWNhdGUgbGluZSBudW1iZXJzLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIEZvciBFWFBSX1dJVEhfRklMRV9MT0NBVElPTiwgZG8KCW5vdGhpbmcgaWYgYm9keSBpcyBlbXB0eV9zdG10X25vZGUuCglWYXJpb3VzIGxpdHRsZSBmaXhlcyBzbyBTUCBnZXRzIGNvcnJlY3RseSBhZGp1c3RlZC4KCUZvciBORVdfQVJSQVlfSU5JVCwgaGFuZGxlIElHTk9SRV9UQVJHRVQuCglGb3IgQ0FMTF9FWFBSLCB0ZXN0IGlmIHN0YXRpYyBmaXJzdC4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgSWdub3JlIGZpZWxkcyB0aGF0IGFyZSBERUNMX0FSVElGSUNJQUwsCglzdWNoIGFzIHRoZSBvbmVzIHdlIGNyZWF0ZSBmb3IgT2JqZWN0IGFuZCBDbGFzcy4KCVNldCBhbmQgcmVzdG9yZSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wuCgkqIHBhcnNlLnk6ICBDaGVjay9zZXQgSVNfQU5fSU1QT1JUX09OX0RFTUFORF9QIGluIHJlYWRfaW1wb3J0X2Rpci4KCShub3RlX3Bvc3NpYmxlX2NsYXNzbmFtZSk6ICBOZXcgZnVuY3Rpb24uCgkocmVhZF9pbXBvcnRfZW50cnkpOiAgUmVtb3ZlZC4gIE1lcmdlZCB3aXRoIHJlYWRfaW1wb3J0X2Rpci4KCShyZWFkX2ltcG9ydF9kaXIpOiAgRG9uJ3QgY2FsbCBmaW5kX2NsYXNzIC0gdGhhdCBvbmx5IGdpdmVzIHVzCgl0aGUgZmlyc3QgY2xhc3NwYXRoIGVudHJ5IGhhdmluZyB0aGUgbmVlZGVkIHBhY2thZ2UuCglVc2UgdGhlIHN0cnVjdCBidWZmZXIgZGF0YSBzdHJ1Y3R1cmUgZnJvbSBidWZmZXIuaC4KCShyZWFkX2ltcG9ydF9kaXIsIGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQpOiAgVGhlIHJlbWVtYmVyZWQKCWNsYXNzIG5hbWVzIG5vdyB1c2UgJy4nIChub3QgJy8nKSBhcyBwYWNrYWdlIHNlcGFyYXRvci4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiAgQ2FsbCB3cml0ZV9jbGFzc2ZpbGUKCWhlcmUsIGFuZCBub3QgaW4gamF2YV9leHBhbmRfY2xhc3NlcyAod2hpY2ggb25seSBnZXRzIGZpcnN0IGNsYXNzKS4KClNhdCBEZWMgMTIgMTk6NDY6MDQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55ICg8dHlwZV9kZWNsYXJhdGlvbj4pOiAgRG8gbWF5YmVfZ2VuZXJhdGVfY2xpbml0IGxhc3QuCgkocmVnaXN0ZXJfZmllbGRzKTogIElmIGEgc3RhdGljIGZpZWxkcyBoYXMgYW4gaW5pdGlhbGl6ZXIsIGp1c3QKCWNoYWluIGl0IG9uIGN0eHAtPnN0YXRpY19pbml0aWFsaXplZCwgYW5kIGhhbmRsZSBsYXRlci4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogIEZvcmNlIDxjbGluaXQ+IGZpcnN0LgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lLCByZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6ICBKdXN0IGdldCBERUNMX0lOSVRJQUwKCS0gaXQncyBhbHJlYWR5IGJlZW4gY29tcGxldGVkLgoJKHBhdGNoX2luaXRpYWxpemVkX3N0YXRpY19maWVsZCk6ICBOZXcgZnVuY3Rpb24uCgkoamF2YV9jb21wbGV0ZV9maWVsZCk6ICBDYWxsIGl0LgoKU2F0IERlYyAxMiAxOToyMToxMSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW5jb2RlX25ld2FycmF5X3R5cGUsIGJ1aWxkX25ld19hcnJheSk6ICBOZXcgZnVuY3Rpb25zLgoJKiBqYXZhLXRyZWUuaDogIERlY2xhcmUgYnVpbGRfbmV3X2FycmF5LgoJKiBqY2Ytd3JpdGUuYyAocGF0Y2hfbmV3YXJyYXkpOiAgVXNlIGJ1aWxkX25ld19hcnJheS4KCgkqIGV4cHIuYyAoamF2YV9sYW5nX2V4cGFuZF9leHApOiAgU3VwcG9ydCBORVdfQVJSQVlfSU5JVC4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIFN1cHBvcnQgTkVXX0FSUkFZX0lOSVQuCgoJKiBwYXJzZS55IChwYXRjaF9uZXdfYXJyYXlfaW5pdCk6ICBSZS1vcmdhbml6ZS4KCU5vdyBpcyBwYXNzZWQgdGhlIGFjdHVhbCBhcnJheSAocG9pbnRlcikgdHlwZSBvZiB0aGUgdmFsdWUuCglTZXQgdGhlIHR5cGUgb2YgdGhlIENPTlNUUlVDVE9SIHRvIGJlIGFuIEFSUkFZX1RZUEUuCgkocGF0Y2hfYXJyYXlfY29uc3RydWN0b3IpOiAgUmVtb3ZlZCAtIG1lcmdlZCBpbnRvIHBhdGNoX25ld19hcnJheV9pbml0LgogCShqYXZhX2NvbXBsZXRlX3RyZWUpOiAgVXBkYXRlIHBhdGNoX25ld19hcnJheV9pbml0LgoKCSogamNmLXdyaXRlLmMgKGZpbmRfY29uc3RhbnRfaW5kZXgpOiAgTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIFVzZSBmaW5kX2NvbnN0YW50X2luZGV4LgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBVc2UgZmluZF9jb25zdGFudF9pbmRleCBmb3IgQ29uc3RhbnRWYWx1ZS4KCjE5OTgtMTItMTEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoaW52b2tlX2J1aWxkX2R0YWJsZSk6IFJlbmFtZWQgZHRhYmxlIC0+IHZ0YWJsZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJlbmFtZWQgZHRhYmxlIC0+IHZ0YWJsZS4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUmVuYW1lZCBkdGFibGUgLT4gdnRhYmxlLCBhbmQKCWR0YWJsZV9tZXRob2RfY291bnQgLT4gdnRhYmxlX21ldGhvZF9jb3VudC4KClRodSBEZWMgMTAgMjA6MDA6NTQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvbmdfemVyb19ub2RlLCBmbG9hdF96ZXJvX25vZGUsIGRvdWJsZV96ZXJvX25vZGUpOiBOZXcKIAlnbG9iYWwgdmFyaWFibGVzLCBpbml0aWFsaXplZC4KCSogamF2YS10cmVlLmggKGxvbmdfemVyb19ub2RlLCBmbG9hdF96ZXJvX25vZGUsIGRvdWJsZV96ZXJvX25vZGUpOgogCURlY2xhcmVkIG5ldyBnbG9iYWwgdmFyaWFibGVzLgoJKiBsZXguYyAoamF2YV9sZXgpOiBSZXR1cm4gbG9uZ196ZXJvX25vZGUsIGZsb2F0X3plcm9fbm9kZSwKIAlkb3VibGVfemVyb19ub2RlLCBpbnRlZ2VyX3plcm9fbm9kZSB1cG9uIGRpcmVjdCBtYXRjaGluZy4KCSogcGFyc2UueSAocHVyaWZ5X3R5cGVfbmFtZSk6IEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlwZS4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3JfcCk6IENvbnNpZGVyIG5ld190eXBlIGFzIHBvdGVudGlhbGx5CiAJYmVpbmcgYSBpbmNvbXBsZXRlIHR5cGUuIFVzZSBwdXJpZnlfdHlwZV9uYW1lIG9uIHR5cGUgc3RyaW5nLgoJKG1ldGhvZF9oZWFkZXIpOiBzYXZlZF90eXBlOiB1bnVzZWQgdmFyaWFibGUgcmVtb3ZlZC4gRG9uJ3QgZmlndXJlCiAJcmV0dXJuIHR5cGUgaWYgbWV0aG9kIG5hbWUgaXMgaW52YWxpZC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBTZXQgQ0FOX0NPTVBMRVRFX05PUk1BTExZIGFmdGVyIGBub2RlJyB3YXMKIAlwcm9jZXNzZWQgYnkgcGF0Y2hfdW5hcnlvcC4KCShwYXRjaF91bmFyeW9wKTogRml4ZWQgdHlwbyBpbiBjb21tZW50LiBSZS1jb252ZXJ0IHByZS9wb3N0CiAJaW5jcmVtZW50L2RlY3JlbWVudCBub2RlIGludG8gaXRzIG9yaWdpbmFsIHR5cGUgYWZ0ZXIgYmluYXJ5CiAJbnVtZXJpYyBwcm9tb3Rpb24gb24gaXRzIG9wZXJhbmRzLgoKVGh1IERlYyAxMCAxMTowMjo0OSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGFycmF5X2luaXRpYWxpemVyOik6IEFycmF5IGluaXQgb3BlcmFuZCBpcyBOVUxMX1RSRUUKIAlpbnN0ZWFkIG9mIGEgVFJFRV9MSVNUIG9mIE5VTExfVFJFRXMgd2hlbiBwYXJzaW5nIGB7fScuIGB7LH0nIGlzCiAJbm93IGFuIGVycm9yLiBGaXhlZCBpbmRlbnRhdGlvbiBwcm9ibGVtcy4KCShwYXRjaF9zdHJpbmcpOiBIYW5kbGUgZXJyb3JfbWFya19ub2RlIGFzIGFuIGFyZ3VtZW50LgoJKHBhdGNoX25ld19hcnJheV9pbml0KTogRml4ZWQgaW5kZW50YXRpb24gcHJvYmxlbXMuCgkoYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBSZW1vdmVkIGNoZWNrIG9uIG51bGwgd2ZsX3ZhbHVlLgogIAlSZXR1cm4gYW4gZXJyb3IgaWYgd2ZsX3ZhbHVlJ3Mgd2FsayByZXR1cm5zIGFuIGVycm9yLgoKV2VkIERlYyAgOSAxNTozNzowNSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5kZWYgKE5FV19BUlJBWV9JTklUKTogTmV3IEphdmEgdHJlZSBjb2RlLgoJKiBsZXguYyAoamF2YV9sZXgpOiBSZW1lbWJlciBjb2x1bW4gcG9zaXRpb24gYmVmb3JlIGFkdmFuY2luZyBvbmUKIAl0b2tlbi4gUmV0YWluIGxvY2F0aW9uIGluZm9ybWF0aW9uIG9uIE9DQl9USy4KCSogbGV4LmggKHR5cGVkZWYgc3RydWN0IGphdmFfbGMpOiBBZGRlZCBuZXcgZmllbGQuCgkqIHBhcnNlLmggKEdFVF9TS0lQX1RZUEUpOiBOZXcgbWFjcm8uCgkoUVVBTF9ERUNMX1RZUEUpOiBSZWRlZmluZWQgdXNpbmcgR0VUX1NLSVBfVFlQRS4KCSogcGFyc2UueSAoYnVpbGRfbmV3X2FycmF5X2luaXQsIHBhdGNoX25ld19hcnJheV9pbml0LAogCXBhdGNoX2FycmF5X2NvbnN0cnVjdG9yLCBtYXliZV9idWlsZF9hcnJheV9lbGVtZW50X3dmbCwKIAlhcnJheV9jb25zdHJ1Y3Rvcl9jaGVja19lbnRyeSk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKHN3aXRjaF9ibG9jazopOiBUYWdnZWQgPG5vZGU+LgoJKE9DQl9USyk6IFRhZ2dlZCA8b3BlcmF0b3I+LgoJKGFycmF5X2luaXRpYWxpemVyOik6IEluc3RhbGxlZCBhY3Rpb25zLgoJKHZhcmlhYmxlX2luaXRpYWxpemVyKTogQnVpbGQgbG9jYXRpb24gaW5mb3JtYXRpb24gb24gZWxlbWVudCBpZgogCW5lY2Vzc2FyeS4KCShzd2l0Y2hfc3RhdGVtZW50Oik6IEZpeGVkIGluZGVudGF0aW9uIHR5cG8uCgkoc3dpdGNoX2Jsb2NrOik6IFJlZGVmaW5lZCBkZWZhdWx0IGFjdGlvbi4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBIYW5kbGUgTkVXX0FSUkFZX0lOSVQgaW4gTU9ESUZZX0VYUFI6LgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgoJKG1heWJlX2J1aWxkX2FycmF5X2VsZW1lbnRfd2ZsLCBidWlsZF9uZXdfYXJyYXlfaW5pdCwKIAlwYXRjaF9uZXdfYXJyYXlfaW5pdCwgcGF0Y2hfYXJyYXlfY29uc3RydWN0b3IsCiAJYXJyYXlfY29uc3RydWN0b3JfY2hlY2tfZW50cnkpOiBOZXcgZnVuY3Rpb25zLgoKTW9uIERlYyAgNyAxNToxMzo1MiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGFycmF5X2luaXRpYWxpemVyKTogVGFnZ2VkIDxub2RlPi4KCSh2YXJpYWJsZV9pbml0aWFsaXplcjopOiBVc2UgZGVmYXVsdCBydWxlLgoJKGFycmF5X2luaXRpYWxpemVyOik6IERlZmluZWQgYWN0aW9ucy4KCSh2YXJpYWJsZV9pbml0aWFsaXplcnM6KTogTGlrZXdpc2UuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogVXNlIERFQ0xfQ09OVEVYVCB0byBidWlsZAogCW5vbi1zdGF0aWMgZmllbGQgYWNjZXNzZXMuCgkocGF0Y2hfaW52b2tlKTogRml4ZWQgaW5kZW50YXRpb24gdHlwby4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBMaWtld2lzZS4KCShidWlsZF9sYWJlbGVkX2Jsb2NrKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIEdlbmVyYXRlIGFuIGVycm9yCiAJaW4gY2FzZSBvZiBkdXBsaWNhdGUgbG9vcCBsYWJlbHMuCgkocGF0Y2hfY29uZGl0aW9uYWxfZXhwcik6IFBhdGNoIHJlc3VsdHMgb2Ygc3RyaW5nIGNvbmNhdGVuYXRpb24KIAlvcGVyYXRpb25zLgoKU3VuIERlYyAgNiAxMzo0NTowMCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChmaW5kX21ldGhvZHJlZl9pbmRleCk6ICBXaGVuIHRoZSBjbGFzcyBpcyBhbiBpbnRlcmZhY2UsCglnZW5lcmF0ZSBDT05TVEFOVF9JbnRlcmZhY2VNZXRob2RyZWYgaW5zdGVhZCBvZiBhIENPTlNUQU5UX01ldGhvZFJlZi4KCgkqIGRlY2wuYyAoZmluaXRfaWRlbnRpZmllcl9ub2RlKTogIFVzZSAiJGZpbml0JCIsIHJhdGhlciB0aGFuCgkiPGZpbml0PiIgKHdoaWNoIFN1bidzIHZlcmlmaWVyIHJlamVjdHMpLgoJKiBwYXJzZS55IChtYXliZV9nZW5lcmF0ZV9maW5pdCk6ICBMZWF2ZSBvdXQgbWVhbmluZ2xlc3MgZmluYWwgZmxhZy4KCShnZW5lcmF0ZV9maWVsZF9pbml0aWFsaXphdGlvbl9jb2RlKTogIFJlbW92ZWQuCgkoZml4X2NvbnN0cnVjdG9ycykgIERvbid0IGFkZCBjYWxsIHRvICRmaW5pdCQgaGVyZSAod3Jvbmcgb3JkZXIpLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogIEFkZCAkZmluaXQkIGNhbGwgaGVyZS4KCgkqIGphdmEtdHJlZS5oIChDQUxMX1VTSU5HX1NVUEVSKTogIE5ldyBtYWNyby4KCSogcGFyc2UueSAocGF0Y2hfaW52b2tlKTogIFJlbW92ZSBpbSBsb2NhbCB2YXJpYWJsZS4KIAkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24sIHBhdGNoX2ludm9rZSk6ICBEb24ndCBwYXNzIHN1cGVyIHBhcmFtZXRlci4KCShwYXRjaF9pbnZva2UpOiAgVXNlIENBTExfVVNJTkdfU1VQRVIgaW5zdGVhZCBvZiBmcm9tX3N1cGVyIHBhcmFtZXRlci4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiAgTWF5YmUgc2V0IENBTExfVVNJTkdfU1VQRVIuCgoJKiBqY2Ytd3JpdGUuYyAoZ2V0X2FjY2Vzc19mbGFncyk6ICBGaXggdHlwbyBBQ0NfUFVCTElDIC0+IEFDQ19GSU5BTC4KCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBEb24ndCBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZQoJc3RhdGVtZW50IGlmIGl0IGlzIGVtcHR5X3N0bXRfbm9kZS4KCgkqIGpjZi13cml0ZS5jIChmaW5kX2NvbnN0YW50X3dpZGUpOiAgTmV3IGZ1bmN0aW9uLgoJKHB1c2hfbG9uZ19jb25zdCk6ICBVc2UgZmluZF9jb25zdGFudF93aWRlLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc24pOiAgRml4IGJ1ZyBpbiBzd2l0Y2ggaGFuZGxpbmcuCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbik6ICBVc2UgY29ycmVjdCBkdXAgdmFyaWFudCBmb3IgTU9ESUZZX0VYUFIuCglBZGQgInJlZHVuZGFudCIgTk9URV9QVVNIL05PVEVfUE9QIHVzZXMgc28gY29kZV9TUF9tYXggZ2V0cyBzZXQuCglFbWl0IGludm9rZWludGVyZmFjZSB3aGVuIGNhbGxpbmcgYW4gaW50ZXJmYWNlIG1ldGhvZC4KCUVtaXQgaW52b2tlc3BlY2lhbCBhbHNvIHdoZW4gY2FsbGluZyBzdXBlciBvciBwcml2YXRlIG1ldGhvZHMuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogIEVtaXQgQ29uc3RhbnRWYWx1ZSBhdHRyaWJ1dGVzLgoKU3VuIERlYyAgNiAxMzoyMToxOCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1kdW1wLmMgKElOVk9LRSk6ICBJZiBpbnZva2VpbnRlcmZhY2UsIHByaW50IG51bWJlciBvZiBhcmdzLgoKVGh1IERlYyAgMyAxNzoxMToxMiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMpOiBOZXcgZnVuY3Rpb24KIAlwcm90b3R5cGUuCgkoTEFZT1VUX1NFRU5fQ0xBU1NfTUVUSE9EUyk6IE1hY3JvIHJlbW92ZWQuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9jbGFzc19maWxlKTogQ2FsbCBqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMuCgkqIHBhcnNlLmggKFBST01PVEVfUkVDT1JEX0lGX0NPTVBMRVRFKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChtZXRob2RfZGVjbGFyYXRvcjopOiBEZWZpbmVkIGFjdGlvbi4KCShpc3N1ZV93YXJuaW5nX2Vycm9yX2Zyb21fY29udGV4dCk6IGlucHV0X2ZpbGVuYW1lIHNhdmVkLCBzZXQgdG8KIAl0aGUgYXBwcm9wcmlhdGUgdmFsdWUgYW5kIHJlc3RvcmVkIGFmdGVyIGphdmFfZXJyb3IgaXMgY2FsbGVkLgoJKGJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSk6IEZpeGVkIGNvbW1lbnQuCgkocmVnaXN0ZXJfZmllbGRzKTogVXNlIFBST01PVEVfUkVDT1JEX0lGX0NPTVBMRVRFLgoJKG1ldGhvZF9oZWFkZXIpOiBEZWFsIHdpdGggcmV0dXJuIHR5cGUgdGhlIHNhbWUgd2F5IHR5cGUgYXJlCiAJaGFuZGxlZCBmb3IgZmllbGRzIGFuZCBtZXRob2QncyBwYXJhbWV0ZXJzIGFuZCBsb2NhbCB2YXJpYWJsZXMKIAl0eXBlcyBhcmUgaGFuZGxlZC4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogUmVtb3ZlZCBleHRyYSBDUi4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZSBQUk9NT1RFX1JFQ09SRF9JRl9DT01QTEVURS4KCShqYXZhX2xheW91dF9zZWVuX2NsYXNzX21ldGhvZHMpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IENhbGwgamF2YV9sYXlvdXRfc2Vlbl9jbGFzc19tZXRob2RzLgoKVGh1IERlYyAgMyAxNTo1Njo1MCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLHkgKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQpOiAgU2V0IENBTl9DT01QTEVURV9OT1JNQUxMWS4KClRodSBEZWMgIDMgMTU6MDg6MzAgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtZHVtcC5jIChtYWluKTogIEZpeCBlcnJvciBtZXNzYWdlLgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiAgU3R5bGUgZml4LgoKV2VkIERlYyAgMiAxNTo1MjoyNSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc19tZXRob2QpOiBDYWxsIGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlCglvbiBjb25zdHJ1Y3RvcnMgdG9vLgoJKiBwYXJzZS55IChjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogVXNlIFRZUEVfQVJHVU1FTlRfU0lHTkFUVVJFLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uKTogRGVmaW5lIGEgcHJpbWFyeSB3aGVuIHJlc29sdmluZyBhbgogCWV4cHJlc3Npb24gbmFtZS4gQXVnbWVudGVkIGNvbW1lbnQgb24gY29kZSBjaGVja2luZyBpbGxlZ2FsIGB0aGlzJwogCXVzYWdlLiBMb29zZW5lZCBpdCB0ZXN0IGJ5IGFjY2VwdGluZyBORVdfQ0xBU1NfRVhQUi4KClR1ZSBEZWMgIDEgMTM6NTM6MjQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3NfbWV0aG9kKTogRG9uJ3QgcmVwb3J0IGVycm9yIG9uIG5vbi1zdGF0aWMKIAlvdmVycmlkaW5nIHN0YXRpYyBpZiB0aGUgbWV0aG9kIGlzIHByaXZhdGUuCgkqIGphdmEtdHJlZS5oIChmaW5pc2hfY2xhc3MpOiBQcm90b3R5cGUgYWRkZWQuCgkqIGxleC5jIChqYXZhX2dldF9saW5lX2NvbCk6IEhhbmRsZSBjb2wgYXJndW1lbnQgLTIgdmFsdWUuCgkqIHBhcnNlLmg6IEFsbCBzdGF0aWMgbWV0aG9kIGRlY2xhcmF0aW9ucyBtb3ZlZCB0byBwYXJzZS55LgoJKiBwYXJzZS55OiBOb3cgY29udGFpbnMgYWxsIHN0YXRpYyBtZXRob2QgZGVjbGFyYXRpb25zIHByZXZpb3VzbHkKIAlmb3VuZCBpbiBwYXJzZS5oLgoJKGZpbmRfZXhwcl93aXRoX3dmbCwgbWlzc2luZ19yZXR1cm5fZXJyb3IsCiAJdW5yZWFjaGFibGVfc3RtdF9lcnJvcik6IE5ldyBmdW5jdGlvbnMuCgkoamF2YV9nZXRfcmVhbF9tZXRob2RfbmFtZSk6IElkZW50aWZ5IGNvbnN0cnVjdG9ycyBiZWFyaW5nIGNsYXNzCiAJbmFtZXMgaW4gc291cmNlIGNvZGUgY29tcGlsZWQgY2xhc3NlcyBvbmx5LgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBDYWxsIG1pc3NpbmdfcmV0dXJuX2Vycm9yLgoJKGludm9jYXRpb25fbW9kZSk6IFByaXZhdGUgbWV0aG9kcyBpbnZva2VkIGFzIHN0YXRpYyBtZXRob2RzLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IENhbGwgdW5yZWFjaGFibGVfc3RtdF9lcnJvci4KCjE5OTgtMTItMDEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICgrdGFyZ2V0KTogUmVtb3ZlZC4KCSgreG1ha2VfZmlsZSk6IExpa2V3aXNlLgoJKCt0bWFrZV9maWxlKTogTGlrZXdpc2UuCgkoLk5PRVhQT1JUKTogUmVtb3ZlZCBkdXBsaWNhdGUuCgpGcmkgTm92IDI3IDEzOjIwOjUxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChqYzEsIGp2LXNjYW4pOiBMaW5rIHdpdGggJChTVUJESVJfT0JTVEFDSykuCgoJKiBqdi1zY2FuLmM6IEZpeCB4bWFsbG9jIHByb3RvdHlwZS4gIFByb3ZpZGUgYW4geG1hbGxvYyBkZWZpbml0aW9uLgoKCSoganZnZW5tYWluLmM6IFJlbW92ZSB0aGUgeG1hbGxvYyBwcm90b3R5cGUsIHdlIGdldCBpdCBmcm9tCglsaWJpYmVydHkuaC4gIFByb3ZpZGUgYW4geG1hbGxvYyBkZWZpbml0aW9uLgoKCSoganZzcGVjLmM6IFJlbW92ZSB0aGUgeG1hbGxvYyBwcm90b3R5cGUuCgoJKiBwYXJzZS1zY2FuLnk6IEluY2x1ZGUgY29uZmlnLmggYW5kIHN5c3RlbS5oLiAgRG9uJ3QgaW5jbHVkZQoJT1MgaGVhZGVycyBvciBnYW5zaWRlY2wuaC4gIERvbid0IHByb3RvdHlwZSB4bWFsbG9jL3hzdHJkdXAuCglQcm92aWRlIGFuIHhzdHJkdXAgZGVmaW5pdGlvbi4KClRodSBOb3YgMjYgMjI6MDM6NTggMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiBSZWNvZ25pemUgIi5qYXIiIHRvby4KCSogbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KClRodSBOb3YgMjYgMTI6NDQ6MDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgSW4gQ2FsbF9FWFBSLCBoYW5kbGUKCXNvZnRfbW9uaXRvcmVudGVyX25vZGUsIHNvZnRfbW9uaXRvcmV4aXRfbm9kZSwgdGhyb3dfbm9kZS4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6CiAgCUhhbmRsZSBwcmUvcG9zdC1pbmNyZW1lbnQvZGVjcmVtZW50IG9mIGxvbmcuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOgoJSGFuZGxlIG1pc3NpbmcgZXhjZXB0aW9uIGhhbmRsZXIgKGZpbmFsbHkgZm9yIHN5bmNocm9uaXplZCkuCgpXZWQgTm92IDI1IDA5OjQ3OjE1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamF2YS10cmVlLmggKGVuZF9wYXJhbXNfbm9kZSk6ICBEZWNsYXJlIGdsb2JhbC4KCSogZGVjbC5jIChlbmRfcGFyYW1zX25vZGUpOiAgTmV3IGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZywgc3RhcnRfamF2YV9tZXRob2QpOiAgVXNlIGVuZF9wYXJhbXNfbm9kZSBmb3IKCWVuZCBvZiBsaXN0IG9mIHBhcmFtZXRlciB0eXBlcy4gIEZvbGxvd3MgY29ycmVjdCBnY2MgY29udmVudGlvbnMuCgkqIGV4cHIuYyAocG9wX2FyZ3VtZW50X3R5cGVzLCBwb3BfYXJndW1lbnRzKTogIExpa2V3aXNlLgoJKiBsYW5nLmMgKHB1dF9kZWNsX25vZGUpOiAgTGlrZXdpc2UuCgkqIHR5cGVjay5jICh2YXJpb3VzIHBsYWNlcyk6ICBMaWtld2lzZS4KCSogY2xhc3MueSAodmFyaW91cyBwbGFjZXMpOiAgTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHZhcmlvdXMgcGxhY2VzKTogIExpa2V3aXNlLgoKCSogcGFyc2UueSAoamF2YV9jb21wbGV0ZV90cmVlKTogIE1vdmUgQ0FOX0NPTVBMRVRFX05PUk1BTExZLgoJKGJ1aWxkX2p1bXBfdG9fZmluYWxseSk6ICBBZGQgbWlzc2luZyBDQU5fQ09NUExFVEVfTk9STUFMTFkuCgoJKiBjbGFzcy5jOiAgQWRkICNpbmNsdWRlIGZsYWdzLmgsIHJlbW92ZSBuby1sb25nZXIgbmVlZGVkIGRlY2xhcmF0aW9uLgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzX21ldGhvZCk6ICBSZW1vdmUgY29tbWVudGVkLW91dCBjb2RlLCByZS1mb3JtYXQuCglEb24ndCBhZGQgdnRhYmxlIGVudHJ5IChvciBpbmRleCkgZm9yIHByaXZhdGUgbWV0aG9kcy4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogIEEgcHJpdmF0ZSBtZXRob2QgaXMgaW1wbGljaXRseSBmaW5hbC4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogIElmIGlubGluaW5nIG9yIG9wdGltaXppbmcsCglza2lwIHByaXZhdGUgbWV0aG9kcy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9jbGFzcyk6ICBOZXcgZnVuY3Rpb24uICBDYWxscyBleGlzdGluZyBtZXRob2RzLAoJYnV0IGFsbHMgZW1pdHMgZGVmZXJyZWQgaW5saW5lIGZ1bmN0aW9ucy4KCSogamNmLXBhcnNlLmMgKHBhcnNlX2NsYXNzX2ZpbGUpOiAgQ2FsbCBmaW5pc2hfY2xhc3MuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiAgTGlrZXdpc2UuCgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYmlub3ApOiAgRXhwbGljaXQgZGVmYXVsdCwgdG8gc2lsZW5jZSAtV2FsbC4KCgkqIGV4cHIuYyAoQ0hFQ0tfUENfSU5fUkFOR0UpOiAgQWRkIHZvaWQgY2FzdCB0byBraWxsIHdhcm5pbmdzLgoKV2VkIE5vdiAyNSAwMDo1MDo1OCAxOTk4ICBNYXJjIEVzcGllIDxlc3BpZUBxdWF0cmFtYXJhbi5lbnMuZnI+CgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiBGaXggdHlwby4KClR1ZSBOb3YgMjQgMTc6MDY6MzggMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiAoZ2VuZXJhdGVfY2xhc3NmaWxlKTogQWx3YXlzIHdyaXRlIGNsYXNzIGFjY2VzcyBmbGFnIHdpdGgKIAlBQ0NfU1VQRVIgc2V0LgoKVHVlIE5vdiAyNCAxNjozNDozMyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKG1heWJlX2xheW91dF9zdXBlcl9jbGFzcyk6IE5ldyBmdW5jdGlvbi4KCShsYXlvdXRfY2xhc3MpOiBSZW9yZ2FuaXplZC4gTG9vcCBvbiBjbGFzcyBtZXRob2RzIGRpc3BhdGNoZWQgaW50bwogCWEgbmV3IGZ1bmN0aW9uLiBDYWxsIG1heWJlX2xheW91dF9zdXBlcl9jbGFzcy4KCShsYXlvdXRfY2xhc3NfbWV0aG9kcywgbGF5b3V0X2NsYXNzX21ldGhvZCk6IE5ldyBmdW5jdGlvbnMuCgkqIGV4cHIuYyAoZXhwYW5kX2phdmFfTkVXKTogQ2FsbCBsYXlvdXRfY2xhc3NfbWV0aG9kcyBvbiBsb2FkZWQKIAljbGFzcy4KCShleHBhbmRfaW52b2tlKTogTGlrZXdpc2UuCgkqIGphdmEtdHJlZS5oIChhbGxfY2xhc3NfbGlzdCk6IE5ldyBnbG9iYWwgdmFyaWFibGUgZGVjbGFyZWQuCgkobGF5b3V0X2NsYXNzX21ldGhvZHMsIGxheW91dF9jbGFzc19tZXRob2QpOiBOZXcgZnVuY3Rpb24KIAlwcm90b3R5cGVzLgoJKExBWU9VVF9TRUVOX0NMQVNTX01FVEhPRFMpOiBOZXcgbWFjcm8uCgkqIGpjZi1wYXJzZS5jIChhbGxfY2xhc3NfbGlzdCk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkobG9hZF9jbGFzcyk6IEV4dGVuZGVkIHdoYXQgY2xhc3Nfb3JfbmFtZSBjYW4gYmUuIFVzZSBwYXJzZXIKIAljb250ZXh0IG1lY2hhbmlzbSB0byBzYXZlIGdsb2JhbHMgYmVmb3JlIGNhbGxpbmcgamNmX3BhcnNlLgoJKGpjZl9wYXJzZV9zb3VyY2UpOiBEb24ndCBwYXJzZSB0d2ljZSBpZiBIQVNfQkVFTl9BTFJFQURZX1BBUlNFRF9QCiAJaXMgc2V0IG9uIHRoZSBmaWxlIG5hbWUuCgkoamNmX3BhcnNlKTogTGF5b3V0IGNsYXNzIG1ldGhvZHMgd2hlbiBPYmplY3QgaXMgbG9hZGVkLCBvdGhlcndpc2UKIAlyZWNvcmQgY2xhc3MgaW4gYWxsX2NsYXNzX2xpc3QgZm9yIGRlbGF5ZWQgbWV0aG9kIGxheW91dC4KCShwYXJzZV9jbGFzc19maWxlKTogVXNlIExBWU9VVF9TRUVOX0NMQVNTX01FVEhPRFMuCgkqIGxhbmcuYyAocHV0X2RlY2xfbm9kZSk6IERlY29kZSA8aW5pdD4gaW50byB0aGUgZGVjbCBjb250ZXh0CiAJY2xhc3MgbmFtZS4KCSogbGV4LmMgKGphdmFfYWxsb2NhdGVfbmV3X2xpbmUpOiBVc2UgeG1hbGxvYy4KCSogcGFyc2UuaCAoSU5DT01QTEVURV9UWVBFX1ApOiBSZWRlZmluZWQgdG8gd29yayB3aXRoIGluY29tcGxldGUKIAlwb2ludGVycywgbm90IFRSRUVfTElTVCBlbGVtZW50cy4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBGaXhlZCBjb21tZW50IGluZGVudGF0aW9ucywgYWRkZWQgY29tbWVudHMKIAlhbmQgcmVvcmRlcmVkIHNvbWUgZmllbGRzLgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IEZ1bmN0aW9uIHByb3RvdHlwZSByZW1vdmVkLgoJKiBwYXJzZS55IChqYXZhX3B1c2hfcGFyc2VyX2NvbnRleHQpOiBVc2UgeG1hbGxvYy4KCShqYXZhX3BhcnNlcl9jb250ZXh0X3Jlc3RvcmVfZ2xvYmFsKTogUG9wIGV4dHJhIHB1c2hlZCBjdHhwIG9ubHkKIAl3aGVuIHRoZXJlJ3Mgbm90aGluZyBuZXh0LgoJKG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCk6IEZpeGVkIGNvbW1lbnQsIGFkZCBuZXcKIAljcmVhdGVkIGNsYXNzIGRlY2wgdG8gYWxsX2NsYXNzX2xpc3QuCgkobWV0aG9kX2hlYWRlcik6IFVzZSBHRVRfUkVBTF9UWVBFIG9uIGFyZ3VtZW50J3MgdHlwZXMuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBVc2UgR0VUX1JFQUxfVFlQRSwgY2hhbmdlIHR5cGUgdG8gdGhlIHJlYWwKIAl0eXBlIGluIFRSRUVfTElTVCBkZXBlbmRlbmN5IG5vZGUuIEJ1aWxkIGFyZ3VtZW50IGxpc3Qgd2l0aCB0aGUKIAlyZWFsIHR5cGUuCgkoY3JlYXRlX2pkZXBfbGlzdCk6IFVzZSB4bWFsbG9jLiBSZW1vdmVkIGFsbG9jYXRpb24gZXJyb3IgbWVzc2FnZS4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBCcm9hZGVuZWQKIAlpbmNvbWluZyBhcmd1bWVudCBtZWFuaW5nLgoJKHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSk6IFVzZSB4bWFsbG9jLiBSZW1vdmVkIGFsbG9jYXRpb24gZXJyb3IKIAltZXNzYWdlLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogRml4ZWQgbGVhZGluZyBjb21tZW50LgoJKGpkZXBfcmVzb2x2ZV9jbGFzcyk6IFJldmVyc2VkIGlmIHN0YXRlbWVudCBjb25kaXRpb24gYW5kIHN3aXRjaAogCWlmIGFuZCBlbHNlIGJvZGllcy4KCShyZXNvbHZlX2FuZF9sYXlvdXQpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIEJyb2FkZW5lZCBpbmNvbWluZwogCWFyZ3VtZW50IG1lYW5pbmcuCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IE5ldyBsb2NhbCB2YXJpYWJsZSBuYW1lLCBmb3IKIAljbGFyaXR5LiBwdXJpZnlfdHlwZV9uYW1lIHVzZWQgZm9yIGFsbCBlcnJvciBjYXNlcy4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogU3RyaWN0ZXIgY2hlY2sgb24gY29uc3RydWN0b3JzLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogUmV2ZXJzZSBtZXRob2RzIGxpc3Qgb25seSBpZiBub3QKIAlhbHJlYWR5IGxhaWQgb3V0LiBMYXlvdXQgYXJ0aWZpY2lhbCBjb25zdHJ1Y3Rvci4KCShqYXZhX2NoZWNrX21ldGhvZHMpOiBEZWxldGVkLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IE9idGFpbiBpbmNvbXBsZXRlIHR5cGUgZm9yIHBhdGNoYWJsZQogCW1ldGhvZCBhcmd1bWVudHMuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gVXNlCiAJTEFZT1VUX1NFRU5fQ0xBU1NfTUVUSE9EUywgdXNlIGEgbG9vcCB0byBjaGVjayBtZXRob2RzLiBBZGRlZCBlbHNlCiAJc3RhdGVtZW50IHRvIGxheW91dCBvcGVyYXRpb24sIHJldXNlIExBWU9VVF9TRUVOX0NMQVNTX01FVEhPRFMKIAliZWZvcmUgcmV0dXJuaW5nLiBGaXhlZCBjb21tZW50cy4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogQ2hlY2sgZm9yIGVycm9ycyB1cCBmcm9udC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbik6IENsYXNzIHRvIHNlYXJjaCBpcyByZXNvbHZlZCBhbmQgbGFpZAogCW91dC4KClR1ZSBOb3YgMjQgMTI6NTc6MTMgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6ICBBZGQgbWlzc2luZyBlbWl0X3F1ZXVlLgoKCSogamF2YW9wLmggKGludDgpOiAgUmVtb3ZlZCAtIG5vdCB1c2VkLgoJKGpieXRlKTogIFJlZGVmaW5lIHBvcnRhYmx5IHdpdGggY29ycmVjdCBzaWduZWRuZXNzLgoKCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIERvbid0IGZyZWUgc3dfc3RhdGUuY2FzZXMuCgoJKiBqY2Ytd3JpdGUuYyAoZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbnMpOiAgRml4IHR5cG8KCU9QQ09ERV9nZXRzdGF0aWMgdG8gT1BDT0RFX2dldGZpZWxkLgoKCSogamF2YS10cmVlLmRlZiAoQ0FTRV9FWFBSLCBERUZBVUxUX0VYUFIpOiAgS2luZCBpcyAneCcsIG5vdCAnMScuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBGb3IgQ0FTRV9FWFBSIGFuZCBERUZBVUxUX0VYUFIsCglzZXQgVFJFRV9TSURFX0VGRkVDVFMgKG90aGVyd2lzZSBleHBhbmRfZXhwciBtYXkgc2tpcCB0aGVtKS4KClRodSBOb3YgMTkgMTE6MTY6NTUgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IEZ1bmN0aW9uIHJldHVybmVkIHR5cGUgaXMKIAl2b2lkLiBBZGRlZCBwcm90b3R5cGUuCgkoamNmX3BhcnNlKTogRnVuY3Rpb24gcmV0dXJuZWQgdHlwZSBpcyB2b2lkLgoJKHl5cGFyc2UpOiBSZW1vdmUgY2FsbCB0byBmY2xvc2Ugb24gdGhlIGxhc3QgcGFyc2VkIGZpbGUuCgoJKiBqYXZhLXRyZWUuaCAoamNmX3BhcnNlKTogQ2hhbmdlZCBqY2ZfcGFyc2UgcHJvdG90eXBlLgoKV2VkIE5vdiAxOCAyMzo1NDo1MyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHVubWFuZ2xlX2NsYXNzbmFtZSk6IFNldCBRVUFMSUZJRURfUCB3aGVuIGFwcHJvcHJpYXRlLgoJKGxheW91dF9jbGFzcyk6IENvcGUgd2l0aCBtZXRob2RzIGZlYXR1cmluZyBXRkwgaW4gZGVjbCBuYW1lcy4KCSogZGVjbC5jICh1bnF1YWxpZmllZF9vYmplY3RfaWRfbm9kZSk6IE5ldyBnbG9iYWwgdmFyaWFibGUsCiAJaW5pdGlhbGl6ZWQuCgkoYnVpbGRfZGVjbF9ub19sYXlvdXQpOiBSZW1vdmVkLgoJKiBleHByLmMgKGJ1aWxkX3ByaW10eXBlX3R5cGVfcmVmKTogSGFuZGxlIERvdWJsZS4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBGaXhlZCBpbmRlbnRhdGlvbnMuCgkqIGphdmEtdHJlZS5oIChDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QKTogRmxhZyBkZWxldGVkLgoJKGZsYWdfd2FsbCwgZmxhZ19yZWR1bmRhbnQsIGZsYWdfbm90X292ZXJyaWRpbmcsCiAJZmxhZ19zdGF0aWNfbG9jYWxfamRrMV8xLCB1bnF1YWxpZmllZF9vYmplY3RfaWRfbm9kZSk6IEdsb2JhbAogCXZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KCShidWlsZF9kZWNsX25vX2xheW91dCk6IFJlbW92ZWQgcHJvdG90eXBlLgoJKGphdmFfZ2V0X3JlYWxfbWV0aG9kX25hbWUpOiBBZGRlZCBwcm90b3R5cGUuCgkoSVNfVU5DSEVDS0VEX0VYUFJFU1NJT05fUCk6IFJlbmFtZWQgSVNfVU5DSEVDS0VEX0VYQ0VQVElPTl9QLgoJKGphdmFfcGFyc2VfYWJvcnRfb25fZXJyb3IpOiBNYWNybyBub3cganVzdCByZXR1cm5zLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IENoZWNrIGZjbG9zZSByZXR1cm5lZAogCXZhbHVlLiBDYWxsIGVtaXRfcmVnaXN0ZXJfY2xhc3NlcyBpZiBqYXZhX3JlcG9ydF9lcnJvcnMgcmV0dXJucwogCXplcm8uCgkqIGxhbmMuYyAoZmxhZ193YWxsLCBmbGFnX3JlZHVuZGFudCwgZmxhZ19ub3Rfb3ZlcnJpZGluZywKIAlmbGFnX3N0YXRpY19sb2NhbF9qZGsxXzEpOiBOZXcgaW50ZWdlciBmbGFncy4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgZmxhZ3Mgc2V0IGhlcmUuCgkqIHBhcnNlLmggKEdFVF9SRUFMX1RZUEUsIEdFVF9NRVRIT0RfTkFNRSk6IE5ldyBtYWNyb3MuCgkoT0JTT0xFVEVfTU9ESUZJRVJfV0FSTklORyk6IElzc3VlIGVycm9yIG1lc3NhZ2UgY29uZGl0aW9uYWxseSB0bwogCXRoZSBmbGFnX3JlZHVuZGFudCB2YXJpYWJsZS4KCShTRVRfVFlQRV9GT1JfUkVTT0xVVElPTik6IENvbnNpZGVyIE9iamVjdCBiZWluZyBqYXZhLmxhbmcuT2JqZWN0CiAJd2hlbiBwYXJzaW5nIGphdmEubGFuZy5PYmplY3QgY2xhc3MuCgkoQlVJTERfTU9OSVRPUl9FTlRFUiwgQlVJTERfTU9OSVRPUl9FWElUKTogQWRkZWQgdGVybWluYWwKIAlOVUxMX1RSRUUgdG8gYnVpbGQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogRml4ZWQgaW5kZW50YXRpb24uCgkocGF0Y2hfYXJyYXlfcmVmKTogQ2hhbmdlZCBwcm90b3R5cGUuCgkobm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wKTogUHJvdG90eXBlIHJlbW92ZWQuCgkoamF2YV9yZXBvcnRfZXJyb3JzKTogQWRkZWQgZnVuY3Rpb24gcHJvdG90eXBlLgoJKiBwYXJzZS55IChmb3JtYWxfcGFyYW1ldGVyOik6IENoYW5nZWQgZXJyb3IgbWVzc2FnZSBmb3Igbm90IHlldAogCXN1cHBvcnRlZCBmaW5hbCBwYXJhbWV0ZXJzLgoJKGNsYXNzX3R5cGVfbGlzdDopOiBTZXQgYm90aCBQVVJQT1NFIGFuZCBWQUxVRSBvZiBjcmVhdGVkCiAJVFJFRV9MSVNUIHRvIGJlIGNsYXNzX3R5cGUuCgkocHJpbWFyeV9ub19uZXdfYXJyYXk6KTogSGFuZGxlIGNsYXNzIGxpdGVyYWxzIG9uIHByaW1pdGl2ZSB0eXBlcy4KCShwYXJzZV93YXJuaW5nX2NvbnRleHQpOiBSZWluc3RhbGxlZCBjb3JyZWN0IGZvcmNlX2Vycm9yIGFuZAogCWRvX3dhcm5pbmcgZmxhZ3Mgc2V0dXBzLgoJKGphdmFfcmVwb3J0X2Vycm9ycyk6IENoYW5nZWQgcHJvdG90eXBlLiBSZXR1cm4gamF2YV9lcnJvcl9jb3VudAogCXZhbHVlLgoJKHZhcmlhYmxlX3JlZGVmaW5pdGlvbl9lcnJvcik6IENvbnNpZGVyIHRyZWF0aW5nIHZhcmlhYmxlIHR5cGUgYXMKIAlhIGZha2UgcG9pbnRlci4KCShjcmVhdGVfaW50ZXJmYWNlKTogV2FybiBhYm91dCByZWR1bmRhbnQgYWJzdHJhY3QgbW9kaWZpZXIgaWYKIAlmbGFnX3JlZHVuZGFudCBpcyBzZXQuIENoYW5nZWQgZXJyb3IgbWVzc2FnZS4KCShsb29rdXBfZmllbGRfd3JhcHBlcik6IFNhdmUvcmVzdG9yZSBnbG9iYWxzIGJlZm9yZS9hZnRlciBsb29raW5nCiAJdXAgZmllbGQuCgkoZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yX3ApOiBDb25zaWRlciB0cmVhdGluZyBkZWNsYXJhdGlvbgogCXR5cGUgYXMgYSBmYWtlIHBvaW50ZXIuCgkocmVnaXN0ZXJfZmllbGRzKTogRXh0cmFjdCByZWFsIHR5cGUgZnJvbSBkZXBlbmRlbmN5IG5vZGUuIENoZWNrCiAJZm9yIGR1cGxpY2F0ZSBmaWVsZCBkZWNsYXJhdGlvbiBhZnRlciB0eXBlIGFkanVzdG1lbnQuIFVzZQogCURFQ0xfSU5JVElBTCB0byBzdG9yZSBzdGF0aWMgZmluYWwgaW5pdGlhbGl6ZWQgdmFsdWVzLgoJKG1ldGhvZF9oZWFkZXIpOiBFeHRyYWN0IHJlYWwgZnVuY3Rpb24gdHlwZSBmcm9tIGRlcGVuZGVuY3kgbm9kZS4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyKTogVXNlIEdFVF9NRVRIT0RfTkFNRS4KCShvYnRhaW5faW5jb21wbGV0ZV90eXBlKTogTGF5b3V0IGZha2UgcG9pbnRlciB0eXBlLgoJKHNhZmVfbGF5b3V0X2NsYXNzKTogRG9uJ3QgdHJ5IHRvIGNoZWNrIGZvciBtZXRob2RzIGJlZm9yZSBsYXlvdXQuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IERvbid0IGNoZWNrIGZvciBjb3JyZWN0IHRocm93cyBjbGF1c2UKIAllbGVtZW50cyBpbmhlcml0YW5jZSBoZXJlLgoJKHJlc29sdmVfYW5kX2xheW91dCk6IEJyb2FkZW5lZCBuYW1lIHBhcmFtZXRlciBtZWFuaW5nLgoJKHJlc2V0X21ldGhvZF9uYW1lKTogVXNlIEdFVF9NRVRIT0RfTkFNRS4KCShqYXZhX2dldF9yZWFsX21ldGhvZF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogRG9uJ3QgY2hlY2sgbWV0aG9kcyBpbgogCWphdmEubGFuZy5PYmplY3QuICBWZXJpZnkgbGluZWFnZSBvZiB0aHJvd3MgY2xhdXNlIGVsZW1lbnRzLiBVc2UKIAlmbGFnX25vX292ZXJyaWRpbmcgaW4gd2FybmluZyByZXBvcnQuCgkoY2hlY2tfdGhyb3dzX2NsYXVzZXMpOiBEb24ndCBjaGVjayBpZiBjbGFzcyB3YXMgZnJvbQogCWJ5dGVjb2RlLiBVc2UgSVNfVU5DSEVDS0VEX0VYQ0VQVElPTl9QIG1hY3JvLgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IERvbid0IHNldCBDTEFTU19NRVRIT0RfQ0hFQ0tFRF9QIGZsYWcuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBVc2UgZmxhZ19zdGF0aWNfbG9jYWxfamRrMV8xIHRvIHJlcG9ydAogCXdhcm5pbmcgb24gdW5zdXBwb3J0ZWQgZmluYWwgbG9jYWwgdmFyaWFibGVzLiBVc2UgYnVpbGRfZGVjbAogCWluc3RlYWQgb2YgYnVpbGRfZGVjbF9ub19sYXlvdXQuIEdldCByZWFsIGxvY2FsIHZhcmlhYmxlIHR5cGUgZnJvbQogCWRlcGVuZGVuY3kgbm9kZS4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBHZXQgcmVhbCBwYXJhbWV0ZXIgdHlwZSBmcm9tCiAJZGVwZW5kZW5jeSBub2RlLiBDYWxsIGJ1aWxkX2RlY2wgaW5zdGVhZCBvZiBidWlsZF9kZWNsX25vX2xheW91dC4KCShqYXZhX2xheW91dF9jbGFzc2VzKTogUmV2ZXJzZSB0cmVlIGFuZCBsYXlvdXQgdHlwZSBhbmQgY2xhc3MgYXMKIAlyZXF1aXJlZC4gTWFyayBjbGFzcyBhcyBsb2FkZWQgd2hlbiBkb25lLgoJKHJlc29sdmVfZmllbGRfYWNjZXNzKTogRml4ZWQgaW5kZW50YXRpb24uIFJlc3RyaWN0ZWQgY29uZGl0aW9uCiAJbGVhZGluZyB0byBzdGF0aWMgZmllbGQgYWNjZXNzIGNvZGUgZ2VuZXJhdGlvbi4gU2V0IGZpZWxkX3R5cGUKIAlkZWNsJ3MgVFJFRV9UWVBFIGlmIFFVQUxfREVDTF9UWVBFIG5vdCBhdmFpbGFibGUuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogSW5pdGlhbGl6ZSB0eXBlX2ZvdW5kIHRvCiAJbnVsbC4gSGFuZGxlIHN0YXRpYyBmaWVsZCByZXNvbHZlZCBkdXJpbmcgcXVhbGlmaWNhdGlvbi4gRml4ZWQKIAlsYXlvdXQgb24gbm9uIHByaW1pdGl2ZSBmaWVsZCBkZWNsIHR5cGVzLgoJKG5vdF9hY2Nlc3NpYmxlX3ApOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiBSZXNvbHZlIGFuZCBsYXlvdXQgY2xhc3MgdG8gc2VhcmNoIGZyb20KIAl0eXBlLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogS2VlcCBpbnRlZ2VyIGNvbnN0YW50IDAgYXMgaXMuIFJlc29sdmUgYW5kCiAJbGF5b3V0IG5vbiBwcmltaXRpdmUgdHlwZSwgaWYgbmVjZXNzYXJ5LiBNYWtlIG1ldGhvZCBub2RlIG9ubHkgdG8KIAlyZXBvcnQgZXJyb3JzLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IENvbnNpZGVyIFdGTCdlZCBtZXRob2QKIAlkZWNsIG5hbWVzLiBGaXhlZCBpbmRlbnRhdGlvbi4KCShhcmd1bWVudF90eXBlc19jb252ZXJ0aWJsZSk6IFJlc29sdmUgYW5kIGxheW91dCB0YXJnZXQgdHlwZSBpZgogCW5lY2Vzc2FyeS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBGaXhlZCBpbmRlbnRhdGlvbiBwcm9ibGVtcy4gUmV3cm90ZQogCUNBTExfRVhQUiB0aHJvd24gZXhjZXB0aW9ucyBjaGVjay4gUmUtaW5zdGFsbGVkIGZ1cnRoZXIgcHJvY2Vzc2luZwogCW9mIHRoZSBhc3NpZ25tZW50IGluIGNlcnRhaW4gY2FzZXMuCgkocGF0Y2hfYXNzaWdubWVudCk6IENhbGwgbWF5YmVfYnVpbGRfcHJpbXR0eXBlX3R5cGVfcmVmIHRvIHBlcmZvcm0KIAlpbmxpbmluZyBvbiBjbGFzcyBsaXRlcmFscy4KCSh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IENvcGUgd2l0aCBjb25zdGFudAogCTAgbGl0ZXJhbC4KCSh2YWxpZF9tZXRob2RfaW52b2NhdGlvbl9jb252ZXJzaW9uX3ApOiBMaWtld2lzZS4KCShwYXRjaF9zdHJpbmcpOiBUZW1wb3JhcnkgZGlzYWJsZSBmb3JiaWRkZW4gdXNlIG9mIGB0aGlzJyBpbgogCWV4cGxpY2l0IGNvbnN0cnVjdG9yIGludm9jYXRpb25zIHdoZW4gZG9pbmcgc3RyaW5nIGNvbmNhdGVuYXRpb24KIAl3aXRoaW4gdGhlaXIgc2NvcGUuCgkocGF0Y2hfdW5hcnlvcCk6IEFkZGVkIGNvbW1lbnQuIFJlaW5zdGFsbGVkIGNvZGUgdG8gZGlzYWJsZQogCWZ1cnRoZXIgY2hlY2sgb24gYXNzaWdubWVudCBvcGVyYXRpb24gd2l0aCBjYXN0IGV4cHJlc3Npb24gUkhTLgoJKHBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShidWlsZF90cnlfc3RhdGVtZW50KTogQ2FsbCBidWlsZF9kZWNsIGluc3RlYWQgb2YKIAlidWlsZF9kZWNsX25vX2xheW91dC4KCShwYXRjaF9zeW5jaHJvbml6ZWRfc3RhdGVtZW50KTogTGlrZXdpc2UuCgkocGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogVXNlIElTX1VOQ0hFQ0tFRF9FWENFUFRJT05fUCBpbnN0ZWFkIG9mCiAJSVNfVU5DSEVDS0VEX0VYUFJFU1NJT05fUC4KCShjaGVja190aHJvd25fZXhjZXB0aW9uc19kbyk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBSZXNvbHZlIGFuZAogCWxheW91dCBhcmd1bWVudCBleGNlcHRpb24gdHlwZS4KCShwdXJnZV91bmNoZWNrZWRfZXhjZXB0aW9ucyk6IFVzZSBJU19VTkNIRUNLRURfRVhDRVBUSU9OX1AgaW5zdGVhZAogCW9mIElTX1VOQ0hFQ0tFRF9FWFBSRVNTSU9OX1AuCgpXZWQgTm92IDE4IDE0OjIxOjQ4IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKHl5cGFyc2UpOiBPcGVuIGNsYXNzIGZpbGUgaW4gYmluYXJ5IG1vZGUuCgpTdW4gTm92IDE1IDE3OjE0OjE3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSoganZnZW5tYWluLmM6ICBOZWVkIHRvICNpbmNsdWRlICJnYW5zaWRlY2wuaCIgKHRvIGdldCBQUk9UTykuCgoJKiBqY2Ytd3JpdGUuYyAocGVyZm9ybV9yZWxvY2F0aW9ucyk6ICBNb3ZlIGNoZWNrIG91dCBvbmUgbG9vcC4KClN1biBOb3YgMTUgMTU6MDk6NTYgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW46IEZpeCByZWZlcmVuY2UgdG8gc3JjZGlyLgoJKiBqdi1zY2FuLmM6IEFkZCBtaXNzaW5nIHhtYWxsb2MgcHJvdG90eXBlLgoJKiBqdmdlbm1haW4uYzogRGl0dG8uCgpTdW4gTm92IDE1IDE0OjM2OjI5IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZGVjbC5jIChlcnJvcl9tYXJrX25vZGUpLCBqYXZhLXRyZWUuaDogIE5ldyBnbG9iYWwuCgkqIHBhcnNlLnk6ICBVc2UgZW1wdHlfc3RtdF9ub2RlIGluc3RlYWQgb2Ygc2l6ZV96ZXJvX25vZGUuCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQpOiAgSWYgbWlzc2luZyBlbHNlLCB1c2UgZW1wdHlfc3RtdF9ub2RlLgoKCSogcGFyc2UueSAobm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wKTogIFJlbW92ZWQsIHdpdGggaXRzIGNhbGxlcnMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogIENvbXBsYWluIGlmIHJldHVybiBpcyBtaXNzaW5nLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogIENvbW1lbnQgb3V0IGluY29ycmVjdCBlcnJvciBjaGVjay4KCShub3RfYWNjZXNzaWJsZV9wKTogIEZpeCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIG1ldGhvZHMuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb24pOiAgUGFzcyBjb3JyZWN0IGNvbnRleHQgdG8gbm90X2FjY2Vzc2libGVfcC4KCShmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QpOiAgTGlrZXdpc2UuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6ICBJZiBBUlJBWV9SRUYsIGl0J3MgYW4gZXhwcmVzc2lvbiBuYW1lLgoJKGphdmFfY29tcGxldGVfdHJlZSk6ICBGb3IgQ0FTRV9FWFBSIGFuZCBERUZBVUxUX0VYUFIsIHNldAoJVFJFRV9UWVBFICh0byB2b2lkX3R5cGVfbm9kZSk7ICBvdGhlcndpc2UgZXhwYW5kX2V4cHIgY3Jhc2hlcy4KCShwYXRjaF9pZl9lbHNlX3N0YXRlbWVudCk6ICBGaXggc2V0dGluZyBvZiBDQU5fQ09NUExFVEVfTk9STUFMTFkuCgoJKiBqY2Ytd3JpdGUuYyAoQ0hFQ0tfT1AsIENIRUNLX1BVVCk6ICBBZGQgc29tZSBlcnJvciBjaGVja2luZy4KCShwdXNoX2ludF9jb25zdCk6ICBSZW1vdmUgcmV1bmRhbnQgTk9URV9QVVNILgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zIC0gY2FzZSBTVFJJTkdfQ1NUKTogIERvIE5PVEVfUFVTSC4KCSgtIGNhc2UgU1dJVENIX0VYUFIpOiAgRml4IGNvZGUgZ2VuZXJhdGlvbiBidWcuCgkoLSBjYXNlIFBSRURFQ1JFTUVOVF9FWFBSIGV0Yyk6ICBSZW1vdmUgcmVkdW5kYW50IE5PVEVfUFVTSC4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgTW9yZSByb2J1c3QgZm9yIGFic3RyYWN0IG1ldGhvZHMuCgpTdW4gTm92IDE1IDEzOjUyOjM5IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IGp2LXNjYW4gYW5kIGp2Z2VubWFpbiBhbGwgcmVxdWlyZSBsaWJpYmVydHkuCgkqIE1ha2UtbGFuZy5pbjogRGl0dG8uCgoJKiBqdi1zY2FuLmM6IFJlbW92ZSB4bWFsbG9jIGFuZCB4c3RyZHVwIGRlZmluaXRpb25zLgoJKiBqdmdlbm1haW46IERpdHRvLgoKU3VuIE5vdiAxNSAxNDoxMDo1NiAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jIChIQU5ETEVfRVhDRVBUSU9OU19BVFRSSUJVVEUpOiAgTmV3IG1hY3JvLgoKCSogamNmLWlvLmMgKGZpbmRfY2xhc3MpOiAgU2ltcGxlci9jbGVhbmVyIHN0cnVjdHVyZSBmaXhlcyBhIGJ1Zy4KClNhdCBOb3YgMTQgMTc6MTk6MTggMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJQWxsb3cgdXNlcyBvZiBpbnRlcmZhY2UgdHlwZXMgdG8gdmVyaWZ5LiAgVGhpcyBpcyBub3QgcmVhbGx5Cgl0eXBlLXNhZmUsIGJ1dCBpdCBtYXRjaGVzIHdoYXQgU3VuIGRvZXMsIGFuZCBpcyBPSyBhcyBsb25nIGFzCgl0aGVyZSBhcmUgYXBwcm9wcmlhdGUgcnVuLXRpbWUgY2hlY2tzLgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiAgSWYgbWVyZ2luZyB0d28gaW50ZXJmYWNlIHR5cGVzLAoJanVzdCBzZXQgdGhlIHJlc3VsdCB0byBqYXZhLmxhbmcuT2JqZWN0LgoJKiBleHByLmMgKHBvcF90eXBlKTogIEFueSBpbnRlcmZhY2UgaXMgbWF0Y2hlcyBieSBqYXZhLmxhbmcuT2JqZWN0LgoKMTk5OC0xMS0xMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKG1haW4pOiBIYW5kbGUgLS1vdXRwdXQtY2xhc3MtZGlyZWN0b3J5IGFyZ3VtZW50LgoJKiBqdnNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBUcmFuc2xhdGUgYC1kJyBpbnRvCgktZm91dHB1dC1jbGFzcy1kaXIuCgkqIGpjZi5oIChqY2Zfd3JpdGVfYmFzZV9kaXJlY3RvcnkpOiBEZWNsYXJlLgoJKiBsYW5nLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IFJlY29nbml6ZSAtZm91dHB1dC1jbGFzcy1kaXIuCgkqIGxhbmctb3B0aW9ucy5oOiBNZW50aW9uIC1mb3V0cHV0LWNsYXNzLWRpci4KCSogamNmLXdyaXRlLmMgKGpjZl93cml0ZV9iYXNlX2RpcmVjdG9yeSk6IE5ldyBnbG9iYWwuCgkobWFrZV9jbGFzc19maWxlX25hbWUpOiBQdXQgZ2VuZXJhdGVkIC5jbGFzcyBmaWxlIGludG8gYC1kJwoJZGlyZWN0b3J5LCBvciBpbnRvIHNvdXJjZSBkaXJlY3RvcnkgaWYgLWQgbm90IGdpdmVuLiAgRnVuY3Rpb24gbm93CglzdGF0aWMuCgkod3JpdGVfY2xhc3NmaWxlKTogRnJlZSBjbGFzcyBmaWxlIG5hbWUuICBIYW5kbGUgY2FzZSB3aGVyZSBjbGFzcwoJZmlsZSBuYW1lIGlzIE5VTEwuCgkoRElSX1NFUEFSQVRPUik6IE5ldyBtYWNyby4KCUluY2x1ZGUgPHN5cy9zdGF0Lmg+CgoJKiBNYWtlZmlsZS5pbiAocHJlZml4KTogTmV3IG1hY3JvLgoKVGh1IE5vdiAxMiAxNDoxNTowNyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHBhdGNoX2ludm9rZSk6ICBEbyBsZXNzIGlmIGZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogZXhwci5jIChidWlsZF9rbm93bl9tZXRob2RfcmVmKTogIERvbid0IGNoZWNrIGZsYWdfZW1pdF9jbGFzc19maWxlcwoJaGVyZSAoZG9uZSBpbiBwYXRjaF9pbnZva2UgaW5zdGVhZCkuCgkoY2FzZV9pZGVudGl0eSk6ICBNb3ZlZCBoZXJlIGZyb20gcGFyc2UueS4KCgkqIGphdmEtdHJlZS5oIChDQU5fQ09NUExFVEVfTk9STUFMTFkpOiAgTmV3IG1hY3JvLgoJKiBwYXJzZS55IChqYXZhX2NvbXBsZXRlX3RyZWUgZXRjKTogIE1heWJlIHNldCBDQU5fQ09NUExFVEVfTk9STUFMTFkuCgkqIHBhcnNlLnkgKGphdmFfY29tcGxldGVfdHJlZSk6ICBSZS1vcmRlciBDT01QT1VORF9FWFBSIGluIEJMT0NLCglzbyB0aGV5IGNhbiBiZSBlZmZpY2llbnRseSBzY2FubmVkIHdpdGhvdXQgcmVjdXJzaW9uLgoJRXJyb3IgaXQgISBDQU5fQ09NUExFVEVfTk9STUFMTFkgZmlyc3QgcGFydCBvZiBDT01QT1VORF9FWFBSLgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6ICBFeHBhbmQgc3RhdGVtZW50cyBvZiBDT01QT1VORF9FWFBSCglpbiBCTE9DSyBpdGVyYXRpdmVseSwgcmF0aGVyIHRoYW4gcmVjdXJzaXZlbHkuCgoJKiBwYXJzZS55IChkb191bmFyeV9udW1lcmljX3Byb21vdGlvbik6ICBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfdW5hcnlvcCwgcGF0Y2hfYmlub3AsIHBhdGNoX2FycmF5X3JlZik6ICBVc2UgaXQuCgoJKiBwYXJzZS55IChwYXRjaF9uZXdhcnJheSk6ICBWYXJpb3VzIGZpeGVzLgoKCVJlLWRvIGhhbmRsaW5nIG9mIHN3aXRjaCBzdGF0ZW1lbnRzIChmb3IgcHJvcGVyIGJsb2NrIHNjb3BpbmcpLgoJKiBwYXJzZS55OiAgQWRkIGp1c3QgYSBzaW5nbGUgYmxvY2sgZm9yIHRoZSBlbnR1cmUgc3dpdGNoIGJsb2NrLAoJYnV0IGRvbid0IGNyZWF0ZSBhbnkgImNhc2UgYmxvY2tzIi4KCShncm91cF9vZl9sYWJlbHMpOiAgUm1lb3ZlZCB1bm5lZWRlZCBub24tdGVybWluYWwuCglDQVNFX0VYUFIgYW5kIERFRkFVTFRfRVhQUiBhcmUgYWRkZWQgdG8gY3VycmVudCBibG9jay4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiAgSW5saW5lIFNXSVRDSF9FWFBSIGhlcmUuCglOb3cgYWxzbyBuZWVkIHRvIGhhbmRsZSBDQVNFX0VYUFIgYW5kIERFRkFVTFRfRVhQUi4KCSogamF2YS10cmVlLmggKFNXSVRDSF9IQVNfREVGQVVMVCk6ICBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKHdmbF9vcGVyYXRvciwgcHJpbnRfaW50X25vZGUpOiBNYWtlIG5vbi1zdGF0aWMuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogIENBU0VfRVhQUiBhbmQgREVGQVVMVF9FWFBSIGFyZSBub3cgcHJvY2Vzc2VkCglhcyBwYXJ0IG9mIHJlY3Vyc2l2ZSBzY2FuIG9mIGJsb2NrLgoJKGphdmFfZXhwYW5kX3N3aXRjaCApOiAgUmVtb3ZlZCAtIGlubGluZWQgaW50byBqYXZhX2xhbmdfZXhwYW5kX2V4cHIuCgkocGF0Y2hfc3dpdGNoX3N0YXRlbWVudCk6ICBNb3N0IHRlc3RzIG1vdmUgZGludG8gamF2YV9jb21wbGV0ZV90cmVlLgoKCSogcGFyc2UueTogIE1ha2UgdmFyaW91cyBwcm9kdWN0aW9uIGJlIG5vbi10eXBlZCAodm9pZCkuCgkqIHBhcnNlLnkgKHBhcnNlX2Vycm9yKTogIE1lcmdlZCBpbnRvIGlzc3VlX3dhcm5pbmdfZXJyb3JfZnJvbV9jb250ZXh0LgoJKiBwYXJzZS55IChhZGRfc3RtdF90b19jb21wb3VuZCk6ICBEb24ndCBjcmVhdGUvY2hhbmdlIGV4dHJhIG5vZGUuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6ICBSZW5hbWVkIHRvIHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uLgoKCSogamNmLXdyaXRlLmMgKHN0cnVjdCBqY2ZfaGFuZGxlcik6ICBOZXcgdHlwZS4KCShzdHJ1Y3QgamNmX3N3aXRjaF9zdGF0ZSk6ICBOZXcgdHlwZS4KCShTV0lUQ0hfQUxJR05fUkVMT0MsIEJMT0NLX1NUQVJUX1JFTE9DKTogIE5ldyByZWxvY2F0aW9uIGtpbmRzLgoJKGFsbG9jX2hhbmRsZXIsIGVtaXRfdW5vcCwgZW1pdF9yZWxvYyk6ICBOZXcgZnVuY3Rpb25zLgoJKGFkanVzdF90eXBlZF9vcCk6ICBBZGQgZXh0cmEgcGFyYW1ldGVyICgibWF4IHR5cGUiIG9mZnNldCkuCgkoZW1pdF9zd2l0Y2hfcmVsb2MsIGVtaXRfY2FzZS1yZWxvYyk6ICBOZXcgZnVuY3Rpb24uCgkoZ2VuZXJhdGVfYnl0ZWNvZGVfY29uZGl0aW9uYWwpOiAgSGFuZGxlIFJFQUxfVFlQRSBjb21wYXJpc29ucy4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBTdXBwb3J0IFJFQUxfQ1NULCBzd2l0Y2ggc3RhdGVtZW50cywKCWV4Y2VwdGlvbiBoYW5kbGluZywgbWV0aG9kIGNhbGxzLCBvYmplY3QvYXJyYXkgY3JlYXRpb24sIGFuZCBtb3JlLgoKCSogY2xhc3MuYzogIFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMuCgkqIGNvbnN0YW50cy5jIChmaW5kX3N0cmluZ19jb25zdGFudCk6ICBOZXcgZnVuY3Rpb24uCgkoY291bnRfY29uc3RhbnRfcG9vbF9ieXRlcyk6ICBGaXggdG8gY29ycmVjdGx5IGhhbmRsZSB3aWRlIGNvbnN0YW50cy4KCSogZGVjbC5jIChjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6ICBEb24ndCBfSnZfSW5pdENsYXNzCglpZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMuCgoxOTk4LTExLTEyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IEFkZGVkIGV4cGxhbmF0b3J5IGNvbW1lbnQuCgoJKiBqY2YtcGF0aC5jIChhZGRfZW50cnkpOiBMb29rIGZvciBgLnppcCcgYXQgZW5kIG9mIGZpbGVuYW1lLiAgQWRkCgl0cmFpbGluZyBzbGFzaCB0byBgLnppcCcgZW50cmllcy4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IENvcnJlY3RseSBoYW5kbGUgY2FzZSB3aGVyZQoJR0NfTkFNRSBub3QgZGVmaW5lZC4KCjE5OTgtMTEtMTEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChHQ19OQU1FKTogTmV3IGRlZmluZS4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IFVzZSBHQ19OQU1FLiAgQWRkIEdDX05BTUUgdG8gY29tbWFuZCBsaW5lCglpZiByZXF1aXJlZC4KCSogTWFrZS1sYW5nLmluIChqdnNwZWMubyk6IERlZmluZSBXSVRIX0dDXzxuYW1lPi4KCldlZCBOb3YgMTEgMTk6MDg6NTIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtZHVtcC5jIChUQUJMRV9TV0lUQ0gpOiAgRml4IHR5cG9zLgoKMTk5OC0xMS0xMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLWR1bXAuYyAobWFpbik6IENvcnJlY3RseSByZWNvZ25pemUgYC0tJy1zdHlsZSBsb25nIG9wdGlvbnMuCgpUdWUgTm92IDEwIDEyOjM0OjAzIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaXNfY29tcGlsZWRfY2xhc3MpOiBDYWxsIHNhZmVfbGF5b3V0X2NsYXNzIGZvciBjbGFzcwogCWNvbXBpbGVkIGZyb20gc291cmNlLgoJKiBjb252ZXIuaCAoY29udmVydF90b19pbnRlZ2VyLCBjb252ZXJ0X3RvX3JlYWwsCiAJY29udmVydF90b19wb2ludGVyKTogQWRkZWQgcHJvdG90eXBlcy4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE5vbiBsb25nZXIgcHVzaCB0aGUgZGVjbHMgb2YKIAlgbWV0aG9kdGFibGUnLCBgY29uc3RhbnRzJywgYENsYXNzJywgYEZpZWxkJywgYGRpc3BhdGNoVGFibGUnCiAJYGpleGNlcHRpb24nIGFuZCBgTWV0aG9kJy4KCSogZXhwci5jIChidWlsZF9pbnZva2VpbnRlcmZhY2UpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2ludm9rZSk6IHN0YXRpYyB2YXJpYWJsZSBDTEFTU19JREVOVCBub3cgaW4KIAlidWlsZF9pbnZva2VpbnRlcmZhY2UuIFVzZSBidWlsZF9pbnZva2VpbnRlcmZhY2UuCgkoZXhwYW5kX2phdmFfZmllbGRfb3ApOiBNb3ZlZCBjb2RlIHRvIGlubGluZQogCWphdmEubGFuZy5QUklNVFlQRS5UWVBFIGludG8gYSBmdW5jdGlvbi4KCShidWlsZF9wcmltdHlwZV90eXBlX3JlZik6IE5ldyBmdW5jdGlvbi4KCSogamF2YS10cmVlLmRlZiAoSU5TVEFOQ0VPRl9FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogamF2YS10cmVlLmggKENMQVNTX01FVEhPRF9DSEVDS0VEX1AsIE1FVEhPRF9ERVBSRUNBVEVELAogCUZJRUxEX0RFUFJFQ0FURUQsIENMQVNTX0RFUFJFQ0FURUQpOiBOZXcgZmxhZyBtYWNyb3MuCgkoREVDTF9DT05TVFJVQ1RPUl9QKTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKERFQ0xfTE9DQUxfU1RBVElDX1ZBTFVFKTogTmV3IG1hY3JvLgoJKGJ1aWxkX2ludm9rZWludGVyZmFjZSwgYnVpbGRfcHJpbXR5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24KIAlwcm90b3R5cGVzLgoJKGphdmFfcGFyc2VfYWJvcnRfb25fZXJyb3IpOiBNYWNybyByZXdyaXR0ZW4uCgkqIGpjZi1wYXJzZS5jIChjdXJyZW50X21ldGhvZCk6IEFkZCBjb21tZW50IHRvIGRlY2xhcmF0aW9uLgoJKHBhcnNlX3ppcF9maWxlX2VudHJpZXMsIHByb2Nlc3NfemlwX2Rpciwgdm9pZCBwYXJzZV9zb3VyY2VfZmlsZSk6CiAJRnVuY3Rpb24gcHJvdG90eXBlcyBmaXhlZC4KCShqY2ZfcGFyc2Vfc291cmNlKTogcHVzaC9wb3AgcGFyc2VyIGNvbnRleHQuIHNhdmUvcmVzdG9yZSBnbG9iYWwuCgkocGFyc2Vfc291cmNlX2ZpbGUpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIE5vdyB0YWtlIGEKIAlJREVOVElGSUVSX05PREUgYXMgYW4gYXJndW1lbnQuIERvZXNuJ3QgY2hlY2sgbWV0aG9kcywgbGF5b3V0CiAJY2xhc3NlcyBhbmQgcG9wIHRoZSBwYXJzZXIgY29udGV4dCBhbnltb3JlLgoJKHl5cGFyc2UpOiBQdXNoIHBhcnNlciBjb250ZXh0LCBzYXZlIGdsb2JhbHMsIHBhcnNlIHRoZSBzb3VyY2UKIAlmaWxlLCByZXN0b3JlIGdsb2JhbHMgYW5kIHBvcCB0aGUgcGFyc2VyIGNvbnRleHQgd2hlbiBwcm9jZXNzaW5nIGEKIAlzb3VyY2UgZmlsZS4KCSogamNmLmggKFZFUkJPU0VfU0tFTEVUT04pOiBSZXBsYWNlcyBTT1VSQ0VfRlJPTlRFTkRfREVCVUcgZGVmaW5lLgoJKiBsZXguYyAoamF2YV9wYXJzZV9kb2Nfc2VjdGlvbik6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xleCk6IENhbGwgamF2YV9wYXJzZV9kb2Nfc2VjdGlvbiB3aGVuIGFwcHJvcHJpYXRlLiBCdWlsZCBhbgogCW9wZXJhdG9yIGFyb3VuZCBJTlNUQU5DRU9GX1RLLgoJKiBsZXguaCAoamF2YV9saW5ldGVybWluYXRvciwgamF2YV9zcHJpbnRfdW5pY29kZSwKIAlqYXZhX3VuaWNvZGVfMl91dGY4LCBqYXZhX2xleF9lcnJvciwgamF2YV9zdG9yZV91bmljb2RlKToKIAlQcm90b3R5cGVzIHJld3JpdHRlbi4KCShqYXZhX3BhcnNlX2VzY2FwZV9zZXF1ZW5jZSwgamF2YV9sZXR0ZXJfb3JfZGlnaXRfcCwKIAlqYXZhX3BhcnNlX2RvY19zZWN0aW9uLCBqYXZhX3BhcnNlX2VuZF9jb21tZW50LCBqYXZhX2dldF91bmljb2RlLAogCWphdmFfcmVhZF91bmljb2RlLCBqYXZhX3N0b3JlX3VuaWNvZGUsIGphdmFfcmVhZF9jaGFyLAogCWphdmFfYWxsb2NhdGVfbmV3X2xpbmUsIGphdmFfdW5nZXRfdW5pY29kZSwgamF2YV9zbmVha191bmljb2RlKToKIAlBZGRlZCBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBwYXJzZS5oIChWRVJCT1NFX1NLRUxFVE9OKTogUmVwbGFjZXMgU09VUkNFX0ZST05URU5EX0RFQlVHCiAJZGVmaW5lLgoJKEpOVUxMUF9UWVBFX1AsIENIRUNLX01FVEhPRFMsIENIRUNLX0RFUFJFQ0FURUQsIFJFR0lTVEVSX0lNUE9SVCk6CiAJTmV3IG1hY3JvcwoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IE5ldyBmaWVsZHM6IGRlcHJlY2F0ZWQsCiAJY3VycmVudF9wYXJzZWRfY2xhc3NfdW4sIGdjbGFzc19saXN0LgoJKGZpeF9tZXRob2RfYXJndW1lbnRfbmFtZXMsIGlzc3VlX3dhcm5pbmdfZXJyb3JfZnJvbV9jb250ZXh0LAogCXJlc29sdmVfcGFja2FnZSwgbG9va3VwX3BhY2thZ2VfdHlwZSk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogRml4ZWQgZnVuY3Rpb24gcHJvdG90eXBlLgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEZpeGVkIGluZGVudGF0aW9uLCBhZGRlZAoJZXh0cmEgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQsIGJ1aWxkX251bGxfb2ZfdHlwZSwgY2hlY2tfZGVwcmVjYXRpb24sCiAJY2hlY2tfbWV0aG9kX3JlZGVmaW5pdGlvbiwgcmVzZXRfbWV0aG9kX25hbWUsCiAJamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMsIGphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kcywKIAltYXliZV9idWlsZF9wcmltdHR5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlLgoJKiBwYXJzZS55IChjb252ZXIuaCk6IEluY2x1ZGUuCgkoSU5TVEFOQ0VPRl9USyk6IFRhZ2dlZCA8b3BlcmF0b3I+LgoJKHNpbmdsZV90eXBlX2ltcG9ydF9kZWNsYXJhdGlvbik6IFVzZSBSRUdJU1RFUl9JTVBPUlQgbWFjcm8uCgkocmVsYXRpb25hbF9leHByZXNzaW9uOik6IEJ1aWxkIGJpbm9wIGZvciBpbnN0YW5jZW9mLgoJKGphdmFfcHVzaF9wYXJzZXJfY29udGV4dCk6IFJlbWVtYmVyIGN0eHAtPmdjbGFzc19saXN0IGFjcm9zcwogCWNvbnRleHRzLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogU2ltcGx5IHJldHVybiBpZiBubyBjb250ZXh0CiAJZXhpc3RzLiBSZW1lbWJlciBnY2xhc3NfbGlzdCBhY3Jvc3MgY29udGV4dHMuCgkoaXNzdWVfd2FybmluZ19lcnJvcl9mcm9tX2NvbnRleHQpOiBOZXcgZnVuY3Rpb24uCgkocGFyc2VfZXJyb3JfY29udGV4dCk6IERvbid0IHNldHVwIGN0eHAtPmVsYyBoZXJlLiBDYWxsCiAJaXNzdWVfd2FybmluZ19lcnJvcl9mcm9tX2NvbnRleHQgaW5zdGVhZC4KCShwYXJzZV93YXJuaW5nX2NvbnRleHQpOiBMaWtld2lzZS4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBSZW1vdmVkIERFQ0xfQVJUSUZJQ0lBTAogCXNldHVwLiBMaW5rIG5ldyBjbGFzcy9pbnRlcmZhY2UgdG8gY3R4cC0+Z2NsYXNzX2xpc3QuCgkoYWRkX3N1cGVyaW50ZXJmYWNlcyk6IFJlZ2lzdGVyIGludGVyZmFjZSBhcyBpbmNvbXBsZXRlIGlmIG5vdAogCWxvYWRlZC4KCShjcmVhdGVfY2xhc3MpOiBSZW1lbWJlciBjbGFzcyB1bnF1YWxpZmllZCBuYW1lIGluCiAJY3R4cC0+Y3VycmVudF9wYXJzZWRfY2xhc3NfdW4uIENoZWNrIGNsYXNzIGRlcHJlY2F0aW9uLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IENoZWNrIGZpZWxkIGRlcHJlY2F0aW9uLiBSZW1lbWJlciBzdGF0aWMgZmluYWwKIAlmaWVsZCB2YWx1ZSBpbiBERUNMX0xPQ0FMX1NUQVRJQ19WQUxVRS4gQ2hhbmdlZCBjb21tZW50IGluIHBhcnQKIAlwcm9jZXNzaW5nIElOSVQuCgkobWV0aG9kX2hlYWRlcik6IE5ldyBsb2NhbCB2YXJpYWJsZSBPUklHX0FSRy4gVXNlIHVucXVhbGlmaWVkCiAJY3VycmVudCBjbGFzcyBuYW1lIGZvciBjaGVjayBvbiBjb25zdHJ1Y3RvciBlcnJvcnMuIFByb21vdGUgcmV0dXJuCiAJdHlwZSBpZiBvZiByZWNvcmQgdHlwZS4gQXJndW1lbnQgbGlzdCBmaXggbW92ZWQgaW4KIAlmaXhfbWV0aG9kX2FyZ3VtZW50X25hbWVzLCBjYWxsZWQgaGVyZS4gQ2hlY2sgbWV0aG9kIGRlcHJlY2F0aW9uLgoJKGZpeF9tZXRob2RfYXJndW1lbnRfbmFtZXMpOiBOZXcgZnVuY3Rpb24uCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBQcm9tb3RlIHJlY29yZCB0eXBlZCBhcmd1bWVudHMuCgkoc2FmZV9sYXlvdXRfY2xhc3MpOiBDaGVjayBjbGFzcyBtZXRob2RzIGJlZm9yZSBsYXlvdXQuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IENvbXB1dGUgZmllbGQgbGF5b3V0IHdoZW4gcGF0Y2hlZC4KCShkb19yZXNvbHZlX2NsYXNzKTogVHJ5IHRvIGxvYWQgY2xhc3MgYWZ0ZXIgaGF2aW5nIGl0IHJlbmFtZWQKIAlhZnRlciB0aGUgcGFja2FnZSBuYW1lLgoJKGdldF9wcmludGFibGVfbWV0aG9kX25hbWUpOiBVc2UgREVDTF9DT05URVhULgoJKHJlc2V0X21ldGhvZF9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBVc2UgcmVzZXRfbWV0aG9kX25hbWUuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBOZXcgbG9jYWwgdmFyaWFibGUKIAlTQVZFRF9GT1VORF9XRkwuIFRlbXBvcmFyaWx5IHJlaW5zdGFsbCBvdmVycmlkaW5nL2hpZGluZyBtZXRob2QKIAluYW1lcyBmb3IgZXJyb3IgcmVwb3J0LiBDaGVjayBmb3IgY29tcGlsZS10aW1lIGVycm9yIHdoZW4gbWV0aG9kCiAJZm91bmQgaGFzIGRlZmF1bHQgKHBhY2thZ2UpIGFjY2Vzcy4KCShqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMpOiBOb3cgdGFrZXMgYW4gaW50ZXJmYWNlIERFQ0wgbm9kZSBhcwogCWFuIGFyZ3VtZW50LiBBbHNvIHJlaW5zdGFsbCByZWFsIG5hbWUgb24gdW5jaGVja2VkCiAJb3ZlcnJpZGluZy9oaWRpbmcgbWV0aG9kcyBmb3IgZXJyb3IgcmVwb3J0LgoJKGphdmFfY2hlY2tfbWV0aG9kcyk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gR2V0IGNsYXNzZXMgdG8gdmVyaWZ5CiAJZnJvbSBjdHhwLT5nY2xhc3NfbGlzdC4gVXNlIENIRUNLX01FVEhPRFMgbWFjcm8gYW5kIHNldAogCUNMQVNTX01FVEhPRF9DSEVDS0VEX1Agb24gY2xhc3MgdmVyaWZpY2F0aW9uLgoJKGxvb2t1cF9qYXZhX21ldGhvZDIpOiBHZXQgcmVhbCBtZXRob2QgbmFtZSBpZiBuZWNlc3NhcnkuCgkoZmluZF9pbl9pbXBvcnRzKTogRG9uJ3QgY2hlY2sgcGFja2FnZSBjbGFzcyBhY2Nlc3MgaGVyZS4KCShyZXNvbHZlX3BhY2thZ2UsIGxvb2t1cF9wYWNrYWdlX3R5cGUpOiBOZXcgZnVuY3Rpb25zLgoJKGphdmFfbGF5b3V0X2NsYXNzZXMpOiBGaXhlZCBsZWFkaW5nIGNvbW1lbnQuIFRha2UgY2xhc3NlcyB0byBiZQogCWxhaWQgb3V0IGZyb20gY3R4cC0+Z2NsYXNzX2xpc3QuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IERvbid0IGV4cGFuZCBuYXRpdmUgYW5kIGFic3RyYWN0CiAJbWV0aG9kcy4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogTmV3IGZ1bmN0aW9uLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogVXNlIGFkZGl0aW9uYWwgYXJndW1lbnQgT1JJRy4gIFJldHJpZXZlCiAJdmFsdWVzIG9mIHN0YXRpYyBmaW5hbCBmaWVsZCBvZiBwcmltaXRpdmUgdHlwZXMuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBIYW5kbGVzIHN0YXRpYyBmaW5hbCBmaWVsZCBvZiBwcm9tb3RpdmUKIAl0eXBlLgoJKHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IEhhbmRsZSBTVFJJTkdfQ1NUIGFzCiAJcHJpbWFyaWVzIGFuZCBwYWNrYWdlIG5hbWUgcmVzb2x1dGlvbi4gQ2hlY2sgZGVwcmVjYXRpb24gb24gZm91bmQKIAlkZWNscy4gU2V0IHdoZXJlX2ZvdW5kIGFuZCB0eXBlX2ZvdW5kIG9uIG5vbiBzdGF0aWMgZmllbGQgcmVzb2x2ZWQKIAlkdXJpbmcgcXVhbGlmaWNhdGlvbi4gTGF5b3V0IG5vbiBwcmltaXRpdmUgZmllbGQgZGVjbCB0eXBlcy4KCShjaGVja19kZXByZWNhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShtYXliZV9hY2Nlc3NfZmllbGQpOiBTaW1wbGlmaWVkLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiBMb2NhbCB2YXJpYWJsZSBDTEFTU19UWVBFCiAJcmVtb3ZlZC4gUmV2ZXJzZSBtZXRob2QncyBhcmd1bWVudCB3aGVuIHByaW1hcnkgaXMgYSB0eXBlLiBEb24ndAogCXVzZSBDTEFTU19UWVBFIHRvIHJlcG9ydCBwcm9ibGVtcywgdXNlIElERU5USUZJRVJfV0ZMCiAJaW5zdGVhZC4gSW5jbHVkZSBhYnN0cmFjdCBjbGFzcyBpbiB0aGUgbGlzdCBvZiBjbGFzcyBzZWFyY2hhYmxlCiAJZm9yIGNvbnN0cnVjdG9ycy4gVXNlIERFQ0xfQ09OVEVYVCBvZiBmb3VuZCBtZXRob2QgZm9yIGFjY2VzcwogCWNoZWNrcy4gQ2hlY2sgbWV0aG9kIGRlcHJlY2F0aW9uLgoJKHBhdGNoX2ludm9rZSk6IFBheSBleHRyYSBjYXJlIHRvIE5FV19DTEFTU19FWFBSIHR5cGUgY2FsbCB3aGVuCiAJY29udmVydGluZyBhcmd1bWVudHMuIEhhbmRsZSBJTlZPS0VfSU5URVJGQUNFLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogU2VhcmNoIGNvbnN0cnVjdG9yIHVzaW5nIGV4aXN0aW5nCiAJaW5mcmFzdHJ1Y3R1cmUgKGRvbid0IHJlbHkgb24gbG9va3VwX2phdmFfY29uc3RydWN0b3IgYW55bW9yZSkuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogRXh0cmEgYXJndW1lbnQgZmxhZwogCUxDLiBOb3cgaW5jbHVkZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2VhcmNoLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBDb25kaXRpb25hbCBleHByZXNzaW9uIGFyZSBwcmltYXJpZXMuCgkobm90X2luaXRpYWxpemVkX2FzX2l0X3Nob3VsZF9wKTogc3RhdGljIGZpbmFsIGFyZSBhbHdheXMKIAlpbml0aWFsaXplZC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBQYXNzIGV4dHJhIE5VTEwgYXJndW1lbnQgdG8KIAlyZXNvbHZlX2V4cHJlc3Npb25fbmFtZS4gU3RyaWN0ZXIgdGVzdCB0byBjYXJyeSBvbiBwYXRjaGluZwogCWFzc2lnbm1lbnRzLiBOZXcgY2FzZSBmb3IgSU5TVEFOQ0VPRl9FWFBSLgoJKGNvbXBsZXRlX2Z1bmN0aW9uX2FyZ3VtZW50cyk6IElubGluZSBQUklNVFlQRS5UWVBFIHJlYWQgYWNjZXNzLgoJKGNoZWNrX2ZpbmFsX2Fzc2lnbm1lbnQsIG1heWJlX2J1aWxkX3ByaW10dHlwZV90eXBlX3JlZik6IE5ldwogCWZ1bmN0aW9ucy4KCShwYXRjaF9hc3NpZ25tZW50KTogRGV0ZWN0IHJlc29sdmVkIHN0YXRpYyBmaW5hbHMgYW5kIGNhcnJ5IG5vcm1hbAogCWFzc2lnbm1lbnQgZXJyb3IgY2hlY2sgb24gdGhlbS4gSW5saW5lIFBSSU1UWVBFLlRZUEUgcmVhZCBhY2Nlc3MuCgkodHJ5X2J1aWx0aW5fYXNzaWduY29udik6IEFjY2VzcyBjb25zdGFudCAwIG9uIGFsbCBwcmltaXRpdmUKIAl0eXBlcy4KCSh2YWxpZF9idWlsdGluX2Fzc2lnbmNvbnZfaWRlbnRpdHlfd2lkZW5pbmdfcCk6IEFjY2VwdCBpZGVudGljYWwKIAl0eXBlcy4gQWNjZXB0IGFsbCBwcm9tb3RlZCB0eXBlIG9uIGludCB0eXBlLgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IEFjY2VwdCBhIG51bGwgcG9pbnRlciB0byBiZQogCWFzc2lnbmVkIHRvIGEgcmVmZXJlbmNlLgoJKHZhbGlkX21ldGhvZF9pbnZvY2F0aW9uX2NvbnZlcnNpb25fcCk6IEFjY2VwdCB0byBjaGVjayBudWxsCiAJcG9pbnRlcnMuCgkoYnVpbGRfYmlub3ApOiBNZXJnZSBkZWNsYXJhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgbG9jYWwKIAl2YXJpYWJsZSBCSU5PUC4KCShwYXRjaF9iaW5vcCk6IE5ldyBjYXNlIGZvciBJTlNUQU5DRU9GX0VYUFIuIE5FX0VYUFIgdG8gYWNjZXB0IGFsbAogCW51bWVyaWMgdHlwZXMuIEltcHJvdmVkIHZhbGlkaXR5IHRlc3QgZm9yIHF1YWxpZnkgb3BlcmF0b3JzIG9uCiAJcmVmZXJlbmNlcy4KCShwYXRjaF91bmFyeW9wKTogQnJvYWRlbmVkIHJlamVjdGlvbiB0ZXN0IGZvciBQUkVERUNSRU1FTlRfRVhQUgogCWFuZCBQUkVJTkNSRU1FTlRfRVhQUi4gQWxzbyBkZXRlY3QgcmVzb2x2ZWQgc3RhdGljIGZpbmFscyBvZiBhCiAJcHJpbWl0aXZlIHR5cGUgYW5kIGlzc3VlIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLgoJKHJlc29sdmVfdHlwZV9kdXJpbmdfcGF0Y2gpOiBNYXJrIGNsYXNzIGxvYWRlZCB3aGVuIHJlc29sdmVkLgoJKHBhdGNoX2Nhc3QpOiBBbGxvdyBudWxsIHRvIGJlIGNhc2VkIHRvIHJlZmVyZW5jZSB0eXBlcy4KCShidWlsZF9udWxsX29mX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfYXJyYXlfcmVmKTogSGFuZGxlIGFycmF5IG9uIHJlZmVyZW5jZXMgY29ycmVjdGx5LgoJKHBhdGNoX3JldHVybik6IFJlbW92ZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlIE1PRElGWS4gRm9yY2UKIAlib29sZWFuIHRvIGJlIHJldHVybmVkIGFzIGludGVnZXJzLiBBbGxvd3MgbnVsbCB0byBiZSByZXR1cm5lZCBieQogCWEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcmVmZXJlbmNlLgoJKiB0eXBlY2suYyAoY29udmVydF90b19pbnRlZ2VyLCBjb252ZXJ0X3RvX3JlYWwsCiAJY29udmVydF90b19wb2ludGVyKTogUHJvdG90eXBlcyBtb3ZlZCB0byBjb252ZXJ0LmgKCShsb29rdXBfYXJndW1lbnRfbWV0aG9kKTogVXNlIG1ldGhvZCByZWFsIG5hbWUsIGlmIG5lY2Vzc2FyeS4KCjE5OTgtMTAtMzAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX2NsYXNzX3JlZik6IENoYW5nZWQgbmFtZSBvZiBwcmltaXRpdmUgY2xhc3NlcyB0bwoJc3RhcnQgd2l0aCBgX0p2XycuCgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiBSZW5hbWVkIGZpZWxkczogbm1ldGhvZHMgdG8KCW1ldGhvZF9jb3VudCwgbWV0aG9kX2NvdW50IHRvIGR0YWJsZV9tZXRob2RfY291bnQuICBBbHdheXMgc2V0Cglgc3RhdGUnIGZpZWxkIHRvIDAuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCldlZCBPY3QgMjggMDg6MDM6MzEgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiBEb24ndCBtYW5nbGUgPGZpbml0PiwgcHJvZHVjZQogCV9fZmluaXQ8Y2xhc3M+IGluc3RlYWQuIERvbid0IHZlcmlmeSBhcnRpZmljaWFsIG1ldGhvZHMuCgkqIGRlY2wuYyAoZmluaXRfaWRlbnRpZmllcl9ub2RlKTogTmV3IGRlY2xhcmVkIGdsb2JhbC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IGZpbml0X2lkZW50aWZpZXJfbm9kZSBpbml0aWFsaXplZC4KCSogamF2YS10cmVlLmRlZiAoQ09ORElUSU9OQUxfRVhQUik6IE5ldyBKYXZhIHRyZWUgY29kZS4KCSogamF2YS10cmVlLmggKGZpbml0X2lkZW50aWZpZXJfbm9kZSk6IERlY2xhcmVkIGFzIGV4dGVybi4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogTmV3IGZpZWxkIGNhbGxlZF9jb25zdHJ1Y3Rvci4KCShERUNMX0NPTlNUUlVDVE9SX0NBTExTKTogQWNjZXNzIG1hY3JvIHRvIGNhbGxlZF9jb25zdHJ1Y3Rvci4KCShDTEFTU19IQVNfRklOSVRfUCk6IE5ldyBtYWNyby4KCShDQUxMX0NPTlNUUlVDVE9SX1ApOiBMZWFkaW5nIGNvbW1lbnQgY2hhbmdlZC4gTWFjcm8gbm93IGNoZWNrcwogCWV4cGxpY2l0IGNvbnN0cnVjdG9yIGludm9jYXRpb24uCgkoQ0FMTF9FWFBMSUNJVF9DT05TVFJVQ1RPUl9QLCBDQUxMX1RISVNfQ09OU1RSVUNUT1JfUCwKIAlDQUxMX1NVUEVSX0NPTlNUUlVDVE9SX1ApOiBOZXcgbWFjcm9zLgoJKHdyaXRlX2NsYXNzZmlsZSk6IEFkZGVkIHByb3RvdHlwZS4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBQYXJzZSBhbmQgcmVtZW1iZXIgZm9yCiAJZ2VuZXJhdGlvbiBpZiB0aGUgZmlsZSB3YXMgc2VlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogRG9uJ3Qgd3JpdGUgdGhlIGNsYXNzIGZpbGUgaGVyZS4KCSh5eXBhcnNlKTogTG9vcCBvbiBmaWxlcyByZXdyaXR0ZW4uIFNldCBjdXJyZW50X2pjZi4KCShwYXJzZV96aXBfZmlsZV9lbnRyaWVzKTogUGFyc2UgY2xhc3MgZmlsZSBvbmx5IGlmIGl0IHdhcyBmb3VuZC4KCSogbGFuZy5jIChpbml0X3BhcnNlKTogRG9uJ3Qgb3BlbiBjb21tYW5kIGxpbmUgcHJvdmlkZWQgZmlsZW5hbWUKIAloZXJlLgoJKGxhbmdfcGFyc2UpOiBEb24ndCBzZXQgbWFpbl9qY2YgYW55bW9yZS4KCSogcGFyc2UuaCAoQUJTVFJBQ19DSEVDSyk6IENhcGl0YWxpemVkIGFyZ3VtZW50cy4KCShKQ09OU1RSVUNUT1JfQ0hFQ0spOiBOZXcgbWFjcm8uCgkoSkJTQ19UWVBFX1ApOiBOZXcgbWFjcm8uCgkoSU5fVFJZX0JMT0NLX1AsIEVYQ0VQVElPTlNfUCk6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCShDT01QTEVURV9DSEVDS19PUF8yKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBwYXJzZV9jdHh0KTogTmV3IGZpZWxkIGV4cGxpY2l0X2NvbnN0cnVjdG9yX3AuCgkoY2hlY2tfY2xhc3NfaW50ZXJmYWNlX2NyZWF0aW9uKTogRml4ZWQgcHJvdG90eXBlIGluZGVudGF0aW9uLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiBQcm90b3R5cGUgcmVmbGVjdHMgYWRkZWQgYXJndW1lbnQuCgkocGF0Y2hfaW52b2tlKTogTGlrZXdpc2UuCgkoY29tcGxldGVfbWV0aG9kX2RlY2xhcmF0aW9uLCBidWlsZF9zdXBlcl9pbnZvY2F0aW9uLAogCXZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSwKIAlidWlsZF90aGlzX3N1cGVyX3F1YWxpZmllZF9pbnZvY2F0aW9uLCBnZXRfcHJpbnRhYmxlX21ldGhvZF9uYW1lLAogCXBhdGNoX2NvbmRpdGlvbmFsX2V4cHIsIG1heWJlX2dlbmVyYXRlX2Zpbml0LCBmaXhfY29uc3RydWN0b3JzLAogCXZlcmlmeV9jb25zdHJ1Y3Rvcl9zdXBlciwgY3JlYXRlX2FydGlmaWNpYWxfbWV0aG9kLAogCXN0YXJ0X2FydGlmaWNpYWxfbWV0aG9kX2JvZHksIGVuZF9hcnRpZmljaWFsX21ldGhvZF9ib2R5LAogCWdlbmVyYXRlX2ZpZWxkX2luaXRpYWxpemF0aW9uX2NvZGUpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCSogcGFyc2UueTogRml4ZWQgbGVhZGluZyBjb21tZW50CgkoY29uc3RydWN0b3JfaGVhZGVyOiwgY29uc3RydWN0b3JfYm9keTosIGJsb2NrX2VuZDopOiBSdWxlcyB0YWdnZWQKIAk8bm9kZT4uCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDYWxsIG1heWJlX2dlbmVyYXRlX2Zpbml0LgoJKG1ldGhvZF9kZWNsYXJhdGlvbjopOiBBY3Rpb24gZm9yIG1ldGhvZF9ib2R5OiBwbGFjZWQgaW4gbmV3CiAJZnVuY3Rpb24gY29tcGxldGVfbWV0aG9kX2RlY2xhcmF0aW9uLCBjYWxsZWQgaGVyZS4KCShjb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbjopOiBEZWZpbmVkIGFjdGlvbnMuIFJlbW92ZWQgbGVhZGluZwogCUZJWE1FLgoJKGNvbnN0cnVjdG9yX2hlYWRlcjopOiBOZXcgcnVsZSB3aXRoIGFjdGlvbi4KCShjb25zdHJ1Y3Rvcl9ib2R5Oik6IFJ1bGUgcmV3cml0dGVuIHVzaW5nIGJsb2NrX2JlZ2luOiBhbmQKIAlibG9ja19lbmQ6LiBEZWZpbmVkIGFjdGlvbnMuCgkoY29uc3RydWN0b3JfZGVjbGFyYXRvcjosIGV4cGxpY2l0X2NvbnN0cnVjdG9yX2ludm9jYXRpb246KToKIAlEZWZpbmVkIGFjdGlvbnMuCgkoYmxvY2s6KTogVXNlIG5ldyBydWxlcyBibG9ja19iZWdpbjogYmxvY2tfZW5kOi4KCShibG9ja19iZWdpbjosIGJsb2NrX2VuZDopOiBOZXcgcnVsZXMgYW5kIGFjdGlvbnMuCgkoYmxvY2tfc3RhdGVtZW50czopOiBGaXhlZCBlcnJvciBtZXNzYWdlIGZvciBleHBsaWNpdAogCWNvbnN0cnVjdG9ycy4KCShtZXRob2RfaW52b2NhdGlvbjopOiBDYWxsIGJ1aWxkX3RoaXNfc3VwZXJfcXVhbGlmaWVkX2ludm9jYXRpb24KIAlpZiBwcmltYXJ5IGlzIGB0aGlzJyBvciBgc3VwZXInIHdhcyBzZWVuLgoJKGNvbmRpdGlvbmFsX2V4cHJlc3Npb246KTogQWN0aW9uIGRlZmluZWQuCgkoZXh0cmFfY3R4cF9wdXNoZWRfcCk6IE5ldyBzdGF0aWMgZ2xvYmFsIGZsYWcuCgkoamF2YV9wYXJzZXJfY29udGV4dF9zYXZlX2dsb2JhbCk6IENyZWF0ZSBwYXJzZXIgY29udGV4dCBpZgogCW5lY2Vzc2FyeS4gVXNlIGV4dHJhX2N0eHBfcHVzaGVkX3AgdG8gcmVtZW1iZXIgaXQuCgkoamF2YV9wYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCk6IFBvcCBleHRyYSBwYXJzZXIgY29udGV4dCBpZgogCW9uZSBleGlzdHMuCgkoYnVpbGRfYXJyYXlfZnJvbV9uYW1lKTogQXJyYXkgb24gcHJpbWl0aXZlIHR5cGVzIGFyZSBtYXJrZWQKIAlsb2FkZWQuCgkocmVnaXN0ZXJfZmllbGRzKTogUmVzdG9yZSBuZXcgbmFtZSBpbiBmaWVsZCBpbml0aWFsaXplcgogCWV4cHJlc3Npb24gaWYgdHlwZSB3YXMgYWx0ZXJlZC4gTm9uIHN0YXRpYyBmaWVsZHMgaW5pdGlhbGl6ZWQgdXBvbgogCWRlY2xhcmF0aW9uIG1hcmtlZCBpbml0aWFsaXplZC4KCShtYXliZV9nZW5lcmF0ZV9maW5pdCk6IE5ldyBmdW5jdGlvbi4KCShtYXliZV9nZW5lcmF0ZV9jbGluaXQpOiBVc2UgY3JlYXRlX2FydGlmaWNpYWxfbWV0aG9kLAogCXN0YXJ0X2FydGlmaWNpYWxfbWV0aG9kX2JvZHksIGVuZF9hcnRpZmljaWFsX21ldGhvZF9ib2R5LiBHZW5lcmF0ZQogCWRlYnVnIGluZm8gZm9yIGVuY2xvc2VkIGluaXRpYWxpemF0aW9uIHN0YXRlbWVudHMuCgkobWV0aG9kX2hlYWRlcik6IEZpeGVkIGxlYWRpbmcgY29tbWVudC4gQ2hlY2sgY29uc3RydWN0b3IKIAlmbGFncy4gRGV0ZWN0IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9ucyBhbmQgc2V0IERFQ0xfQ09OU1RSVUNUT1JfUAogCWFjY29yZGluZ2x5LgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsYXJhdGlvbiwgY29uc3RydWN0b3JfY2lyY3VsYXJpdHlfbXNnLAogCXZlcmlmeV9jb25zdHJ1Y3Rvcl9jaXJjdWxhcml0eSk6IE5ldyBmdW5jdGlvbnMuCgkoZ2V0X3ByaW50YWJsZV9tZXRob2RfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogRG9uJ3QgcmVuYW1lIDxmaW5pdD4gbWV0aG9kcy4gRml4CiAJZGVjbGFyZWQgY29uc3RydWN0b3IgbmFtZXMuIEVycm9yIG1lc3NhZ2UgZm9yCiAJY29uc3RydWN0b3JzIG1vZGlmaWVkLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogTG9jYWwgdmFyaWFibGUgc2Vlbl9jb25zdHJ1Y3RvcgogCXJlbmFtZWQgc2F3X2NvbnN0cnVjdG9yLiBTa2lwIHZlcmlmaWNhdGlvbiBvbiBjb25zdHJ1Y3RvcnMuIENyZWF0ZQogCWRlZmF1bHQgY29uc3RydWN0b3Igd2l0aCBjcmVhdGVfYXJ0aWZpY2lhbF9tZXRob2QuCgkoamF2YV9jaGVja19tZXRob2RzKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBlbXB0eSBsaW5lLgoJKGNyZWF0ZV9hcnRpZmljaWFsX21ldGhvZCwgc3RhcnRfYXJ0aWZpY2lhbF9tZXRob2RfYm9keSwKIAllbmRfYXJ0aWZpY2lhbF9tZXRob2RfYm9keSk6IE5ldyBmdW5jdGlvbnMuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IENoYW5nZWQgbGVhZGluZyBjb21tZW50LiBSZXZlcnNlIGZpZWxkcwogCWxpc3QgaWYgbmVjZXNzYXJ5LiBBbHdheXMgbGF5b3V0IGphdmEubGFuZy5PYmplY3QgaWYgYmVpbmcKIAlkZWZpbmVkLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBWZXJpZnkgY29uc3RydWN0b3IgY2lyY3VsYXJpdHkuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogQ2FsbCBmaXhfY29uc3RydWN0b3Igb24KIAljb25zdHJ1Y3RvcnMuICBMb2NhbCB2YXJpYWJsZSBub19hY19mb3VuZCByZW1vdmVkLiBSZXN0b3JlCiAJYmluZGluZ3MgaWYgbWV0aG9kIGJvZHkgZXhwYW5zaW9uIGZhaWxlZC4KCShmaXhfY29uc3RydWN0b3JzLCB2ZXJpZnlfY29uc3RydWN0b3Jfc3VwZXIsCiAJZ2VuZXJhdGVfZmllbGRfaW5pdGlhbGl6YXRpb25fY29kZSk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogRml4ZWQgbGVhZGluZyBjb21tZW50LiBXcml0ZSBjbGFzcyBmaWxlCiAJaGVyZS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IENoZWNrIGZvciBpbGxlZ2FsIGluc3RhbmNlIHZhcmlhYmxlCiAJdXNhZ2Ugd2l0aGluIHRoZSBhcmd1bWVudCBzY29wZSBvZiBhbiBleHBsaWNpdCBjb25zdHJ1Y3RvcgogCWludm9jYXRpb24uCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogUGFzcyBleHRyYSBmcm9tX3N1cGVyIGZsYWcKIAl3aGVuIGludm9raW5nIHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQuIE5ldyBjYXNlIGZvcgogCWNvbmRpdGlvbmFsIGV4cHJlc3Npb24gd2hlbiB1c2VkIGFzIGEgcHJpbWFyeS4gQ2hlY2sgZm9yIGVycm9yCiAJd2hlbiBhY3F1aXJpbmcgc3VwZXIuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IEFkZGVkIGV4dHJhIGFyZ3VtZW50IHN1cGVyLiBOZXcKIAlsb2NhbCB2YXJpYWJsZSBpc19zdGF0aWNfZmxhZy4gU2V0IGNsYXNzX3RvX3NlYXJjaCBhY2NvcmRpbmcgdG8KIAl0aGUgbmF0dXJlIG9mIHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiBEb24ndCBhZGQgYHRoaXMnCiAJYXJndW1lbnQgd2hlbiBleHBhbmRpbmcgTkVXX0NMQVNTX0VYUFIuIENoZWNrIGZvciBpbGxlZ2FsIG1ldGhvZAogCWludm9jYXRpb24gd2l0aGluIHRoZSBhcmd1bWVudCBzY29wZSBvZiBleHBsaWNpdCBjb25zdHJ1Y3RvcgogCWludm9jYXRpb24uIFNldCBpc19zdGF0aWMgYWNjb3JkaW5nIHRvIGlzX3N0YXRpY19mbGFnLiBQcm92aWRlCiAJZXh0cmEgYHN1cGVyJyBhcmd1bWVudCB0byBwYXRjaF9pbnZva2UgaW52b2NhdGlvbi4KCShwYXRjaF9pbnZva2UpOiBOZXcgYXJndW1lbnQgZnJvbV9zdXBlci4gTG9vcCBvbiBhcmd1bWVudHMKIAlpbmRlbnRhdGlvbiBmaXhlZC4gUGFzcyBmcm9tX3N1cGVyIHRvIGludm9jYXRpb25fbW9kZS4gTmV3IHN3aXRjaAogCWNhc2UgSU5WT0tFX1NVUEVSLiBGaXhlZCBlcnJvciBtZXNzYWdlIGluIHN3aXRjaCBkZWZhdWx0IGNhc2UuCiAgCURvbid0IHVzZSBDQUxMX0NPTlNUUlVDVE9SX1AgYnV0IHJhdGhlciBhIHRlc3Qgb24gdGhlIHRyZWUgbm9kZQogCXZhbHVlLgoJKGludm9jYXRpb25fbW9kZSk6IFJldHVybiBJTlZPS0VfU1VQRVIgbW9kZSB3aGVuIGFwcHJvcHJpYXRlLgoJKGxvb2t1cF9tZXRob2RfaW52b2tlKTogRml4ZWQgcHJvdG90eXBlcyBpbiBjYW5kaWRhdGVzIGxpc3QuIEVycm9yCiAJbWVzc2FnZSB0YWtlcyBjb25zdHJ1Y3RvcnMgaW50byBhY2NvdW50LgoJKGZpbmRfYXBwbGljYWJsZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IEZpeGVkIGluZGVudGF0aW9uLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBUYWtlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGludm9jYXRpb24KIAlpbnRvIGFjY291bnQuIERlYWwgd2l0aCBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gYXMgYSBwcmltYXJ5IHRvCiAJYSBtZXRob2QgY2FsbC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBBZGRlZCBsb2NhbCB3Zmxfb3AzLiBOZXcgQ09ORElUSU9OQUxfRVhQUgogCWNhc2UuIEFkZGVkIGV4dHJhIGFyZ3VtZW50IHRvIHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQuCiAJUmVnaXN0ZXIgY2FsbHMgbWFkZSB0byBleHBsaWNpdCBjb25zdHJ1Y3RvciBgdGhpcycuIERvbid0IGNhbGwKIAlzYXZlX2V4cHIgaW4gQVJSQVlfUkVGIGNhc2Ugd2hlbiBlbWl0dGluZyBjbGFzcyBmaWxlcy4gQ2hlY2sgZm9yCiAJaWxsZWdhbCB1c2Ugb2YgdGhpcyB3aGVuIGV4cGFuZGluZyBleHBsaWNpdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uCiAJYXJndW1lbnRzLgoJKGNvbXBsZXRlX2Z1bmN0aW9uX2FyZ3VtZW50cyk6IFNldCBhbmQgcmVzZXQgcGFyc2VyIGNvbnRleHQKIAlleHBsaWNpdF9jb25zdHJ1Y3Rvcl9wIGZpZWxkIHZhbHVlIHdoZW4gYXBwcm9wcmlhdGUuCgkoYnVpbGRfc3VwZXJfaW52b2NhdGlvbiwgYnVpbGRfdGhpc19zdXBlcl9xdWFsaWZpZWRfaW52b2NhdGlvbik6CiAJTmV3IGZ1bmN0aW9ucy4KCShwYXRjaF9hc3NpZ25tZW50KTogRml4ZWQgdHlwby4KCShwYXRjaF91bmFyeW9wKTogQ2hlY2sgb24gZmluYWwgZmllbGRzIG9jY3VycyBvbmx5IHdoZW4gYSBkZWNsCiAJZXhpdHMuCgkocGF0Y2hfcmV0dXJuKTogVGFrZSBjb25zdHJ1Y3RvcnMgaW50byBhY2NvdW50LgoJKHBhdGNoX2NvbmRpdGlvbmFsX2V4cHIpOiBOZXcgZnVuY3Rpb24uCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX3NpZ25hdHVyZSk6IFJlbW92ZWQgdW5uZWNlc3NhcnkgZW1wdHkgbGluZS4KCldlZCBPY3QgMjggMDA6NDY6MTUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGpjZi1kdW1wLCBnY2poKTogTGluayBpbiAkKExJQlMpIHRvby4KCjE5OTgtMTAtMjggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW5hbWVkIGZpZWxkcy4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUmVuYW1lZCBiZnNpemUsIG5maWVsZHMsIG5zZmllbGRzLAoJaW50ZXJmYWNlX2xlbiwgbXNpemUgZmllbGRzLgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUmVtb3ZlZCBzdWJjbGFzc19oZWFkIGFuZAoJc3ViY2xhc3NfbmV4dCBmaWVsZHMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW1vdmVkIHN1YmNsYXNzX2hlYWQgYW5kCglzdWJjbGFzc19uZXh0IGZpZWxkcy4KCldlZCBPY3QgMjggMDA6NDY6MTUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogamNmLXdyaXRlLmMgKGVtaXRfbG9hZF9vcl9zdG9yZSk6IEF2b2lkIGltcGxpY2l0IGludCBhcmd1bWVudHMuCgkqIG1hbmdsZS5jIChlbWl0X3VuaWNvZGVfbWFuZ2xlZF9uYW1lKTogU2ltaWxhcmx5LgoKTW9uIE9jdCAyNiAxMjoxNzoyMyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGdldF9jb25zdGFudCk6IFBsYWNlIGJyYWNlcyBhcm91bmQgY29kZSB0byBjb21wdXRlCgknZCcgd2hlbiBSRUFMX0FSSVRITUVUSUMgaXMgbm90IGRlZmluZWQuCgpTdW4gT2N0IDI1IDE0OjU4OjA1IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIE1ha2UtbGFuZy5pbiAoanYtc2NhbiQoZXhlZXh0KSk6IEFkZCBzdGFtcC1vYmpsaXN0IHRvCglkZXBlbmRlbmN5LgoKMTk5OC0xMC0yMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBgLnppcCcgZmlsZXMgYXJlIGlucHV0IHRvIGpjMS4KClRodSBPY3QgMjIgMjM6MDE6NTQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqdnNwZWNzLmM6ICBBZGQgKGJ1dCBkb24ndCBlbmFibGUpIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBtdWx0aXBsZQoJLmNsYXNzIGFuZCAuamF2YSBpbnB1dCBmaWxlbmFtZXMgdG8gYSBzaW5nbGUgamMxIGludm9jYXRpb24uCglBZGQgc3VwcG9ydCBmb3IgLUMgZmxhZyAoY29waWxlIHRvIC5jbGFzcyBmaWxlcykuCglUcmFuc2xhdGUgLWNsYXNzcGF0aCBhbmQgLUNMQVNTUEFUSCBhcmd1bWVudHMuCgkqIGxhbmctc3BlY3MuaDogIERvbid0IHNldCAlMiBzcGVjLgoKMTk5OC0xMC0yMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogamNmLXBhdGguYyAoYWRkX2VudHJ5KTogRG9uJ3QgYWRkIHRyYWlsaW5nIHNlcGFyYXRvciBpZiBlbnRyeSBpcwoJYSAuemlwIGZpbGUuCgkoYWRkX3BhdGgpOiBEb24ndCBhZGQgdHJhaWxpbmcgc2VwYXJhdG9yIHRvIG5vbi1lbXB0eSBwYXRoCgllbGVtZW50cy4KCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQ2hlY2sgZm9yIC1mY2xhc3NwYXRoIGFuZAoJLWZDTEFTU1BBVEggYmVmb3JlIGV4YW1pbmluZyBvdGhlciBgLWYnIG9wdGlvbnMuCgoJKiBqYXZhLXRyZWUuaCAoZmluYWxpemVfaWRlbnRpZmllcl9ub2RlKTogRG9uJ3QgZGVjbGFyZS4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogRG9uJ3QgcHVzaCAiZmluYWwiIGZpZWxkLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRG9uJ3QgcHVzaCAiZmluYWwiIGZpZWxkLgoJKGZpbmFsaXplX2lkZW50aWZpZXJfbm9kZSk6IFJlbW92ZWQuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCBzZXQgZmluYWxpemVfaWRlbnRpZmllcl9ub2RlLgoKCSogY29uZmlnLWxhbmcuaW4gKHN0YWdlc3R1ZmYpOiBBZGRlZCBqY2YtZHVtcCBhbmQganYtc2Nhbi4KClN1biBPY3QgMTEgMTA6MzE6NTIgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEpOiBEZXBlbmQgb24gamNmLWR1bXAgYW5kIGp2LXNjYW4uCgkoSlZfU0NBTl9TT1VSQ0VTKTogTmV3IG1hY3JvLgoJKEpDRl9EVU1QX1NPVVJDRVMpOiBMaWtld2lzZS4KCShqY2YtZHVtcCQoZXhlZXh0KSk6IE5ldyB0YXJnZXQuCgkoanYtc2NhbiQoZXhlZXh0KSk6IE5ldyB0YXJnZXQuCgoxOTk4LTEwLTIyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTEVYKTogUmVtb3ZlZC4KCShMRVhGTEFHUyk6IExpa2V3aXNlLgoJKFNFVF9CSVNPTik6IE5ldyBtYWNyby4KCShCSVNPTik6IFJlbW92ZWQuCgkoJChQQVJTRV9DKSk6IFVzZSBTRVRfQklTT04uICBSdW4gYmlzb24gZnJvbSBzcmNkaXIgdG8gYXZvaWQKCXNwdXJpb3VzIGRpZmZzIGluIHBhcnNlLmMuCgkoJChQQVJTRV9TQ0FOX0MpKTogTGlrZXdpc2UuCgkoUEFSU0VfRElSKTogTmV3IG1hY3JvLgoJKFBBUlNFX0MpOiBVc2UgaXQuCgkoUEFSU0VfU0NBTl9DKTogTGlrZXdpc2UuCgkoUEFSU0VfUkVMRElSKTogTmV3IG1hY3JvLgoKCSogamNmLWlvLmMgKHNhd19qYXZhX3NvdXJjZSk6IERlZmluZSBoZXJlLCBub3QgaW4gamNmLXBhcnNlLmMuCgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IFVzZSBzYXdfamF2YV9zb3VyY2UgdG8gZGV0ZXJtaW5lIHdoZW4gdG8KCWxvb2sgZm9yIGAuamF2YScgZmlsZS4KCSogamNmLXBhcnNlLmMgKHNhd19qYXZhX3NvdXJjZSk6IE5ldyBnbG9iYWwuCgkoeXlwYXJzZSk6IFNldCBpdCBpZiBgLmphdmEnIGZpbGUgc2Vlbi4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9TUkNTKTogQWRkZWQgamNmLXBhdGguYy4KCShHQ0pIX1NPVVJDRVMpOiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW4gKGRhdGFkaXIpOiBOZXcgbWFjcm8uCgkobGliamF2YV96aXApOiBMaWtld2lzZS4KCShKQVZBX09CSlMpOiBBZGRlZCBqY2YtcGF0aC5vLgoJKC4uL2pjZi1kdW1wJChleGVleHQpKTogRGVwZW5kIG9uIGFuZCBsaW5rIHdpdGggamNmLWRlcGVuZC5vLgoJKC4uL2djamgkKGV4ZWV4dCkpOiBMaWtld2lzZS4KCShqY2YtcGF0aC5vKTogTmV3IHRhcmdldC4KCSogamF2YS10cmVlLmggKGZpeF9jbGFzc3BhdGgpOiBSZW1vdmVkIGRlY2wuCgkqIGpjZi1wYXJzZS5jIChmaXhfY2xhc3NwYXRoKTogUmVtb3ZlZC4KCShsb2FkX2NsYXNzKTogRG9uJ3QgY2FsbCBmaXhfY2xhc3NwYXRoLgoJKiBwYXJzZS55IChyZWFkX2ltcG9ydF9kaXIpOiBEb24ndCBjYWxsIGZpeF9jbGFzc3BhdGguCgkqIGxleC5oOiBEb24ndCBtZW50aW9uIGNsYXNzcGF0aC4KCSogbGV4LmMgKGphdmFfaW5pdF9sZXgpOiBEb24ndCBpbml0aWFsaXplIGNsYXNzcGF0aC4KCSogamNmLWlvLmMgKGNsYXNzcGF0aCk6IFJlbW92ZWQgZ2xvYmFsLgoJKGZpbmRfY2xhc3MpOiBVc2UgamNmX3BhdGggaXRlcmF0aW9uIGZ1bmN0aW9ucy4gIENvcnJlY3RseSBzZWFyY2gKCWNsYXNzIHBhdGggZm9yIC5qYXZhIGZpbGUuCgkob3Blbl9pbl96aXApOiBOZXcgYXJndW1lbnQgYGlzX3N5c3RlbScuCgkqIGpjZi1kdW1wLmMgKG1haW4pOiBDYWxsIGpjZl9wYXRoX2luaXQuICBSZWNvZ25pemUgYWxsIG5ldwoJY2xhc3NwYXRoLXJlbGF0ZWQgb3B0aW9ucy4KCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZjbGFzc3BhdGgsIC1mQ0xBU1NQQVRILAoJYW5kIC1JLgoJKGxhbmdfaW5pdCk6IENhbGwgamNmX3BhdGhfaW5pdC4KCSogbGFuZy1vcHRpb25zLmg6IE1lbnRpb24gLUksIC1mY2xhc3NwYXRoLCBhbmQgLWZDTEFTU1BBVEguCgkqIGxhbmctc3BlY3MuaDogSGFuZGxlIC1JLiAgTWlub3IgY2xlYW51cCB0byAtTSBvcHRpb25zLgoJQ29ycmVjdGx5IHB1dCBicmFjZXMgYXJvdW5kIHNlY29uZCBzdHJpbmcgaW4gZWFjaCBlbnRyeS4KCSogZ2phdmFoLmMgKG1haW4pOiBDYWxsIGpjZl9wYXRoX2luaXQuICBSZWNvZ25pemUgYWxsIHRoZSBuZXcKCWNsYXNzcGF0aC1yZWxhdGVkIG9wdGlvbnMuCgkoaGVscCk6IFVwZGF0ZWQgZm9yIG5ldyBvcHRpb25zLgoJKiBqY2YuaDogRGVjbGFyZSBmdW5jdGlvbnMgZnJvbSBqY2YtcGF0aC5jLiAgRG9uJ3QgbWVudGlvbgoJYGNsYXNzcGF0aCcgZ2xvYmFsLgoJKiBqY2YtcGF0aC5jOiBOZXcgZmlsZS4KCgkqIGpjZi1kZXBlbmQuYzogSW5jbHVkZSBqY2YuaC4KCgkqIGpjZi13cml0ZS5jIChsb2NhbHZhcl9hbGxvYyk6IFJldHVybnMgYHZvaWQnLgoJKGxvY2FsdmFyX2ZyZWUpOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZS4KCgkqIGxhbmcuYyAoT0JKRUNUX1NVRkZJWCk6IERlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKGluaXRfcGFyc2UpOiBVc2UgT0JKRUNUX1NVRkZJWCwgbm90ICIubyIuCgpXZWQgT2N0IDIxIDA3OjU0OjExIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZW1pdF9yZWdpc3Rlcl9jbGFzc2VzKTogUmVuYW1lZCBmcm9tCiAJZW1pdF9yZWdpc3Rlcl9jbGFzcy4KCSogamF2YS10cmVlLmggKGVtaXRfcmVnaXN0ZXJfY2xhc3Nlcyk6IFByb3RvdHlwZSByZW5hbWVkIGZyb20KIAllbWl0X3JlZ2lzdGVyX2NsYXNzLgoJKiBqY2YtcGFyc2UuYyAoeXlwYXJzZSk6IENhbGwgZW1pdF9yZWdpc3Rlcl9jbGFzc2VzIG9uY2UgYmVmb3JlCiAJcmV0dXJuaW5nLgoJKiBwYXJzZS55IChqYXZhX2V4cGFuZF9jbGFzc2VzKTogTm8gbG9uZ2VyIHJlZ2lzdGVyIGNsYXNzZXMuCgpUdWUgT2N0IDIwIDA5OjE1OjM4IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaXNfY29tcGlsZWRfY2xhc3MpOiBOZXcgbG9jYWwgdmFyaWFibGUKIAlzZWVuX2luX3ppcC4gSWRlbnRpZnkgY2xhc3NlcyBmb3VuZCBpbiBjdXJyZW50bHkgY29tcGlsZWQgc291cmNlCiAJZmlsZShzKS4KCSogZGVjbC5jIChjb21wbGV0ZV9zdGFydF9qYXZhX21ldGhvZCk6IEZpeGVkIHR5cG8uCgkqIGphdmEtdHJlZS5oIChDTEFTU19GUk9NX0NVUlJFTlRMWV9DT01QSUxFRF9TT1VSQ0VfUCwKIAlIQVNfQkVFTl9BTFJFQURZX1BBUlNFRF9QLCBJU19BX0NPTU1BTkRfTElORV9GSUxFTkFNRV9QKTogTmV3IG1hY3Jvcy4KCShDTEFTU19QKTogTW92ZWQgYXJvdW5kLgoJKGphdmFfcGFyc2VfYWJvcnRfb25fZXJyb3IpOiBNYWNybyBtb3ZlZCBmcm9tIGpjZi1wYXJzZS5jCgkqIGpjZi1wYXJzZS5jIChqYXZhX3BhcnNlX2Fib3J0X29uX2Vycm9yKTogTWFjcm8gbW92ZWQgdG8KIAlqYXZhLXBhcnNlLmgKCShqY2ZfcGFyc2Vfc291cmNlKTogQ2hhbmdlZCBsZWFkaW5nIGNvbW1lbnQuIFJlbW92ZWQgdW5uZWNlc3NhcnkKIAlmY2xvc2UgYW5kIENMQVNTX0ZST01fU09VUkNFX1AgbWFya2luZy4KCShwYXJzZV9zb3VyY2VfZmlsZSk6IE5ldyBsb2NhbCB2YXJpYWJsZXMgcmVtZW1iZXJfZm9yX2dlbmVyYXRpb24KIAlhbmQgZmlsZW5hbWUuIE1hcmsgcGFyc2VkIGZpbGUgbmFtZSBpZGVudGlmaWVyIG5vZGUuIFJlbW92ZWQgYmxvY2sKIAlleGVjdXRlZCB3aGVuIHBhcnNlX29ubHkgd2FzIG51bGwuIFNldCByZW1lbWJlcl9mb3JfZ2VuZXJhdGlvbi4KCVVzZSBpdCBhcyBhbiBhcmd1bWVudCB0byBqYXZhX3BvcF9wYXJzZXJfY29udGV4dC4KCSh5eXBhcnNlKTogTmV3IGxvY2FsIHZhcmlhYmxlcyBzZXZlcmFsX2ZpbGVzLCBsaXN0LCBuZXh0IG5vZGUgYW5kCiAJY3VycmVudF9maWxlX2xpc3QuIFNwbGl0IGFtcGVyc2FuZCBzZXBhcmF0ZWQgZmlsZSBuYW1lcyBpbnRvCiAJY3VycmVudF9maWxlX2xpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBhbmQgcGFyc2UgYWNjb3JkaW5nbHkuCgkqIHBhcnNlLmggKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogTmV3IGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogcGFyc2UueSAoY3R4cF9mb3JfZ2VuZXJhdGlvbik6IE5ldyBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogTmV3IGFyZ3VtZW50IGdlbmVyYXRlLiBMaW5rIHBvcHBlZCBjdHhwCiAJdG8gY3R4cF9mb3JfZ2VuZXJhdGlvbiBsaXN0IGFjY29yZGluZ2x5LgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShqYXZhX2V4cGFuZF9jbGFzc2VzKTogTmV3IGZ1bmN0aW9uLgoKU2F0IE9jdCAxNyAxMToyNToyMSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiAgTGluayB3aXRoIGxpYmliZXJ0eS5hIGluc3RlYWQgb2YgbWVtbW92ZS5vLgoKRnJpIE9jdCAxNiAxMDo1OTowMSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChzZXRqbXAuaCk6IE5vIGxvbmdlciBpbmNsdWRlZC4KCSogbGV4LmggKHNldGptcC5oKTogSW5jbHVkZWQuCgkqIHBhcnNlLmggKFNFVF9UWVBFX0ZPUl9SRVNPTFVUSU9OKTogTmV3IG1hY3JvLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcl9wKTogUmVuYW1lZCBmcm9tCiAJZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yLgoJKGJ1aWxkX2FycmF5X2Zyb21fbmFtZSk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGUuCgkqIHBhcnNlLnkgKHNldGptcC5oKTogTm8gbG9uZ2VyIGluY2x1ZGVkLgoJKHZhcmlhYmxlX2RlY2xhcmF0b3JfaWQpOiBEZWZpbmUgYWN0aW9uLgoJKGJ1aWxkX2FycmF5X2Zyb21fbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3JfcCk6IFJlbmFtZWQgZnJvbQogCWR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvci4gIEZpeGVkIGxlYWRpbmcgY29tbWVudC4KCShyZWdpc3Rlcl9maWVsZHMpOiBNYWluIGBmb3InIGxvb3AgcmVvcmdhbml6ZWQuIFVzZXMKIAlTRVRfVFlQRV9GT1JfUkVTT0xVVElPTiBhbmQgYnVpbGRfYXJyYXlfZnJvbV9uYW1lLgoJKG1ldGhvZF9kZWNsYXJhdG9yKTogVXNlcyBTRVRfVFlQRV9GT1JfUkVTT0xVVElPTiBhbmQgY2FsbAogCWJ1aWxkX2FycmF5X2Zyb21fbmFtZS4KCShyZXNvbHZlX2NsYXNzKTogU2V0IENMQVNTX0xPQURFRF9QIG9uIG5ld2x5IGJ1aWxkIGFycmF5IGRpbWVuc2lvbgogCXR5cGVzLgoJKHJlYWRfaW1wb3J0X2Rpcik6IERvbid0IHRyeSB0byBza2lwIGAuJyBhbmQgYC4uJy4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZXMgU0VUX1RZUEVfRk9SX1JFU09MVVRJT04gYW5kCiAJYnVpbGRfYXJyYXlfZnJvbV9uYW1lLiBNYWluIGBmb3InIGxvb3AgcmVvcmdhbml6ZWQuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogV2hlbiBidWlsZGluZyBhY2Nlc3MgdG8gYQogCWZpZWxkLCB1c2UgdGhlIHR5cGUgd2hlcmUgdGhlIGZpZWxkIHdhcyBmb3VuZCwgbm90IGl0cyBvd24gdHlwZS4KCShtYXliZV9hY2Nlc3NfZmllbGQpOiBVc2UgZmllbGQgREVDTF9DT05URVhUIGlmIHRoZSB0eXBlIHdoZXJlIHRoZQogCWZpZWxkIHdhcyBmb3VuZCBpcyBudWxsLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBTd2VlcCB0aHJvdWdoIGFsbCBzdWNjZXNzaXZlIGFycmF5CiAJZGltZW5zaW9ucy4KCldlZCBPY3QgMTQgMTg6MjE6MjkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAocG9wX2xhYmVsZWRfYmxvY2ssIGxhbmdfcHJpbnRhYmxlX25hbWUsCiAJbWF5YmVfYWRkX2ludGVyZmFjZSwgc2V0X3N1cGVyX2luZm8sIGdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsLAogCWludGVyZmFjZV9vZl9wLCBpbmhlcml0c19mcm9tX3AsIGZpeF9jbGFzc3BhdGgsCiAJY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QsIGVtaXRfaGFuZGxlcnMsIGluaXRfb3V0Z29pbmdfY3Bvb2wsCiAJbWFrZV9jbGFzc19kYXRhLCByZWdpc3Rlcl9jbGFzcywgYWxsb2NfbmFtZV9jb25zdGFudCk6IE5ldwogCWZ1bmN0aW9uIHByb3RvdHlwZXMuCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0IGFyZ2MgYXJndW1lbnQgdW51c2VkLiBGaXhlZAogCWluZGVudGF0aW9uLiBBZGRlZCBjYXN0IHRvIHJlbW92ZSB3YXJuaW5nLgoJKGxhbmdfcHJpbnRhYmxlX25hbWUpOiBTZXQgdiBhcmd1bWVudCB1bnVzZWQuCgkobGFuZ19wcmludF9lcnJvcik6IEFkZGVkIGFyZ3VtZW50IHRvIGxhbmdfcHJpbnRhYmxlX25hbWUgY2FsbC4KCShqYXZhX2R1bW15X3ByaW50LCBwcmludF9sYW5nX2RlY2wsIHByaW50X2xhbmdfdHlwZSwKIAlwcmludF9sYW5nX2lkZW50aWZpZXIsIGxhbmdfcHJpbnRfeG5vZGUpOiBBbGwgYXJndW1lbnQgbWFya2VkCiAJdW51c2VkLgoJKiBsZXguYyAoamF2YV91bmdldF91bmljb2RlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBhcmd1bWVudC4KCShqYXZhX2FsbG9jYXRlX25ld19saW5lKTogVW51c2VkIGxvY2FsIHZhcmlhYmxlIGlzIGdvbmUuCgkoamF2YV9yZWFkX2NoYXIpOiBBZGRlZCBwYXJlbnRoZXNpcyBpbiBleHByZXNzaW9ucyB0byByZW1vdmUKIAl3YXJuaW5ncy4gIEFkZGVkIGZpbmFsIHJldHVybiBzdGF0ZW1lbnQuCgkoamF2YV9yZWFkX3VuaWNvZGUpOiBBZGRlZCBwYXJlbnRoZXNpcyBpbiBleHByZXNzaW9uIHRvIHJlbW92ZQogCXdhcm5pbmcuCgkoamF2YV9wYXJzZV9lbmRfY29tbWVudCk6IEZpeGVkIGphdmFfdW5nZXRfdW5pY29kZSBpbnZvY2F0aW9uLgoJKGphdmFfcGFyc2VfZXNjYXBlX3NlcXVlbmNlKTogTGlrZXdpc2UuCgkoamF2YV9sZXgpOiBVbnVzZWQgbG9jYWwgdmFyaWFibGVzIGFyZSBnb25lLiBGaXhlZAogCWphdmFfdW5nZXRfdW5pY29kZSBpbnZvY2F0aW9uLgoJKiBsZXguaCAoc2V0X2Zsb2F0X2hhbmRsZXIpOiBQcm90b3R5cGUgYWRkZWQgd2hlbiBKQzFfTElURSBub3QKIAlkZWZpbmVkLgoJKiBwYXJzZS5oIChFUlJPUl9DQU5UX0NPTlZFUlRfVE9fQk9PTEVBTik6IEZpeGVkCiAJbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9uIGluIG1hY3JvLgoJKEVSUk9SX0NBTlRfQ09OVkVSVF9UT19OVU1FUklDLCBFUlJPUl9DQVNUX05FRURFRF9UT19JTlRFR1JBTCk6CiAJTGlrZXdpc2UuCgkoZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnQgaW4KIAlwcm90b3R5cGUuCgkoaWRlbnRpY2FsX3N1YnBhdGhfcCk6IEZ1bmN0aW9uIGRlY2xhcmF0aW9uIGlzIGdvbmUuCgkocGF0Y2hfaW52b2tlKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKHBhdGNoX2Nhc3QsIGJ1aWxkX2xhYmVsZWRfYmxvY2ssIGNoZWNrX3Rocm93bl9leGNlcHRpb25zKToKIAlMaWtld2lzZS4KCSogcGFyc2UueSAoc2V0am1wLmgpOiBJbmNsdWRlZAoJKHRvcGxldi5oKTogTGlrZXdpc2UuCgkoZmllbGRfZGVjbGFyYXRpb246KTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwKCShsYWJlbF9kZWNsOik6IEZpeGVkIGJ1aWxkX2xhYmVsZWRfYmxvY2sgaW52b2NhdGlvbi4KCShqYXZhX3BvcF9wYXJzZXJfY29udGV4dCk6IFB1dCBleHRyYSBwYXJlbnRoZXNpcyBhcm91bmQgYXNzaWdubWVudAogCWluIGlmLgoJKHl5ZXJyb3IpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkodmFyaWFibGVfcmVkZWZpbml0aW9uX2Vycm9yKTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZQogCWludm9jYXRpb24uCgkoY3JlYXRlX2ludGVyZmFjZSk6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4KCShjcmVhdGVfY2xhc3MpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfZGVjbGFyYXRpb25fZXJyb3IpOiBTdXBwcmVzc2VkIHVudXNlZCBhcmd1bWVudC4gRml4ZWQKIAlsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb24uCgkocmVnaXN0ZXJfZmllbGRzKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGUuIEZpeGVkCiAJZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yIGludm9jYXRpb24uCgkobWV0aG9kX2hlYWRlcik6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlLgoJKG1ldGhvZF9kZWNsYXJhdG9yLCBwYXJzZXJfY2hlY2tfc3VwZXIpOiBMaWtld2lzZS4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGUuIEZpeGVkCiAJZmF0YWwgZXJyb3IgbWVzc2FnZS4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogQWRkZWQgZGVmYXVsdDogaW4gc3dpdGNoLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZQogCWludm9jYXRpb25zLgoJKGNoZWNrX3Rocm93c19jbGF1c2VzKTogTGlrZXdpc2UuCgkoamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwKIAl2YXJpYWJsZS4gRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9uLgoJKHJlYWRfaW1wb3J0X2VudHJ5KTogQWRkZWQgc3VwcGxlbWVudGFsIHJldHVybiBzdGF0ZW1lbnQuCgkocmVhZF9pbXBvcnRfZGlyKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MsIGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogTGlrZXdpc2UuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogU3VwcHJlc3NlZCB1bnVzZWQgZXh0ZXJuIHZhcmlhYmxlCiAJZGVjbGFyYXRpb25zCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogU3VwcHJlc3NlZCB1bnVzZWQgZXh0ZXJuIGFuZCBsb2NhbAogCXZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKG1ha2VfcXVhbGlmaWVkX25hbWUpOiBMaWtld2lzZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBBZGRlZCBkZWZhdWx0OiBpbgogCXN3aXRjaC4gRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9uLgoJKGNsYXNzX2luc3RhbmNlX2NyZWF0aW9uX2V4cHJlc3Npb24pOiBBZGRlZCBwYXJlbnRoZXNpcyBhcm91bmQKIAlleHByZXNzaW9ucy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBhbmQKIAlwYXRjaF9pbnZva2UgaW52b2NhdGlvbnMuCgkoY2hlY2tfZm9yX3N0YXRpY19tZXRob2RfcmVmZXJlbmNlKTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZQogCWludm9jYXRpb24uCgkocGF0Y2hfaW52b2tlKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnRzIGFuZCBsb2NhbCB2YXJpYWJsZXMuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBTdXBwcmVzc2VkIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuCgkocXVhbGlmeV9hbWJpZ3VvdXNfbmFtZSk6IEFkZGVkIGRlZmF1bHQ6IGluIHN3aXRjaC4KCShpZGVudGljYWxfc3VicGF0aF9wKTogRnVuY3Rpb24gcmVtb3ZlZC4KCShwYXRjaF9hc3NpZ25tZW50KTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLiBTdXBwcmVzc2VkCiAJdW5uZWNlc3NhcnkgaWYgc3RhdGVtZW50LiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKHRyeV9idWlsdGluX2Fzc2lnbmNvbnYpOiBGaXhlZCBsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IFBhcmVudGhlc2lzIGFyb3VuZAogCWV4cHJlc3Npb24uIFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4KCShidWlsZF9iaW5vcCk6IFN1cHByZXNzZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlcy4gZml4ZWQKIAlsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKHN0cmluZ19jb25zdGFudF9jb25jYXRlbmF0aW9uKTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwKIAl2YXJpYWJsZXMuCgkocGF0Y2hfdW5hcnlvcCk6IEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShwYXRjaF9jYXN0KTogU3VwcHJlc3NlZCB1bm5lY2Vzc2FyeSBhcmd1bWVudC4gRml4ZWQKIAlsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb24uCgkocGF0Y2hfYXJyYXlfcmVmKTogRml4ZWQgbGFuZ19wcmludGFibGVfbmFtZSBpbnZvY2F0aW9uLgoJKHBhdGNoX25ld2FycmF5LCBwYXRjaF9yZXR1cm4sIHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50KTogTGlrZXdpc2UuCgkoYnVpbGRfbGFiZWxlZF9ibG9jayk6IFN1cHByZXNzZWQgdW51c2VkIGFyZ3VtZW50LgoJKGdlbmVyYXRlX2xhYmVsZWRfYmxvY2spOiBGaXhlZCBidWlsZF9sYWJlbGVkX2Jsb2NrIGludm9jYXRpb24uCgkoYnVpbGRfbG9vcF9ib2R5KTogU3VwcHJlc3NlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoJKHBhdGNoX2xvb3Bfc3RhdGVtZW50KTogTGlrZXdpc2UuCgkocGF0Y2hfZXhpdCk6IEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbi4KCShwYXRjaF9zd2l0Y2hfc3RhdGVtZW50KTogTGlrZXdpc2UuCgkoY2FzZV9pZGVudGl0eSk6IEZpcnN0IGFyZ3VtZW50IG1hcmtlZCB1bnVzZWQuCgkocGF0Y2hfdHJ5X3N0YXRlbWVudCk6IEZpeGVkIGxhbmdfcHJpbnRhYmxlX25hbWUgaW52b2NhdGlvbnMuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCwgcGF0Y2hfdGhyb3dfc3RhdGVtZW50KTogTGlrZXdpc2UuCgkoY2hlY2tfdGhyb3duX2V4Y2VwdGlvbnMpOiBGaXhlZCBjaGVja190aHJvd25fZXhjZXB0aW9ucyBhbmQKIAlsYW5nX3ByaW50YWJsZV9uYW1lIGludm9jYXRpb25zLgoJKGNoZWNrX3Rocm93bl9leGNlcHRpb25zX2RvKTogU3VwcHJlc3NlZCB1bnVzZWQgYXJndW1lbnQuCgoxOTk4LTEwLTE0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYyAod3JpdGVfY2xhc3NmaWxlKTogQWRkIG91dHB1dCBjbGFzcyBmaWxlIGFzIHRhcmdldC4KCSogbGFuZy1vcHRpb25zLmg6IEFkZGVkIC1NRCwgLU1NRCwgLU0sIGFuZCAtTU0uCgkqIGpjZi5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgZm9yIGRlcGVuZGVuY3ktdHJhY2tpbmcgZnVuY3Rpb25zLgoJKiBsYW5nLXNwZWNzLmg6IEhhbmRsZSAtTSwgLU1NLCBNRCwgYW5kIC1NTUQuCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogUmVjb2duaXplIC1NRCBhbmQgLU1NRC4KCShmaW5pc2hfcGFyc2UpOiBDYWxsIGpjZl9kZXBlbmRlbmN5X3dyaXRlLgoJKGRlcGVuZGVuY3lfdHJhY2tpbmcpOiBOZXcgZ2xvYmFsLgoJKERFUEVORF9TRVRfRklMRSk6IE5ldyBkZWZpbmUuCgkoREVQRU5EX0VOQUJMRSk6IE5ldyBkZWZpbmUuCgkoaW5pdF9wYXJzZSk6IEVuYWJsZSBkZXBlbmRlbmN5IHRyYWNraW5nIGlmIHJlcXVpcmVkLgoJSW5jbHVkZSAiZmxhZ3MuaCIuCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiBBZGRlZCBqY2YtZGVwZW5kLm8uCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCkpOiBEZXBlbmQgb24gYW5kIGxpbmsgd2l0aCBqY2YtZGVwZW5kLm8uCgkoLi4vZ2NqaCQoZXhlZXh0KSk6IExpa2V3aXNlLgoJKGpjZi1kZXBlbmQubyk6IE5ldyB0YXJnZXQuCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9TUkNTKTogQWRkZWQgamNmLWRlcGVuZC5jLgoJKEdDSkhfU09VUkNFUyk6IExpa2V3aXNlLgoJKiBqY2YtaW8uYyAob3Blbl9jbGFzcyk6IENhbGwgamNmX2RlcGVuZGVuY3lfYWRkX2ZpbGUuICBBZGRlZAoJZGVwX25hbWUgYXJndW1lbnQuCgkoZmluZF9jbGFzc2ZpbGUpOiBBZGRlZCBkZXBfbmFtZSBhcmd1bWVudC4KCShmaW5kX2NsYXNzKTogQ29tcHV0ZSBuYW1lIG9mIGRlcGVuZGVuY3kuCgkob3Blbl9pbl96aXApOiBDYWxsIGpjZl9kZXBlbmRlbmN5X2FkZF9maWxlLgoJKiBnamF2YWguYyAob3V0cHV0X2ZpbGUpOiBObyBsb25nZXIgZ2xvYmFsLgoJKHVzYWdlKTogRG9uJ3QgbWVudGlvbiAiZ2phdmFoIi4KCShoZWxwKTogTGlrZXdpc2UuCgkoamF2YV9ub19hcmd1bWVudCk6IExpa2V3aXNlLgoJKHZlcnNpb24pOiBMaWtld2lzZS4KCShtYWluKTogUmVjb2duaXplIGFuZCBoYW5kbGUgLU0gZmFtaWx5IG9mIG9wdGlvbnMuCgkocHJpbnRfbWFuZ2xlZF9jbGFzc25hbWUpOiBSZXR1cm4gaXMgdm9pZC4KCShwcm9jZXNzX2ZpbGUpOiBIYW5kbGUgY2FzZSB3aGVyZSBvdXRwdXQgaXMgc3VwcHJlc3NlZC4KCShIQU5ETEVfRU5EX0ZJRUxEKTogTGlrZXdpc2UuCgkoSEFORExFX01FVEhPRCk6IExpa2V3aXNlLgoJKiBqY2YtZGVwZW5kLmM6IE5ldyBmaWxlLgoKVHVlIE9jdCAxMyAyMzozNDoxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqYXZhLXRyZWUuZGVmOiBBZGQgbWlzc2luZyBuZXdsaW5lIGF0IEVPRi4KCjE5OTgtMTAtMTMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGpjZi1kdW1wLmMgKHByb2Nlc3NfY2xhc3MpOiBVc2UgRkFUQUxfRVhJVF9DT0RFLCBub3QgLTEuCgkobWFpbik6IExpa2V3aXNlLiAgRXhpdCB3aXRoIFNVQ0NFU1NfRVhJVF9DT0RFIGF0IGVuZCBvZgoJZnVuY3Rpb24uCglJbmNsdWRlIDxjb25maWcuaD4gYW5kICJzeXN0ZW0uaCIuCgkoZGlzYXNzZW1ibGVfbWV0aG9kKTogVW5kZWZpbmUgUkVUIHRvIGF2b2lkIGNsYXNoIHdpdGgKCWNvbmZpZy9pMzg2L2kzODYuaC4KClR1ZSBPY3QgMTMgMDM6NTA6MjggMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHJ1bnRpbWVfZXhjZXB0aW9uX3R5cGVfbm9kZSwgZXJyb3JfZXhjZXB0aW9uX3R5cGVfbm9kZSk6CiAJTmV3IGdsb2JhbCB2YXJpYWJsZXMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplZC4KCSogZXhwci5jIChqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBTZXQgY2F1Z2h0IGV4Y2VwdGlvbiB0eXBlIHRvCiAJbnVsbCBpZiBjYXRjaCBoYW5kbGVyIGFyZ3VtZW50IGRvZXNuJ3QgZXhpdC4KCSogamF2YS10cmVlLmRlZiAoU1lOQ0hST05JWkVEX0VYUFIsIFRIUk9XX0VYUFIpOiBOZXcgSmF2YSBzcGVjaWZpYwogCXRyZWUgY29kZXMuCgkqIGphdmEtdHJlZS5oIChydW50aW1lX2V4Y2VwdGlvbl90eXBlX25vZGUsCiAJZXJyb3JfZXhjZXB0aW9uX3R5cGVfbm9kZSk6IEdsb2JhbCB2YXJpYWJsZXMgZGVjbGFyZWQuCgkoREVDTF9GVU5DVElPTl9USFJPV1MpOiBOZXcgbWFjcm8uCgkoREVDTF9GVU5DVElPTl9CT0RZKTogTW9kaWZpZWQgY29tbWVudC4KCShERUNMX1NQRUNJRklDX0NPVU5UKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCB0aHJvd3NfbGlzdC4KCShJU19VTkNIRUNLRURfRVhQUkVTU0lPTl9QKTogTmV3IG1hY3JvLgoJKiBsZXguYyAoamF2YV9sZXgpOiBHZW5lcmF0ZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgVEhST1dfVEsuCgkqIHBhcnNlLmggKFBVU0hfRVhDRVBUSU9OUywgUE9QX0VYQ0VQVElPTlMsIElOX1RSWV9CTE9DS19QLAogCUVYQ0VQVElPTlNfUCk6IE5ldyBtYWNyb3MuCgkoZW51bSBqZGVwX2NvZGUpOiBOZXcgdmFsdWUgSkRFUF9FWENFUFRJT04uCgkoQlVJTERfTU9OSVRPUl9FTlRFUiwgQlVJTERfTU9OSVRPUl9FWElULAogCUJVSUxEX0FTU0lHTl9FWENFUFRJT05fSU5GTywgQlVJTERfVEhST1csIFNFVF9XRkxfT1BFUkFUT1IsCiAJUEFUQ0hfTUVUSE9EX1JFVFVSTl9FUlJPUik6IE5ldyBtYWNyb3MuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IEFkZGVkIG5ldyBhcmd1bWVudCB0byBwcm90b3R5cGUuCgkocGF0Y2hfc3luY2hyb25pemVkX3N0YXRlbWVudCwgcGF0Y2hfdGhyb3dfc3RhdGVtZW50LAogCWNoZWNrX3Rocm93bl9leGNlcHRpb25zLCBjaGVja190aHJvd25fZXhjZXB0aW9uc19kbywKIAlwdXJnZV91bmNoZWNrZWRfZXhjZXB0aW9ucywgY2hlY2tfdGhyb3dzX2NsYXVzZXMpOiBOZXcgZnVuY3Rpb24KIAlwcm90b3R5cGVzLgoJKiBwYXJzZS55IEZpeGVkIHR5cG8gaW4ga2V5d29yZCBzZWN0aW9uLgoJKHRocm93Oik6IFJ1bGUgdGFnZ2VkIDxub2RlPi4KCShUSFJPV19USyk6IEtleXdvcmQgdGFnZ2VkIDxvcGVyYXRvcj4uCgkobWV0aG9kX2hlYWRlcjopOiBMYXN0IGFyZ3VtZW50IHRvIGNhbGwgdG8gbWV0aG9kX2hlYWRlciBwYXNzZWQKIAlmcm9tIHRocm93czogcnVsZS4KCSh0aHJvd3M6LCBjbGFzc190eXBlX2xpc3Q6LCB0aHJvd19zdGF0ZW1lbnQ6LAogCXN5bmNocm9uaXplZF9zdGF0ZW1lbnQ6LCBzeW5jaHJvbml6ZWQ6KTogRGVmaW5lZCBhY3Rpb25zLgoJKG1ldGhvZF9oZWFkZXIpOiBOZXcgbG9jYWwgdmFyaWFibGUgY3VycmVudC4gUmVnaXN0ZXIgZXhjZXB0aW9ucwogCWZyb20gdGhyb3dzIGNsYXVzZS4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBDb21wbGV0ZSBhbmQgdmVyaWZ5IGV4Y2VwdGlvbnMgZnJvbSB0aHJvd3MKIAljbGF1c2UuCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IEVycm9yIG1lc3NhZ2Ugb24gZXhjZXB0aW9ucyBub3QKIAlmb3VuZAoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogRml4ZWQgdHlwby4gU2hvcnRjdXQgb24gcHJpdmF0ZQogCW92ZXJyaWRpbmcgbWV0aG9kcy4gQ2hhbmdlZCBlcnJvciBtZXNzYWdlIG9uIG1ldGhvZAogCXJlZGVmaW5pdGlvbi4gQ2hlY2sgZm9yIHRocm93cyBjbGF1c2UgY29tcGF0aWJpbGl0eS4KCShjaGVja190aHJvd3NfY2xhdXNlcyk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2NoZWNrX2Fic3RyYWN0X21ldGhvZHMpOiBVc2UgREVDTF9OQU1FIGZvciB3Zmwgb3IgY3VycmVudAogCW1ldGhvZC4gQ2hhbmdlZCBlcnJvciBtZXNzYWdlIG9uIG1ldGhvZCByZWRlZmluaXRpb24uCgkoY3VycmVudGx5X2NhdWdodF90eXBlX2xpc3QpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBQdXJnZSB1bmNoZWNrZWQgZXhjZXB0aW9ucyBmcm9tCiAJdGhyb3dzIGNsYXVzZSBsaXN0LiBDYWxsIFBVU0hfRVhDRVBUSU9OUyBiZWZvcmUgd2FsayBhbmQKIAlQT1BfRVhDRVBUSU9OUyBhZnRlci4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBQYXNzIG5ldyBhcmd1bWVudCBhcyBOVUxMIHRvCiAJcGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdC4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogTmV3IGFyZ3VtZW50IHJlZl9kZWNsLiBJbnZva2UKIAlQQVRDSF9NRVRIT0RfUkVUVVJOX0VSUk9SIHdoZW4gcmV0dXJuaW5nIHdpdGggZXJyb3IuIFJldmVyc2UKIAlhcmd1bWVudCBsaXN0IHdoZW4gYXBwcm9wcmlhdGUuIFVzZSBuZXcgYXJndW1lbnQgaWYgbm9uIG51bGwgdG8KIAlzdG9yZSBzZWxlY3RlZCBtZXRob2QgZGVjbC4KCShwYXRjaF9pbnZva2UpOiBDb252ZXJ0IGlmIG5lY2Vzc2FyeSBhcmdzIG9mIGJ1aWx0aW4gdHlwZXMgYmVmb3JlCiAJZm9ybWluZyBDQUxMX0VYUFIuIEFyZ3VtZW50IGxpc3Qgbm8gbG9uZ2VyIHJldmVyc2VkIGhlcmUuCgkoaW52b2NhdGlvbl9tb2RlKTogVHJlYXQgZmluYWwgbWV0aG9kcyBhcyBzdGF0aWMgbWV0aG9kcy4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBOZXcgY2FzZXMgZm9yIFRIUk9XX0VYUFI6IGFuZAogCVNZTkNIUk9OSVpFRF9FWFBSOi4gQ2hlY2sgdGhyb3duIGV4Y2VwdGlvbnMgd2hlbiBjb21wbGV0aW5nCiAJZnVuY3Rpb24gY2FsbC4KCShjb21wbGV0ZV9mdW5jdGlvbl9hcmd1bWVudHMpOiBObyBtb3JlIFJFQ09SRF9UWVBFCiAJY29udmVyc2lvbi4gRnVuY3Rpb24gcGFyYW1ldGVyIG5vZGVzIG5vIGxvbmdlciBzYXZlZC4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBBdm9pZCBoYW5kbGluZyBudWxsIHR5cGUuCgkocGF0Y2hfYmlub3ApOiBGaXhlZCBudWxsIGNvbnN0YW50IHJlZmVyZW5jZSBoYW5kbGluZy4KCShidWlsZF90cnlfc3RhdGVtZW50KTogVXNlIEJVSUxEX0FTU0lHTl9FWENFUFRJT05fSU5GTyBhbmQKIAlCVUlMRF9USFJPVyBtYWNyb3MuCgkocGF0Y2hfdHJ5X3N0YXRlbWVudCk6IEZpeGVkIGNvbW1lbnRzLiBSZWNvcmQgY2F1Z2h0IHR5cGVzIGluCiAJbGlzdCwgcHVzaCB0aGUgbGlzdCwgZXhwYW5kIHRyeSBibG9jayBhbmQgcG9wIHRoZSBsaXN0LgoJKHBhdGNoX3N5bmNocm9uaXplZF9zdGF0ZW1lbnQsIHBhdGNoX3Rocm93X3N0YXRlbWVudCwKIAljaGVja190aHJvd25fZXhjZXB0aW9ucywgY2hlY2tfdGhyb3duX2V4Y2VwdGlvbnNfZG8sCiAJcHVyZ2VfdW5jaGVja2VkX2V4Y2VwdGlvbnMpOiBOZXcgZnVuY3Rpb25zLgoJKiB0eXBlY2suYyAobG9va3VwX2FyZ3VtZW50X21ldGhvZCk6IEFsbG93IFdGTCBpbiBwbGFjZSBvZiBtZXRob2QKIAlERUNMX05BTUUgZHVyaW5nIG1ldGhvZCBkZWZpbml0aW9uIGNoZWNrCgoxOTk4LTEwLTA5ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAoZGVjb2RlX3NpZ25hdHVyZV9waWVjZSk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jX2RlY2wpOiBVc2UgaXQuICBBZGRlZCBgbmFtZV9vdmVycmlkZScgYXJndW1lbnQuCgkocHJpbnRfbWV0aG9kX2luZm8pOiBVc2UgbmFtZV9vdmVycmlkZSBhcmd1bWVudCB0byBwcmludF9jX2RlY2wuCgkoc2Vlbl9maWVsZHMpOiBSZW1vdmVkLgoJKHByaW50X2ZpZWxkX2luZm8pOiBEb24ndCB1cGRhdGUgc2Vlbl9maWVsZHMuCgkoc3RydWN0IG1ldGhvZF9uYW1lKTogTmV3IHN0cnVjdHVyZS4KCShtZXRob2RfbmFtZV9saXN0KTogTmV3IGdsb2JhbC4KCShwcmludF9tZXRob2RfaW5mbyk6IEFkZCBuZXcgbWV0aG9kIHRvIGxpc3Qgb2YgbWV0aG9kcy4KCShuYW1lX2lzX21ldGhvZF9wKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2ZpZWxkX2luZm8pOiBJZiBmaWVsZCBuYW1lIGhhcyBzYW1lIG5hbWUgYXMgbWV0aG9kLCB0aGVuCgljaGFuZ2UgZmllbGQgbmFtZS4KCShwcm9jZXNzX2ZpbGUpOiBQYXJzZSBtZXRob2RzIGJlZm9yZSBmaWVsZHMuCgkoZmllbGRfcGFzcyk6IE5ldyBnbG9iYWwuCgkoSEFORExFX0VORF9GSUVMRCk6IFRha2UgZmllbGRfcGFzcyBpbnRvIGFjY291bnQuCgpXZWQgT2N0ICA3IDEyOjEwOjQ4IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChrZXl3b3JkLmgpOiBBZGQgLUwgS1ItQyAtRiAnLCAwJyBmbGFncyB0byBncGVyZi4KCShrZXl3b3JkLmgpOiBSZWdlbmVyYXRlIHVzaW5nIGdwZXJmIDIuNy4xICgxOTk4MTAwNiBlZ2NzKS4KClNhdCBPY3QgIDMgMTM6Mjk6NDYgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBqdnNwZWMuYzogRml4IGJ1ZyBpbiBqdmdlbm1haW5fc3BlYyBwYXRjaC4KCkZyaSBPY3QgIDIgMTc6MjI6NTIgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobGFuZy5vOik6IEluc3RhbGwgZGVwZW5kZW5jeSBvbiBqYXZhLXRyZWUuZGVmLgoJKiBkZWNsLmMgKHNvZnRfZXhjZXB0aW9uaW5mb19jYWxsX25vZGUpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRml4ZWQgaW5kZW50YXRpb24uIHNvZnRfYmFkYXJyYXlpbmRleF9ub2RlCiAJdGFrZXMgZXh0cmEgaW50ZWdlciBhcmd1bWVudC4gc29mdF9leGNlcHRpb25pbmZvX2NhbGxfbm9kZQogCWluaXRpYWxpemVkLgoJKiBleGNlcHQuYyAoamF2YV9zZXRfZXhjZXB0aW9uX2xhbmdfY29kZSk6IE5ldyBmdW5jdGlvbgoJKG1ldGhvZF9pbml0X2V4Y2VwdGlvbnMpOiBDYWxsZWQgaGVyZS4KCShwcmVwYXJlX2VoX3RhYmxlX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBDYWxsZWQgaGVyZS4KCSogZXhwci5jIChidWlsZF9qYXZhX3Rocm93X291dF9vZl9ib3VuZHNfZXhjZXB0aW9uKTogTm93IGZlYXR1cmVzCiAJb25lIGFyZ3VtZW50LiBNb2RpZmllZCBnZW5lcmF0aW9uIG9mIGNhbGwgdG8KIAlzb2Z0X2JhZGFycmF5aW5kZXhfbm9kZSB0byB1c2UgbmV3IGFyZ3VtZW50LgoJKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBQYXNzIGZhdWx0eSBpbmRleCB2YWx1ZSB0bwogCWJ1aWxkX2phdmFfdGhyb3dfb3V0X29mX2JvdW5kc19leGNlcHRpb24uCgkoZ2VuZXJhdGVfbmFtZSk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBOZXcgbG9jYWwgdmFyaWFibGVzIG5vZGUsIGN1cnJlbnQsCiAJaGFzX2ZpbmFsbHlfcC4gRXhwYW5kIFRSWV9FWFBSIG5vZGUuCgkocHJvY2Vzc19qdm1faW5zdHJ1Y3Rpb24pOiBSZXBsYWNlIHRvcCBvZiB0aGUgc3RhY2sgd2l0aCB0aHJvd24KIAlvYmplY3QgcmVmZXJlbmNlIHdoZW4gZW50ZXJpbmcgZXhjZXB0aW9uIGhhbmRsZXIuCgkqIGphdmEtdHJlZS5kZWYgKFRSWV9FWFBSLCBDQVRDSF9FWFBSLCBGSU5BTExZX0VYUFIpOiBOZXcgSmF2YQogCXNwZWNpZmljIHRyZWUgY29kZXMuCgkqIGphdmEtdHJlZS5oIChzb2Z0X2V4Y2VwdGlvbmluZm9fY2FsbF9ub2RlKTogRGVjbGFyYXRpb24gb2YgbmV3CiAJZ2xvYmFsLgoJKERFQ0xfU1BFQ0lGSUNfQ09VTlQpOiBOZXcgbWFjcm8uCgkocHJlcGFyZV9laF90YWJsZV90eXBlLCBqYXZhX3NldF9leGNlcHRpb25fbGFuZ19jb2RlLAogCWdlbmVyYXRlX25hbWUpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKG1hdGNoX2phdmFfbWV0aG9kKTogRGVjbGFyYXRpb24gZGVsZXRlZC4KCShGSU5BTExZX0VYUFJfTEFCRUwsIEZJTkFMTFlfRVhQUl9CTE9DSywgQ0FUQ0hfRVhQUl9HRVRfRVhQUik6IE5ldwogCW1hY3Jvcy4KCSogbGV4LmMgKFRSWV9USywgQ0FUQ0hfVEspOiBHZW5lcmF0ZSBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KCSogcGFyc2UuaCAocmVkZWZpbml0aW9uX2Vycm9yLCByZWZpbmVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QsCiAJY2FuX2Nhc3RfdG9fcCk6IEZ1bmN0aW9uIGRlY2xhcmF0aW9uIHJlbW92ZWQuCgkoY2xhc3NpdGZfcmVkZWZpbml0aW9uX2Vycm9yLCB2YXJpYWJsZV9yZWRlZmluaXRpb25fZXJyb3IsCiAJcGFyc2VfamRrMV8xX2Vycm9yLCBmaW5kX2FwcGxpY2FibGVfYWNjZXNzaWJsZV9tZXRob2RzX2xpc3QsCiAJZmluZF9tb3N0X3NwZWNpZmljX21ldGhvZHNfbGlzdCwgYXJndW1lbnRfdHlwZXNfY29udmVydGlibGUsCiAJZW50ZXJfYV9ibG9jaywgdmFsaWRfYnVpbHRpbl9hc3NpZ25jb252X2lkZW50aXR5X3dpZGVuaW5nX3AsCiAJdmFsaWRfY2FzdF90b19wLCB2YWxpZF9tZXRob2RfaW52b2NhdGlvbl9jb252ZXJzaW9uX3AsCiAJdHJ5X3JlZmVyZW5jZV9hc3NpZ25jb252LCBhZGRfc3RtdF90b19jb21wb3VuZCwKIAlidWlsZF9qdW1wX3RvX2ZpbmFsbHksIGJ1aWxkX3RyZWVfbGlzdCwgcGF0Y2hfdHJ5X3N0YXRlbWVudCwKIAlqYXZhX2dldF9jYXRjaF9ibG9jayk6IE5ldyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkqIHBhcnNlLnkgKHN0cmluZ19idWZmZXJfdHlwZSk6IEdsb2JhbCB2YXJpYWJsZSBkZWxldGVkLgoJKGdyb3VwX29mX2xhYmVscywgY2F0Y2hlcywgY2F0Y2hfY2xhdXNlLCBjYXRjaF9jbGF1c2VfcGFyYW1ldGVyLAogCWZpbmFsbHkpOiBSdWxlcyB0YWdnZWQgPG5vZGU+LgoJKFRSWV9USywgQ0FUQ0hfVEspOiBUb2tlbiB0YWdnZWQgPG9wZXJhdG9yPi4KCShjbGFzc19ib2R5X2RlY2xhcmF0aW9uOiwgY2xhc3NfbWVtYmVyX2RlY2xhcmF0aW9uOiwKIAlmb3JtYWxfcGFyYW1ldGVyOiwgZXhwbGljaXRfY29uc3RydWN0b3JfaW52b2NhdGlvbjosCiAJaW50ZXJmYWNlX21lbWJlcl9kZWNsYXJhdGlvbjosIGNvbnN0YW50X2RlY2xhcmF0aW9uOiwKIAlwcmltYXJ5X25vX25ld19hcnJheTosIGNsYXNzX2luc3RhbmNlX2NyZWF0aW9uX2V4cHJlc3Npb246LAogCWFycmF5X2NyZWF0aW9uX2V4cHJlc3Npb246KTogSXNzdWUgZXJyb3Igb24gdW5zdXBvcnRlZCBKREsxLjEKIAlmZWF0dXJlcy4KCSh0cnlfc3RhdGVtZW50OiwgY2F0Y2hlczosIGZpbmFsbHk6KTogRGVmaW5lIGFjdGlvbnMuCgkoY2F0Y2hfY2xhdXNlX3BhcmFtZXRlcik6IE5ldyBydWxlLgoJKGNhdGNoX2NsYXVzZTopOiBVc2UgbmV3IHJ1bGUgY2F0Y2hfY2xhdXNlX3BhcmFtZXRlci4KCShwYXJzZV9qZGsxXzFfZXJyb3IpOiBOZXcgZnVuY3Rpb24uCgkocmVkZWZpbml0aW9uX2Vycm9yKTogUmVuYW1lZCBjbGFzc2l0Zl9yZWRlZmluaXRpb25fZXJyb3IuCgkodmFyaWFibGVfcmVkZWZpbml0aW9uX2Vycm9yKTogTmV3IGZ1bmN0aW9uLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IENhbGwKIAljbGFzc2l0Zl9yZWRlZmluaXRpb25fZXJyb3IuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogQWRkZWQgZXJyb3IgbWVzc2FnZSBvbiBKREVQX1RZUEU6IGNhc2UuCgkoY29tcGxldGVfY2xhc3NfcmVwb3J0X2Vycm9ycyk6IEZpeGVkIGluZGVudGF0aW9uLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogQ2FsbCB2YXJpYWJsZV9yZWRlZmluaXRpb25fZXJyb3IuCgkoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IENhbGwgamF2YV9zZXRfZXhjZXB0aW9uX2xhbmdfY29kZSBhbmQKIAllbWl0X2hhbmRsZXJzIHdoZXJlIGFwcHJvcHJpYXRlLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogQ2FsbCBhZGRfc3RtdF90b19ibG9jay4KCShhZGRfc3RtdF90b19ibG9jayk6IE5ldyBmdW5jdGlvbi4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IEZpeGVkIG91dHNpZGUgY29tbWVudC4gbmV3IGxvY2FsIHZhcmlhYmxlCiAJY2FuZGljYXRlcy4gIENhbGwgZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0IGFuZAogCWZpbmRfbW9zdF9zcGVjaWZpY19tZXRob2RzX2xpc3Qgd2hlbiBzZWFyY2hpbmcgZm9yIGEKIAltZXRob2QuIE1vZGlmaWVkIGVycm9yIHJlcG9ydCB0byBsaXN0IHBvc3NpYmxlIGNhbmRpZGF0ZXMgd2hlbgogCWFwcGxpY2FibGUuCgkoZmluZF9hcHBsaWNhYmxlX2FjY2Vzc2libGVfbWV0aG9kc19saXN0LAogCWZpbmRfbW9zdF9zcGVjaWZpY19tZXRob2RzX2xpc3QsIGFyZ3VtZW50X3R5cGVzX2NvbnZlcnRpYmxlKTogTmV3CiAJZnVuY3Rpb24uCgkocmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogRnVuY3Rpb24gZGVsZXRlZC4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBIYW5kbGUgVFJZX0VYUFIuIEFSUkFZX1JFRiBoYW5kbGluZzogc2F2ZQogCWV4cHIgKGlmIGFwcGxpY2FibGUpIGJlZm9yZSBjYWxsaW5nIHBhdGNoX2FycmF5X3JlZi4KCShidWlsZF9leHByX2Jsb2NrKTogRml4ZWQgQkxPQ0tfRVhQUl9CT0RZIGFzc2lnbm1lbnQuCgkoZW50ZXJfYmxvY2spOiBGaXhlZCBjb21tZW50LgoJKGVudGVyX2FfYmxvY2spOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfYXNzaWdubWVudCk6IFJlb3JnYW5pemVkLiBDYWxsIHRyeV9yZWZlcmVuY2VfYXNzaWduY29udiBmb3IKIAlyZWZlcmVuY2VzLiBDYWxsIHZhbGlkX2Nhc3RfdG9fcCBpbnN0ZWFkIG9mIGNhbl9jYXN0X3RvX3AuCgkodHJ5X3JlZmVyZW5jZV9hc3NpZ25jb252LAogCXZhbGlkX2J1aWx0aW5fYXNzaWduY29udl9pZGVudGl0eV93aWRlbmluZ19wKTogTmV3IGZ1bmN0aW9ucy4KCSh2YWxpZF9yZWZfYXNzaWduY29udl9jYXN0X3ApOiBGaXhlZCBpbnZlcnRlZCB0ZXN0IG9uIENMQVNTX0ZJTkFMLgoJKHZhbGlkX2Nhc3RfdG9fcCwgdmFsaWRfbWV0aG9kX2ludm9jYXRpb25fY29udmVyc2lvbl9wKTogTmV3CiAJZnVuY3Rpb25zLgoJKGJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uKTogRG9uJ3QgcmVzb2x2ZSBTdHJpbmdCdWZmZXIuCgkocGF0Y2hfY2FzdCk6IEZpeGVkIGludmVydGVkIGFyZ3VtZW50cy4KCShwYXRjaF9hcnJheV9yZWYpOiBDb2RlIHRvIHNhdmUgYXJyYXkgZXhwciBkZWxldGVkLiBDYWxsCiAJdmFsaWRfY2FzdF90b19wIGluc3RlYWQgb2YgY2FuX2Nhc3RfdG9fcC4KCShnZW5lcmF0ZV9sYWJlbGVkX2Jsb2NrKTogQ2FsbCBnZW5lcmF0ZV9uYW1lLgoJKGJ1aWxkX2p1bXBfdG9fZmluYWxseSwgYnVpbGRfdHJ5X3N0YXRlbWVudCwgamF2YV9nZXRfY2F0Y2hfYmxvY2ssCiAJcGF0Y2hfdHJ5X3N0YXRlbWVudCk6IE5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChtYXRjaF9qYXZhX21ldGhvZCk6IEZ1bmN0aW9uIGRlbGV0ZWQuCgpGcmkgT2N0ICAyIDEzOjQ4OjM2IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSoganZzcGVjLmM6IGp2Z2VubWFpbl9zcGVjIHVzZXMgZGlmZmVyZW50IHRlbXBvcmFyeSBmaWxlIG5hbWVzLgoKRnJpIE9jdCAgMiAxMjo1MDoxOSAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIGp2c3BlYy5jIChsYW5nX3NwZWNpZmljX2RyaXZlcik6IEZhaWwgaWYgdXNlciBzcGVjaWZpZXMKCS0tbWFpbj0gd2hlbiBub3QgbGlua2luZy4KCk1vbiBTZXAgMjggMTM6NDg6MzMgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogUHVzaCB2YWx1ZSBmb3IgYHRocmVhZCcgZmllbGQuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGRlZCBgdGhyZWFkJyBmaWVsZCB0byBjbGFzcy4KCgkqIGNsYXNzLmMgKGFkZF9maWVsZCk6IEFsd2F5cyBtYWtlIHN0YXRpYyBmaWVsZHMgZXh0ZXJuYWxseQoJdmlzaWJsZS4KClNhdCBTZXAgMjYgMDg6MjI6NDcgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXRocm93LAoJYnVpbGRfamF2YV90aHJvd19vdXRfb2ZfYm91bmRzX2V4Y2VwdGlvbiwgZXhwYW5kX2ludm9rZSwKCWJ1aWxkX25ld2FycmF5LCBleHBhbmRfamF2YV9tdWx0aWFuZXdhcnJheSwgYnVpbGRfamF2YV9tb25pdG9yKToKCVVwZGF0ZSBjb21tZW50cyB0byByZWZsZWN0IF9Kdl8qIGZ1bmN0aW9uIG5hbWVzLgoKRnJpIFNlcCAyNSAxNjowMzowMiAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgREVDTF9SRVNVTFQgaXMgYWx3YXlzIHByb21vdGVkLgoJKiBkZWNsLmMgKHN0YXJ0X2phdmFfbWV0aG9kKTogIEhhbmRsZSBQUk9NT1RFX1BST1RPVFlQRVMgdGFyZ2V0IG1hY3JvLgoJKiBwYXJzZS55IChleHBhbmRfc3RhcnRfamF2YV9tZXRob2QpOiAgTGlrZXdpc2UuCgpUaHUgU2VwIDI0IDEyOjIwOjM1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZXhwci5jIChwb3BfYXJndW1lbnRzKTogIEhhbmRsZSBQUk9NT1RFX1BST1RPVFlQRVMgdGFyZ2V0IG1hY3JvLgoKCSogY2xhc3MuYyAocHVzaF9jbGFzcyk6ICBJREVOVElGSUVSX1NJR05BVFVSRV9UWVBFIGlzIG5vdyBQT0lOVEVSX1RZUEUuCgkoYWRkX2ZpZWxkKTogIE5vIGxvbmdlciBuZWVkIHRvIGNvbnZlcnQgZnJvbSBSRUNPUkRfVFlQRSB0byBwb2ludGVyLAoJKiBleHByLmM6ICBSZW1vdmUgbm8tbG9uZ2VyLW5lZWRlZCBjYWxscyB0byBwcm9tb3RlX3R5cGUuCgkqIGRlY2wuYyAoZ2l2ZV9uYW1lX3RvX2xvY2Fscyk6ICBMaWVrd2lzZS4KCSogamNmLXBhcnNlLmMgKGdldF9jbGFzc19jb25zdGFudCk6ICBDb21wZW5zYXRlIGZvciBuZXcgc2lnbmF0dXJlcy4KCSogcGFyc2UueTogIEFkZC9yZW1vdmUgcHJvbW90ZV90eXBlIGNhbGxzIGFzIGFwcHJvcHJpYXRlLgoJKiB0eXBlY2suYyAocGFyc2Vfc2lnbmF0dXJlX3R5cGUpOiAgUmV0dXJucyBQT0lOVEVSX1RZUEUgZm9yIG9iamVjdHMuCgkocGFyc2Vfc2lnbmF0dXJlX3N0cmluZyk6ICBMaWtld2lzZS4KIAkoYnVpbGRfamF2YV9hcnJheV90eXBlKTogIEZpeCBmb3Igbm93IHNpZ25hdHVyZSBjb252ZW5pb25zLgoKCSogbGV4LmMgKGphdmFfbGV4KTogIEZpeCAoZnJvbSBBbGV4KSBmb3IgSkMxX0xJVEUgcHJvYmxlbS4KCldlZCBTZXAgMjMgMTQ6NDk6MzUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5pdF9jbGFzc19wcm9jZXNzaW5nKTogbGliamF2YSBmdW5jdGlvbiByZW5hbWVkIHRvCglfSnZfUmVnaXN0ZXJDbGFzcy4KClR1ZSBTZXAgMjIgMTI6MDA6MDIgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IE5ldyBjYXNlIGZvciBTV0lUQ0hfRVhQUi4KCSogamF2YS10cmVlLmRlZjogRml4ZWQgREVGVFJFRUNPREUgdGhpcmQgYXJndW1lbnQuCgkoVU5BUllfUExVU19FWFBSLCBORVdfQVJSQVlfRVhQUiwgTkVXX0NMQVNTX0VYUFIsIFRISVNfRVhQUiwKIAlDQVNFX0VYUFIsIERFRkFVTFRfRVhQUik6IE5ldyB0cmVlIGNvZGVzIGZvciBKYXZhLgoJKiBqYXZhLXRyZWUuaDogKElTX0NSQUZURURfU1RSSU5HX0JVRkZFUl9QKTogTmV3IG1hY3JvLgoJKEpBVkFfVU5BUllfUExVU19FWFBSLCBKQVZBX05FV19BUlJBWV9FWFBSLCBKQVZBX05FV19DTEFTU19FWFBSLAogCUpBVkFfVEhJU19FWFBSKTogTm93IHJlcGxhY2VkIGJ5IHRyZWUgY29kZSBkZWZpbml0aW9ucy4KCShDQUxMX0NPTlNUUlVDVE9SX1ApOiBOb3cgdXNlcyBORVdfQ0xBU1NfRVhQUi4KCSogbGFuZy5jIChqYXZhX3RyZWVfY29kZV90eXBlLCBqYXZhX3RyZWVfY29kZV9sZW5ndGgsCiAJamF2YV90cmVlX2NvZGVfbmFtZSk6IE5ldyBhcnJheXMuCgkobGFuZ19pbml0KTogQXBwZW5kIEphdmEgdHJlZSBub2RlIGRlZmluaXRpb25zIHRvIEdjYyBvbmVzLgoJKiBsZXguYyAoZXhwcmVzc2lvbl9vYnN0YWNrKTogRGVjbGFyZWQgYXMgZXh0ZXJuIHdoZW4gSkMxX0xJVEUKIAlkZWZpbmVkLgoJKGphdmFfaW5pdF9sZXgpOiBJbml0aWFsaXplIHdmbF9hcHBlbmQsIHdmbF9zdHJpbmdfYnVmZmVyLAogCXdmbF90b19zdHJpbmcuCgkoamF2YV9sZXgpOiBBbGxvdyBkZWNsYXJhdGlvbiBvZiBlbXB0eSBzdHJpbmcgY29uc3RhbnRzLiBSZXRhaW4KIAlsb2NhdGlvbiBpbmZvcm1hdGlvbiBvbiBDQVNFX1RLIGFuZCBERUZBVUxUX1RLLgoJKiBwYXJzZS5oIChKRkxPQVRfVFlQRV9QLCBKSU5URUdSQUxfVFlQRV9QLCBKTlVNRVJJQ19UWVBFX1AsCiAJSlBSSU1JVElWRV9UWVBFX1AsIEpTVFJJTkdfVFlQRV9QLCBKU1RSSU5HX1AsIEpSRUZFUkVOQ0VfVFlQRV9QKToKIAlNb2RpZmllZCB0byBiZSBtb3JlIHJvYnVzdC4KCShCVUlMRF9BUFBFTkQsIEJVSUxEX1NUUklOR19CVUZGRVIpOiBOZXcgbWFjcm9zLgoJKGJ1aWxkX25ld19pbnZvY2F0aW9uLCB0cnlfYnVpbHRpbl9hc3NpZ25jb252LAogCXBhdGNoX3N3aXRjaF9zdGF0ZW1lbnQsIHN0cmluZ19jb25zdGFudF9jb25jYXRlbmF0aW9uLAogCWJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uLCBwYXRjaF9zdHJpbmdfY3N0LCBwYXRjaF9zdHJpbmcsCiAJamF2YV9leHBhbmRfc3dpdGNoKTogTmV3IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KCSogcGFyc2UueTogUnVsZXMgcmVsYXRlZCB0byBzd2l0Y2ggYW5kIEVIIHRhZ2dlZCA8bm9kZT4uCgkobGFiZWxfaWQpOiBTZXQgdG8gTlVMTF9UUkVFCgkod2ZsX3N0cmluZ19idWZmZXIsIHdmbF9hcHBlbmQsIHdmbF90b19zdHJpbmcpOiBOZXcgc3RhdGljIGdsb2JhbAogCXRyZWUgbm9kZXMuCgkodGhpc19vcl9zdXBlcjopOiBGaXhlZCBpbmRlbnRhdGlvbi4KCShzdGF0ZW1lbnQ6LCBzdGF0ZW1lbnRfbnNpOiwgc3RhdGVtZW50X3dpdGhvdXRfdHJhaWxpbmdfc3Vic3RhdGVtZW50OiwKIAlzdGF0ZW1lbnRfZXhwcmVzc2lvbjopOiBSZW1vdmVkIGNhbGwgdG8gUlVMRSBvbiBhbGwgc3ViLXJ1bGVzLgoJKHN3aXRjaF9leHByZXNzaW9uOiwgc3dpdGNoX2xhYmVsczopOiBOZXcgcnVsZXMuCgkoc3dpdGNoX3N0YXRlbWVudDosIHN3aXRjaF9ibG9jazosIHN3aXRjaF9ibG9ja19zdGF0ZW1lbnRfZ3JvdXBzOiwKIAlzd2l0Y2hfYmxvY2tfc3RhdGVtZW50X2dyb3VwOiwgc3dpdGNoX2xhYmVsczosIHN3aXRjaF9sYWJlbDopOgogCURlZmluZWQgYWN0aW9ucy4KCSh0aHJvd19zdGF0ZW1lbnQ6LCBzeW5jaHJvbml6ZWRfc3RhdGVtZW50OiwgdHJ5X3N0YXRlbWVudDopOgogCURlZmluZWQgdGVtcG9yYXJ5IGFjdGlvbnMuCgkoY2xhc3NfaW5zdGFuY2VfY3JlYXRpb25fZXhwcmVzc2lvbjopOiBDYWxsCiAJYnVpbGRfbmV3X2ludm9jYXRpb24uIEZpeGVkIGluZGVudGF0aW9uLgoJKGZpZWxkX2FjY2Vzcyk6IEZpeGVkIGluZGVudGF0aW9uLgoJKG1ldGhvZF9pbnZvY2F0aW9uKTogTGlrZXdpc2UuCgkobWFrZV9xdWFsaWZpZWRfcHJpbWFyeSk6IFVzZSBUSElTX0VYUFIuCgkocmVzb2x2ZV9xdWFsaWZpZWRfZXhwcmVzc2lvbl9uYW1lKTogVXNlIE5FV19DTEFTU19FWFBSLiBXaGVuCiAJcmVzb2x2aW5nIGZyb20gU1VQRVIsIHNldCAqdHlwZV9mb3VuZC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogVXNlIE5FV19DTEFTU19FWFBSLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFJlbW92ZWQgdW51c2VkIGxvY2FsIHZhcmlhYmxlIGBsb2NhdGlvbicuIENhc2UKIAlmb3IgU1dJVENIX0VYUFIsIHNoYXJpbmcgY29kZSB3aXRoIExPT1BfRVhQUi4gVXNlIE5FV19BUlJBWV9FWFBSLAogCU5FV19DTEFTU19FWFBSLCBVTkFSWV9QTFVTX0VYUFIgYW5kIFRISVNfRVhQUi4gTmV3IHN0cmluZyBoYW5kbGluZwogCW9uIE1PRElGWV9FWFBSOiBhbmQgYWxsIGJpbmFyeSBvcGVyYXRvciB0cmVlIGNvZGUgY2FzZXMuIFJlbW92ZWQKIAlTVFJJTkdfQ1NUOiBjYXNlLiBkZWZhdWx0OiBjaGVja3MgZm9yIHBhdGNoYWJsZSBzdHJpbmdzLgoJKGNvbXBsZXRlX2Z1bmN0aW9uX2FyZ3VtZW50cyk6IFRyYW5zZm9ybSBzdHJpbmcgY29uc3RhbnQgb3IKIAljcmFmdGVkIFN0cmluZ0J1ZmZlciBpZiBuZWNlc3NhcnkuCgkoYnVpbGRfbWV0aG9kX2ludm9jYXRpb24pOiBGaXhlZCBjb21tZW50cy4KCShidWlsZF9uZXdfaW52b2NhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShwYXRjaF9hc3NpZ25tZW50KTogQ2FsbCB0cnlfYnVpbHRpbl9hc3NpZ25jb252IHRvIGZpZ3VyZSBhIHZhbGlkCiAJYXNzaWdubWVudCBjb252ZXJzaW9uIGJldHdlZW4gYnVpbHRpbiB0eXBlcy4KCSh0cnlfYnVpbHRpbl9hc3NpZ25jb252KTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2Jpbm9wKTogVXNlIFVSU0hJRlRfRVhQUiBkaXJlY3RseSB0byBjYWxsIGJ1aWxkLgoJKG9wZXJhdG9yX3N0cmluZyk6IFVzZSBVTkFSWV9QTFVTX0VYUFIuCgkocGF0Y2hfYmlub3ApOiBVc2UgVU5BUllfUExVU19FWFBSLiBIYW5kbGUgc3RyaW5nIGNvbmNhdGVuYXRpb24KIAlvcGVyYXRvci4KCShkb19tZXJnZV9zdHJpbmdfY3N0ZSwgbWVyZ2Vfc3RyaW5nX2NzdGUsCiAJc3RyaW5nX2NvbnN0YW50X2NvbmNhdGVuYXRpb24sIGJ1aWxkX3N0cmluZ19jb25jYXRlbmF0aW9uLAogCXBhdGNoX3N0cmluZywgcGF0Y2hfc3RyaW5nX2NzdCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF91bmFyeV9vcCk6IFVzZSBVTkFSWV9QTFVTX0VYUFIgYW5kIENPTlZFUlRfRVhQUi4KCShwYXRjaF91bmFyeW9wKTogTGlrZXdpc2UuIE5ldyB0ZXN0IG9mIHZhbGlkICsrLy0tIG9wZXJhbmRzLgoJKGJ1aWxkX25ld2FycmF5X25vZGUpOiBVc2UgTkVXX0FSUkFZX0VYUFIuCgkoYnVpbGRfdGhpcyk6IFVzZSBUSElTX0VYUFIuCgkoYnVpbGRfcmV0dXJuKTogRW5hYmxlIGRlYnVnIGluZm9ybWF0aW9uIG9uIHJldHVybiBzdGF0ZW1lbnQuCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQpOiBMaWtld2lzZS4KCShjb21wbGV0ZV9sYWJlbGVkX3N0YXRlbWVudCk6IEZpeGVkIHJlbGF0ZWQgY29tbWVudC4KCShidWlsZF9sb29wX2JvZHkpOiBGaXhlZCBjb21tZW50LgoJKGJ1aWxkX2JjX3N0YXRlbWVudCk6IEVuYWJsZSBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBicmVhay9jb250aW51ZQogCXN0YXRlbWVudHMuCgkocGF0Y2hfYmNfc3RhdGVtZW50KTogRml4ZWQgdHlwb3MuIEhhbmRsZSBTV0lUQ0ggc3RhdGVtZW50CiAJY29udGV4dC4KCShwYXRjaF9zd2l0Y2hfc3RhdGVtZW50LCBjYXNlX2lkZW50aXR5LCBqYXZhX2V4cGFuZF9zd2l0Y2gpOiBOZXcKIAlmdW5jdGlvbnMuCgpNb24gU2VwIDIxIDEzOjIxOjM1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogYnVmZmVyLmggKEJVRkZFUl9JTklUKTogIE5ldyBtYWNyby4KCSogamNmLXdyaXRlLmMgKHN0cnVjdCBqY2ZfcGFydGlhbCk6ICBOZXcgdHlwZS4gIFB1dCBnbG9iYWwgc3R1ZmYgaGVyZS4KCVBhc3MgKHN0cnVjdCBqY2ZfcGFydGlhbCAqc3RhdGUpIHRvIG1vc3QgZnVuY3Rpb25zLgoJKGpjZl9ibG9jaywgamNmX3JlbG9jYXRpb24pOiAgTmV3IHR5cGVzLgoJU3VwcG9ydCBsYWJlbHMsIGJyYW5jaGVzLCBjb25kaXRpb25hbHMsIGxvb3BzLgoKTW9uIFNlcCAyMSAxNTowODo0OCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKElOVF9UWVBFX1NJWkUpOiBEZWZpbmUgYXMgQklUU19QRVJfV09SRCBpZiBub3QgZGVmaW5lZC4KCk1vbiBTZXAgMjEgMTM6MjE6MzUgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGludGVnZXJfdHlwZV9ub2RlKTogIE1ha2UgaXQgaGF2ZSBJTlRfVFlQRV9TSVpFLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVXNlIGludF90eXBlX25vdCAoMzIgYml0cyksCglub3QgaW50ZWdlcl90eXBlX25vZGUgKElOVF9UWVBFX1NJWiBiaXRzKS4KCgkqIHBhcnNlLnkgKHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50KTogIEFjY2VwdCBwcm9tb3RlZF9ib29sZWFuX3R5cGVfbm9kZS4KCgkqIGpjZi1yZWFkZXIuYyAoZ2V0X2F0dHJpYnV0ZSk6ICBOZXcgSEFORExFX0VYQ0VQVElPTl9UQUJMRSBob29rLgoJKiBqY2YtZHVtcC5jIChwcmludF9leGNlcHRpb25fdGFibGUpOiAgTmV3IGZ1bmN0aW9uLgoJKGRpc2Fzc2VtYmxlX21ldGhvZCk6ICBCZXR0ZXIgaGFuZGxpbmcgb2Ygd2lkZSBpbnN0cnVjdGlvbnMuCglNYWtlIG1vcmUgcm9idXN0IGZvciBiYWQgaW5wdXQuCgpXZWQgU2VwIDMwIDIwOjUzOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGpjZi13cml0ZS5jIChPUDIsIE9QNCk6IFVzZSAiX2kiLCBub3QgIl9JIiB0byBhdm9pZCBwcm9ibGVtcyBvbgoJRnJlZUJTRC4KClRodSBTZXAgMTcgMTk6NDU6MDEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGpjZi1kdW1wLCBqdmdlbm1haW4pOiBMaW5rIGluIG1lbW1vdmUubyB0b28uCgpUaHUgU2VwIDE3IDE2OjIxOjUyIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICgkKFBBUlNFX0gpKTogUmVtb3ZlZCB0YXJnZXQuCgpUaHUgU2VwIDE3IDAxOjU3OjA3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiBBZGQgbWVtbW92ZS5vCgkobWVtbW92ZS5vKTogTmV3IHRhcmdldCAmIHJ1bGVzLgoKVHVlIFNlcCAxNSAyMzoyMTo1NSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiBEb24ndCBnZW5lcmF0ZSBhIGNhbGwgdG8gdGhlIGNsYXNzIGluaXQKCWNvZGUuCgpNb24gU2VwIDE0IDEwOjE0OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBBZGQgbWFueSBtaXNzaW5nIGRlcGVuZGVuY2llcy4KCSogYnVmZmVyLmMsIGNsYXNzLmMsIGNvbnN0YW50cy5jLCBkZWNsLmM6IFVzZSBzeXN0ZW0uaCBhbmQgdG9wbGV2LmgKCWFzIGFwcHJvcHJpYXRlLgoJKiBleGNlcHQuYywgZXhwci5jLCBqY2YtaW8uYyBqY2YtcGFyc2UuYywgamNmLXdyaXRlLmM6IExpa2V3aXNlLgoJKiBqdmdlbm1haW4uYyBsYW5nLmMgbWFuZ2xlLmMgdHlwZWNrLmMgdmVyaWZ5LmM6IExpa2V3aXNlLgoKRnJpIFNlcCAxMSAxNDowNToyMSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiAgSWYgbWV0aG9kIGlzIHN0YXRpYyAoYW5kCglub3QgcHJpdmF0ZSkgY2FsbCBfSnZfSW5pdENsYXNzLgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgRG9uJ3QgY2FsbCBidWlsZF9jbGFzc19pbml0LgoKCSoganZzcGVjLmMgKGp2Z2VubWFpbl9zcGVjKTogIEZpeCBzcGVjIGZvciBnZW5lcmF0ZWQgLm8gZmlsZS4KClRodSBTZXAgMTAgMTA6MzM6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZS1sYW5nLmluIChHQ0opOiBEZWZpbmUgYmVmb3JlIHVzaW5nLgoKV2VkIFNlcCAgOSAyMToyMzoxMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnamF2YWguYyAoamF2YV9ub19hcmd1bWVudCk6IFJlbmFtZWQgZnJvbSBub19hcmd1bWVudCB0byBhdm9pZAoJbG9zaW5nIGR1ZSB0byBuYW1lc3BhY2UgcG9sbHV0aW9uIGluIEdOVSBnZXRvcHQuaAoKV2VkIFNlcCAgOSAxMzozMzozOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGphdmEuYWxsLmJ1aWxkKTogRG9uJ3QgbWVudGlvbiBqdmdlbm1haW4gb3IgZ2NqaC4KCShqYXZhLmFsbC5jcm9zcyk6IExpa2V3aXNlLgoJKGphdmEucmVzdC5lbmNhcCk6IExpa2V3aXNlLgoKVHVlIFNlcCAgOCAxMDozNDowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnamF2YWguYyAocHJpbnRfY2xhc3NfZGVjbHMpOiBGaXggdGhpbmtvIGluIGFyZ2xpc3QKCSogamN2LWlvLmMgKGZpbmRfY2xhc3NmaWxlKTogU2ltaWxhcmx5LgoKTW9uIFNlcCAgNyAxMzo1OTo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBVcGRhdGUgZm9yIHJlY2VudCB0b3BsZXZlbCBnY2MgY2hhbmdlcy4KClNhdCBTZXAgIDUgMTY6MDg6MDEgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhLm1haW50YWluZXItY2xlYW4pOiBEb24ndCByZW1vdmUgcGFyc2UuaC4KCShqYXZhLm1vc3RseWNsZWFuKTogUmVtb3ZlIHBhcnNlLmMgYW5kIHBhcnNlLXNjYW4uYywgbm90IHBhcnNlLmguCgkqIE1ha2VmaWxlLmluIChQQVJTRV9DKTogTmV3IG1hY3JvLgoJKFBBUlNFX0gpOiBMaWtld2lzZS4KCShQQVJTRV9TQ0FOX0MpOiBMaWtld2lzZS4KCSgkKFBBUlNFX0MpKTogVGFyZ2V0IHJlbmFtZWQgZnJvbSBwYXJzZS5jLgoJKCQoUEFSU0VfU0NBTl9DKSk6IFRhcmdldCByZW5hbWVkIGZyb20gcGFyc2Utc2Nhbi5jLgoJKGNsZWFuKTogUmVtb3ZlIHBhcnNlLXNjYW4uYyBhcyB3ZWxsLgoJKHBhcnNlLm8pOiBEZXBlbmQgb24gJChQQVJTRV9DKS4KClNhdCBTZXAgIDUgMDg6NDg6NDAgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBSRUFETUUsIGxpY2Vuc2UudGVybXM6IFJlbW92ZWQuCgoJKiBNYWtlLWxhbmcuaW4sIE1ha2VmaWxlLmluLCBjbGFzcy5jLCBjb25maWctbGFuZy5pbiwgY29uc3RhbnRzLmMsCglkZWNsLmMsIGV4Y2VwdC5jLCBleHByLmMsIGdqYXZhaC5jLCBqYXZhLWV4Y2VwdC5oLCBqYXZhLXRyZWUuaCwKCWphdmFvcC5kZWYsIGphdmFvcC5oLCBqY2YtZHVtcC5jLCBqY2YtaW8uYywgamNmLXBhcnNlLmMsCglqY2YtcmVhZGVyLmMsIGpjZi13cml0ZS5jLCBqY2YuaCwganZnZW5tYWluLmMsIGp2c3BlYy5jLAoJa2V5d29yZC5ncGVyZiwga2V5d29yZC5oLCBsYW5nLW9wdGlvbnMuaCwgbGFuZy1zcGVjcy5oLCBsYW5nLmMsCglsZXguYywgbGV4LmgsIG1hbmdsZS5jLCBwYXJzZS1zY2FuLnksIHBhcnNlLmgsIHBhcnNlLnksIHR5cGVjay5jLAoJdmVyaWZ5LmMsIHpleHRyYWN0LmMsIHppcGZpbGUuaDogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQsCglhbmQgSmF2YSB0cmFkZW1hcmsgYXR0cmlidXRpb24uCgpGcmkgU2VwICA0IDEwOjQyOjA1IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBVc2UgZ2NqaCwgbm90IGdqYXZhaC4KCSogY29uZmlnLWxhbmcuaW4gKHN0YWdlc3R1ZmYpOiBVc2UgZ2NqaCwgbm90IGdqYXZhaC4KCSogTWFrZS1sYW5nLmluOiBDaGFuZ2VkIGdqYXZhaCB0byBnY2poIGV2ZXJ5d2hlcmUuCgpUaHUgU2VwICAzIDE4OjA0OjA5IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZ2phdmFoLmM6ICBTdXBwb3J0IG5ldyAtcHJlcGVuZCAtYWRkIC1hcHBlbmQgZmxhZ3MuCgkocHJpbnRfbWV0aG9kX2luZm8pOiAgTWV0aG9kIGlzIG5vdCB2aXJ0dWFsIGlmIGNsYXNzIGlzIGZpbmFsLgoKVGh1IFNlcCAgMyAxMjowMzo1MyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGp2LXNjYW4uYzogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkqIGtleXdvcmQuZ3BlcmY6IExpa2V3aXNlLgoJKiBrZXl3b3JkLmg6IExpa2V3aXNlLgoJKiBsZXguYzogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkoamF2YV9sZXgpOiBQdXNoIHVuaWNvZGUgYmFjayB3aGVuIHBhcnNpbmcgJzwnLgoJKiBsZXguaDogRml4ZWQgY29weXJpZ2h0IGFzc2lnbm1lbnQuCgkqIHBhcnNlLXNjYW4ueTogTGlrZXdpc2UuCgkqIHBhcnNlLmg6IEZpeGVkIGNvcHlyaWdodCBhc3NpZ25tZW50LgoJKGJ1aWxkX2RlYnVnYWJsZV9zdG10LCBjb21wbGV0ZV9mb3JfbG9vcCk6IE5ldyBmdW5jdGlvbiBwcm90b3R5cGVzLgoJKiBwYXJzZS55OiBGaXhlZCBjb3B5cmlnaHQgYXNzaWdubWVudC4KCShmb3Jfc3RhdGVtZW50Oik6IENhbGwgY29tcGxldGVfZm9yX2xvb3AuIFNldCBFWElUX0VYUFIgdG8gYmUKIAlzaXplX3plcm9fbm9kZSB3aGVuIGNvbXBsZXRpbmcgYSBsb29wIHdpdGggbm8gZXhpdCBjb25kaXRpb24uCgkoZm9yX3N0YXRlbWVudF9uc2k6KTogRGVmaW5lIGFjdGlvbi4KCShmb3JfaW5pdDosIGZvcl91cGRhdGU6KTogUmV0dXJuIHNpemVfemVyb19ub2RlIHdoZW4gZW1wdHkuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBDYWxsIGJ1aWxkX2RlYnVnYWJsZV9zdG10LgoJKGJ1aWxkX2RlYnVnYWJsZV9zdG10KTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2xvb3BfYm9keSk6IEJ1aWxkIGRlYnVnYWJsZSBzdGF0ZW1lbnQgYXJvdW5kIGxvb3AKIAljb25kaXRpb24gcGFydC4KCShjb21wbGV0ZV9sb29wX2JvZHkpOiBUYWtlIGludG8gYWNjb3VudCB0aGUgZGVidWdhYmxlIHN0YXRlbWVudAoJYXJvdW5kIHRoZSBFWElUX0VYUFIuCgkoY29tcGxldGVfbG9vcF9ib2R5KTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2V4aXRfZXhwcik6IEZpeGVkIGNvbmRpdGlvbiBpbnZlcnNpb24uCgpXZWQgU2VwICAyIDExOjUzOjU4IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoanZzcGVjLm8pOiBVc2UgR0NDX1RIUkVBRF9GSUxFIHRvIGNvbXB1dGUgY29ycmVjdAoJbmFtZSBvZiB0aHJlYWQgZGVmaW5lLgoJKiBqdnNwZWMuYyAoVEhSRUFEX05BTUUpOiBOZXcgbWFjcm8uCgkoR0NMSUIpOiBMaWtld2lzZS4KCShUSFJFQURMSUIpOiBMaWtld2lzZS4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IFJlY29nbml6ZSBhdHRlbXB0IHRvIGxpbmsgd2l0aCB0aHJlYWQKCWxpYnJhcnkgb3IgZ2MgbGlicmFyeS4gIFJlY29nbml6ZSAtbGphdmEgb24gY29tbWFuZCBsaW5lIHNvIGl0Cglpc24ndCBsaW5rZWQgYWdhaW5zdCBtb3JlIHRoYW4gb25jZS4KCldlZCBTZXAgIDIgMTE6Mjg6MzUgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS1zY2FuLnkgKHJlcG9ydF9tYWluX2RlY2xhcmF0aW9uKTogTmFtZSBvZiB0aGUgY2xhc3MKIAljb250YWluaW5nIGBtYWluJyBjYW4gYmUgYSBxdWFsaWZpZWQgbmFtZS4KCk1vbiBBdWcgMzEgMTM6MjU6NTggMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogY29uZmlnLWxhbmcuaW46IENoYW5nZWQgZ2phdmFjIHRvIGdqYyBldmVyeXdoZXJlLgoJKiBNYWtlLWxhbmcuaW46IENoYW5nZWQgZ2phdmFjIHRvIGdqYyBldmVyeXdoZXJlLgoKVGh1IEF1ZyAyNyAwMjoyODoyNyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9UQVJHRVRfSU5ERVBFTkRFTlRfQklOX1RPT0xTKTogTmV3IHZhcmlhYmxlLgoJKGphdmEuaW5zdGFsbC1jb21tb246KTogTG9vcCBvdmVyIEpBVkFfVEFSR0VUX0lOREVQRU5ERU5UX0JJTl9UT09MUwoJYW5kIGluc3RhbGwgdGhlIGZpbGVzLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTX0xJVEUpOiBOZXcgdmFyaWFibGUuCgkoY29tcGlsZXI6KTogTm93IGluY2x1ZGUganYtc2NhbiBhcyBhIGRlcGVuZGVuY3kuCgkoLi4vanYtc2NhbiQoZXhlZXh0KSwgcGFyc2Utc2Nhbi5jKTogTmV3IHRhcmdldHMuCgkoLi4vamNmLWR1bXAkKGV4ZWV4dCkpOiBXYXMgamNmLWR1bXAkKGV4ZWV4dCkgYmVmb3JlLgoJKiBjb25maWctbGFuZy5pbiAoY29tcGlsZXJzKTogUmVtb3ZlZCBnY2osIGdqYXZhaCBmcm9tIHRoZSBsaXN0LgoJKiBqY2YtcGFyc2UuYyAocGFyc2Vfc291cmNlX2ZpbGUpOiBDYWxsIGphdmFfbGF5b3V0X2NsYXNzZXMgYW5kCiAJY2hlY2sgZm9yIGVycm9ycyBldmVuIGlmIHBhcnNlX29ubHkuCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogUmVvcmdhbml6ZWQgYW5kIHNraXAgcGFydHMgaWYgSkMxX0xJVEUgaXMKIAlkZWZpbmVkLgoJKHl5bGV4KTogTmV3IGZ1bmN0aW9uLiBVc2VzIGphdmFfbGV4IGJvZHkuCgkoamF2YV9sZXgpOiBSZW1vdmVkIGNvbW1lbnRlZCBvdXQgc3RhdGVtZW50LiBSZW1vdmUgbG9jYWwgdmFyaWFibGUKIAlsaXRlcmFsLiBVc2UgU0VUX0xWQUxfTk9ERV9UWVBFIGFuZCBTRVRfTFZBTF9OT0RFIHdoZXJlCiAJYXBwcm9wcmlhdGUuICBVc2UgbWFjcm9zIEZMT0FUX1RZUEVfTk9ERSwgRE9VQkxFX1RZUEVfTk9ERSwKIAlEQ09OU1QwLCBTRVRfRkxPQVRfSEFORExFUiwgU0VUX1JFQUxfVkFMVUVfQVRPRiwKIAlTRVRfTFZBTF9OT0RFX1RZUEUgYW5kIEdFVF9UWVBFX1BSRUNJU0lPTi4gRG9uJ3QgY3JlYXRlIFNUUklOR19DU1QKIAlpZiBKQzFfTElURSBpcyBkZWZpbmVkLiBVc2UgQlVJTERfSURfV0ZMIHRvIGJ1aWxkIGlkZW50aWZpZXJzLiBVc2UKIAlTRVRfTU9ESUZJRVJfQ1RYLCBTRVRfTFZBTF9OT0RFLCBCVUlMRF9JRF9XRkwgYW5kIEdFVF9JREVOVElGSUVSCiAJd2hlcmUgYXBwcm9wcmlhdGUuCgkoamF2YV9sZXhfZXJyb3IpOiBFbXB0eSBpZiBKQzFfTElURSBpcyBkZWZpbmVkLgoJKGphdmFfZ2V0X2xpbmVfY29sKTogUmV0dXJuIDAgaWYgSkMxX0xJVEUgaXMgZGVmaW5lZC4KCSogbGV4LmggKEpBVkFfRkxPQVRfUkFOR0VfRVJST1IsIEpBVkFfSU5URUdSQUxfUkFOR0VfRVJST1IsCiAJU0VUX01PRElGSUVSX0NUWCk6IE1vdmVkIGludG8gdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgbWFjcm9zCiAJY29uZGl0aW9uYWxseSBkZWZpbmVkIGJ5IEpDMV9MSVRFLgoJKEJVSUxEX09QRVJBVE9SLEJVSUxEX09QRVJBVE9SMik6IEp1c3QgcmV0dXJuIHRoZSBUT0tFTgogCWFyZ3VtZW50IGlmIEpDMV9MSVRFIGlzIGRlZmluZWQuCgkoSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwgSE9TVF9XSURFX0lOVCwgUkVBTF9WQUxVRV9BVE9GLAogCVJFQUxfVkFMVUVfSVNJTkYsIFJFQUxfVkFMVUVfSVNOQU4pOiBQcmVzZXQgdG8gdmFsdWVzIGlmIEpDMV9MSVRFCiAJaXMgZGVmaW5lZC4KCShEQ09OU1QwLCBTRVRfRkxPQVRfSEFORExFUiwgR0VUX0lERU5USUZJRVIsIFNFVF9SRUFMX1ZBTFVFX0FUT0YsCiAJRkxPQVRfVFlQRSwgRE9VQkxFX1RZUEUsIFNFVF9NT0RJRklFUl9DVFgsIEdFVF9UWVBFX1BSRUNJU0lPTiwKIAlTRVRfTFZBTF9OT0RFLCBTRVRfTFZBTF9OT0RFX1RZUEUsIEJVSUxEX0lEX1dGTCk6IE5ldyBtYWNyb3MsIHNldAogCXRvIGRpZmZlcmVudCB2YWx1ZXMgYWNjb3JkaW5nIHRvIEpDMV9MSVRFLgoJKiBwYXJzZS5oIChpbnRfZml0c190eXBlX3AsIHN0YWJpbGl6ZV9yZWZlcmVuY2UpOiBQcm90b3R5cGUgbm90CiAJZGVjbGFyZWQgaWYgSkMxX0xJVEUgc2V0LgoJKGpkZXBfY29kZSwgdHlwZWRlZiBzdHJ1Y3QgX2pkZXAsIHR5cGVkZWYgc3RydWN0IF9qZGVwbGlzdCk6IE5vdAogCWRlZmluZWQgaWYgSkMxX0xJVEUgbm90IHNldC4KCShzdHJ1Y3QgcGFyc2VyX2N0eCk6IFJlb3JnYW5pemVkIGFuZCBza2lwIHRoZSBqYzEgZnJvbnQgZW5kIHBhcnQKIAlpZiBKQzFfTElURSBzZXQuCgkoamF2YV9sYXlvdXRfY2xhc3Nlcyk6IE5ldyBmdW5jdGlvbiBkZWZpbml0aW9uLgoJKGphdmFfcHVzaF9wYXJzZXJfY29udGV4dCwgamF2YV9pbml0X2xleCwgeXlwYXJzZSwgeXlsZXgsCiAJeXllcnJvcik6IFByb3RvdHlwZSBhbHdheXMgZGVjbGFyZWQuIEFsbCBvdGhlciBzdGF0aWMgZnVuY3Rpb24KIAlwcm90b3R5cGVzIGRlY2xhcmVkIG9ubHkgaWYgSkMxX0xJVEUgaXMgbm90IHNldC4KCSogcGFyc2UueSAoeXlwYXJzZSwgeXlsZXgsIHl5ZXJyb3IpOiBObyBsb25nZXIgZGVjbGFyZWQgaGVyZS4gTm93CiAJZGVjbGFyZWQgaW4gcGFyc2UuaC4KCShqYXZhX2xheW91dF9jbGFzc2VzKTogTmV3IGZ1bmN0aW9uLgogCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogTm8gbG9uZ2VyIGxheW91dCB0aGUgY2xhc3MgaGVyZS4KCSogcGFyc2Utc2Nhbi55OiBOZXcgZmlsZS4KCSoganYtc2Nhbi5jOiBOZXcgZmlsZS4KClR1ZSBBdWcgMjUgMTA6MTc6NTQgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKG1haW4pOiBIYW5kbGUgLWZyaWVuZCBvcHRpb24uCgkoZnJpZW5kX3NwZWNzKTogTmV3IGdsb2JhbC4KCShnZW5lcmF0ZV9hY2Nlc3MpOiBIYW5kbGUgZnJpZW5kX3NwZWNzLgoJKHByb2Nlc3NfZmlsZSk6IExpa2V3aXNlLgoJKE1BWF9GUklFTkRTKTogTmV3IG1hY3JvLgoJKGZyaWVuZF9jb3VudCk6IE5ldyBnbG9iYWwuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IEFkZGVkIGBwcmVmaXgnIGFyZ3VtZW50LiAgSWdub3JlIGFycmF5cy4KCUNoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gQXVnIDI0IDIwOjE5OjI3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogamNmLWR1bXAuYyAocHJvY2Vzc19jbGFzcyk6ICBNb3ZlIEpDRl9GSU5JU0ggdXNlIHRvIG1haW4sCgkobWFpbik6ICBIYW5kbGUgcHJvY2Vzc2luZyBhbGwgdGhlIGVudHJpZXMgb2YgYSBuYW1lZCAuemlwIGFyY2hpdmUuCgkqIGpjZi1pby5jIChqY2ZfdHJpbV9vbGRfaW5wdXQpOiAgTmV3IGZ1bmN0aW9uLgoJKiBqY2YuaCAoR0VUX3UyX2xlLEdFVF91NF9sZSxKQ0ZfcmVhZHUyX2xlLEpDRl9yZWFkdTRfbGUpOiAgTmV3IG1hY3Jvcy4KCk1vbiBBdWcgMjQgMDc6MzU6MTMgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGZsYWdfYXNzdW1lX2NvbXBpbGVkKTogIE1ha2UgZGVmYXVsdCBiZSBvbi4KCkZyaSBBdWcgMjEgMTc6Mjk6MDQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtZHVtcC5jOiAgQWRkIGJ1bmNoZXMgb2YgZmxhZ3MgdG8gY29udHJvbCBvdXRwdXQgbW9yZS4KCShwcm9jZXNzX2NsYXNzKTogIE5ldyBmdW5jdGlvbjsgIHN1cHBvcnQgcHJpbnRpbmcgbW9yZSB0aGFuIG9uZSBjbGFzcy4KCShtYWluKTogU3VwcG9ydCBuZXcgLS1wcmludC1tYWluIGFuZCAtLWphdmFwIGZsYWdzLgoJKiBqY2YtcmVhZGVyLmMgKElHTk9SRV9BVFRSSUJVVEUpOiAgTmV3IGhvb2suCgkqIGpjZi5oIChDUE9PTF9JTkRFWF9JTl9SQU5HRSk6ICBOZXcgbWFjcm8uCgpUaHUgQXVnIDIwIDE0OjI0OjQ3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCUNoYW5nZSBtYW5nbGluZyBvZiBkaXNwYXRjaCB0YWJsZSB0byBtYXRjaCBDKysgdnRhYmxlICh3L3RodW5rcykuCgkqIGNsYXNzLmMgKGJ1aWxkX2R0YWJsZV9kZWNsKSwgamF2YS10cmVlLmg6ICBOZXcgZnVuY3Rpb24uCgkobWFrZV9jbGFzc19kYXRhKTogIENhbGwgaXQuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgTGlrZXdpc2UuCgpXZWQgQXVnIDE5IDE3OjU3OjA3IDE5OTggIFdhcnJlbiBMZXZ5ICA8d2FycmVubEBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBfSnZfTmV3T2JqZWN0QXJyYXksIG5vdAogCXNvZnRfYW5ld2FycmF5OyBhZGp1c3QgYXJncyBwYXNzZWQuCgkqIGV4cHIuYyAoYnVpbGRfYW5ld2FycmF5KTogQWRqdXN0IGFyZ3MgZm9yIHNvZnRfYW5ld2FycmF5X25vZGUgdG8KIAltYXRjaCBfSnZfTmV3T2JqZWN0QXJyYXkuCgpXZWQgQXVnIDE5IDA5OjMzOjIzIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX2xhYmVsZWRfYmxvY2ssIHBvcF9sYWJlbGVkX2Jsb2NrKTogTmV3IGZ1bmN0aW9ucy4KCSogZXhwci5jIChsb29wdXBfbGFiZWwpOiBDYWxsIGNyZWF0ZV9sYWJlbF9kZWNsLgoJKGNyZWF0ZV9sYWJlbF9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IENhbGwgZXhwYW5kX3N0YXJ0X2JpbmRpbmdzIHdpdGggYXJndW1lbnQKIAlzZXQgdG8gemVyby4KCSogamF2YS10cmVlLmggQWRkZWQgc3BhY2UgYWZ0ZXIgUFJPVE8gaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zCiAJd2hlbiBuZWNlc3NhcnkuCgkoSVNfRk9SX0xPT1BfUCwgSVNfQlJFQUtfU1RNVF9QKTogTmV3IG1hY3Jvcy4KCShjcmVhdGVfbGFiZWxfZGVjbCwgcHVzaF9sYWJlbGVkX2Jsb2NrKTogTmV3IGZ1bmN0aW9uCiAJZGVjbGFyYXRpb25zLgoJKiBsZXguYyAobGFiZWxfaWQpOiBJbml0aWFsaXplLgoJKFNVUEVSX1RLLCBUSElTX1RLLCBSRVRVUk5fVEspOiBNZXJnZWQgY29tbW9uIGFjdGlvbnMgaW4gZmluYWwKIAlzd2l0Y2guCgkqIHBhcnNlLmggQWRkZWQgc3BhY2UgYWZ0ZXIgUFJPVE8gaW4gZnVuY3Rpb24gZGVjbGFyYXRpb25zIHdoZW4KIAluZWNlc3NhcnkuCgkoTE9PUF9FWFBSX0JPRFlfTUFJTl9CTE9DSywgTE9PUF9FWFBSX0JPRFlfVVBEQVRFX0JMT0NLLAogCUxPT1BfRVhQUl9CT0RZX0NPTkRJVElPTl9FWFBSLCBMT09QX0VYUFJfQk9EWV9MQUJFTEVEX0JPRFksCiAJTE9PUF9FWFBSX0JPRFlfQk9EWV9FWFBSLCBMT09QX0hBU19MQUJFTF9QLCBMT09QX0hBU19MQUJFTF9TS0lQX1AsCiAJUFVTSF9MQUJFTEVEX0JMT0NLLCBQT1BfTEFCRUxFRF9CTE9DSywgUFVTSF9MT09QLCBQT1BfTE9PUCk6IE5ldwogCW1hY3Jvcy4KCShzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBOZXcgZmllbGRzIGN1cnJlbnRfbG9vcCwKIAljdXJyZW50X2xhYmVsZWRfYmxvY2suCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQsIHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50LAogCWFkZF9zdG10X3RvX2NvbXBvdW5kLCBwYXRjaF9leGl0X2V4cHIsIGJ1aWxkX2xhYmVsZWRfYmxvY2ssCiAJZ2VuZXJhdGVfbGFiZWxlZF9ibG9jaywgY29tcGxldGVfbGFiZWxlZF9zdGF0ZW1lbnQsCiAJYnVpbGRfYmNfc3RhdGVtZW50LCBwYXRjaF9iY19zdGF0ZW1lbnQsIHBhdGNoX2xvb3Bfc3RhdGVtZW50LAogCWJ1aWxkX25ld19sb29wLCBidWlsZF9sb29wX2JvZHksIGNvbXBsZXRlX2xvb3BfYm9keSk6IE5ldyBmdW5jdGlvbgogCWRlY2xhcmF0aW9ucy4KCSogcGFyc2UueSAoamF2YV93YXJuaW5nX2NvdW50KTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShsYWJlbF9pZCk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoQlJFQUtfVEssIENPTlRJTlVFX1RLKTogVG9rZW4gdGFnZ2VkIDxvcGVyYXRvcj4uCgkoYmxvY2s6KTogUmV0dXJuIHNpemVfemVyb19ub2RlIHdoZW4gYmxvY2sgaXMgZW1wdHkuCgkoZW1wdHlfc3RhdGVtZW50Oik6IFJldHVybiBzaXplX3plcm9fbm9kZS4KCShzdGF0ZW1lbnQ6KTogSW1wbGVtZW50IHN1cHBsZW1lbnRhbCBhY3Rpb24gd2hlbiBmb3Jfc3RhdGVtZW50OiBpcwogCXJlZHVjZWQuCgkobGFiZWxfZGVjbDopOiBOZXcgcnVsZS4KCShsYWJlbGVkX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgbGFiZWxfZGVjbC4gQWN0aW9ucwogCWltcGxlbWVudGVkLgoJKGxhYmVsZWRfc3RhdGVtZW50X25zaTopOiBMaWtld2lzZS4KCShpZl90aGVuX3N0YXRlbWVudCk6IEFjdGlvbnMgaW1wbGVtZW50ZWQuCgkod2hpbGVfZXhwcmVzc2lvbik6IE5ldyBydWxlLgoJKHdoaWxlX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgd2hpbGVfZXhwcmVzc2lvbi4gQWN0aW9ucwogCWltcGxlbWVudGVkLgoJKHdoaWxlX3N0YXRlbWVudF9uc2k6KTogTGlrZXdpc2UuCgkoZG9fc3RhdGVtZW50X2JlZ2luOik6IE5ldyBydWxlLgoJKGRvX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgZG9fc3RhdGVtZW50X2JlZ2luLiBBY3Rpb25zCiAJaW1wbGVtZW50ZWQuCgkoZm9yX3N0YXRlbWVudDopOiBSZXdyaXR0ZW4gdXNpbmcgZm9yX2JlZ2luLiBBY3Rpb25zIGltcGxlbWVudGVkLgoJKGZvcl9zdGF0ZW1lbnRfbnNpOik6IExpa2V3aXNlLgoJKGZvcl9oZWFkZXI6LCBmb3JfYmVnaW46KTogTmV3IHJ1bGVzLgoJKGZvcl9pbml0Oik6IEFjdGlvbnMgaW1wbGVtZW50ZWQuCgkoc3RhdGVtZW50X2V4cHJlc3Npb25fbGlzdDosIGJyZWFrX3N0YXRlbWVudDosCiAJY29udGludWVfc3RhdGVtZW50Oik6IExpa2V3aXNlLgoJKHl5ZXJyb3IpOiBDb3VudCBudW1iZXIgb2YgaXNzdWVkIHdhcm5pbmcocykuCgkoamF2YV9yZXBvcnRfZXJyb3JzKTogUmVwb3J0IGVycm9yKHMpIGFuZC9vciB3YXJuaW5nKHMpLgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBVc2UgYnVpbGRfamF2YV9hcmd1bWVudF9zaWduYXR1cmUgdG8KIAlyZWNvbXB1dGUgY29tcGxldGVkIG1ldGhvZCBzaWduYXR1cmUuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiBOZXcgbG9jYWxzIG1ldGhvZF93ZmwgYW5kIGFmbGFncy4KICAJVXNlIG1ldGhvZF93ZmwgaW5zdGVhZCBvZiBsb29rdXBfY2wgZHVyaW5nIGVycm9yIHJlcG9ydHMuIEZpeGVkCiAJaW5kZW50YXRpb24gYW5kIG1vZGlmaWVkIHNvbWUgZXJyb3IgbWVzc2FnZXMuIFVzZQogCWxhbmdfcHJpbnRhYmxlX25hbWUgaW4gbWV0aG9kIGluc3RlYWQgb2YgdGhlIERFQ0xfTkFNRS4gTmV3IGNvZGUKIAl0byBpc3N1ZSB3YXJuaW5ncyBvbiBtZXRob2RzIG5vdCBvdmVycmlkaW5nIGNvcnJlc3BvbmRpbmcgbWV0aG9kcwogCXByaXZhdGUgdG8gYSBkaWZmZXJlbnQgcGFja2FnZS4KCShqYXZhX21ldGhvZF9hZGRfc3RtdCk6IENhbGwgYWRkX3N0bXRfdG9fY29tcG91bmQuCgkoYWRkX3N0bXRfdG9fY29tcG91bmQpOiBOZXcgZnVuY3Rpb24uCgkoamF2YV9jb21wbGV0ZV90cmVlKTogSGFuZGxlIExBQkVMRURfQkxPQ0tfRVhQUiwgRVhJVF9CTE9DS19FWFBSLAogCUxPT1BfRVhQUiwgRVhJVF9FWFBSIGFuZCBDT05EX0VYUFIuCgkoYnVpbGRfaWZfZWxzZV9zdGF0ZW1lbnQsIHBhdGNoX2lmX2Vsc2Vfc3RhdGVtZW50LAogCWJ1aWxkX2xhYmVsZWRfYmxvY2ssIGdlbmVyYXRlX2xhYmVsZWRfYmxvY2ssCiAJY29tcGxldGVfbGFiZWxlZF9zdGF0ZW1lbnQsIGJ1aWxkX25ld19sb29wLCBidWlsZF9sb29wX2JvZHksCiAJY29tcGxldGVfbG9vcF9ib2R5LCBwYXRjaF9sb29wX3N0YXRlbWVudCwgYnVpbGRfYmNfc3RhdGVtZW50LAogCXBhdGNoX2JjX3N0YXRlbWVudCwgcGF0Y2hfZXhpdF9leHByKTogTmV3IGZ1bmN0aW9ucy4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfc2lnbmF0dXJlKTogQnVpbGQgYXJndW1lbnQgc2lnbmF0dXJlIGJlZm9yZQogCWVuY2xvc2luZyBpdCBpbiBiZXR3ZWVuIHBhcmVudGhlc2lzLgoKTW9uIEF1ZyAxNyAxNzo0NDoyNCAxOTk4ICBXYXJyZW4gTGV2eSAgPHdhcnJlbmxAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9TUkNTKTogQ3JlYXRlZCBmb3IgZGVwZW5kZW5jaWVzICogTWFrZWZpbGUuaW4KIAkoSkFWQV9PQkpTKTogQWRkZWQgcmVtaW5kZXIgY29tbWVudAoKVGh1IEF1ZyAxMyAxMDowMTo0NSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKERfTkFOX01BU0spOiBBcHBlbmQgTEwgdG8gdGhlIGNvbnN0YW50IHRvIGZvcmNlIGl0IHRvCgliZSBpbnRlcnByZXRlZCBhcyBhIGxvbmcgbG9uZy4KClRodSBBdWcgMTMgMTQ6MzQ6MDcgMTk5OCAgV2FycmVuIExldnkgIDx3YXJyZW5sQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIF9Kdl9Jbml0Q2xhc3MsIG5vdAogCXNvZnRfaW5pdGlhbGlzZV9jbGFzcy4gIFVzZSBfSnZfTmV3TXVsdGlBcnJheSwgbm90CiAJc29mdF9tdWx0aWFuZXdhcnJheS4gIFVzZSBfSnZfVGhyb3dCYWRBcnJheUluZGV4LCBub3QKIAlzb2Z0X2JhZGFycmF5aW5kZXguICBVc2UgX0p2X0NoZWNrQ2FzdCwgbm90IHNvZnRfY2hlY2tjYXN0LiAgVXNlCiAJX0p2X0NoZWNrQXJyYXlTdG9yZSwgbm90IHNvZnRfY2hlY2thcnJheXN0b3JlLiAgVXNlCiAJX0p2X0xvb2t1cEludGVyZmFjZU1ldGhvZCwgbm90IHNvZnRfbG9va3VwaW50ZXJmYWNlbWV0aG9kLgoKV2VkIEF1ZyAxMiAxNDoyMzoxMyAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYywgamF2YS10cmVlLmggKHRoaXNfaWRlbnRpZmllcl9ub2RlLCBzdXBlcl9pZGVudGlmaWVyX25vZGUsCglsZW5ndGhfaWRlbnRpZmllcl9ub2RlKTogIE5ldyBnbG9iYWwgdHJlZSBub2RlIGNvbnN0YW50cy4KCSogcGFyc2UueSAoa3dfc3VwZXIsIGt3X3RoaXMsIGt3X2xlbmd0aCk6ICBSZW1vdmVkIGdsb2JhbHMuCglSZXBsYWNlIHVzZXMgYnkgc3VwZXJfaWRlbnRpZmllcl9ub2RlIGV0Yy4KCSogbGV4LmMgKGt3X3N1cGVyLCBrd190aGlzLCBrd19sZW5ndGgpOiAgRG9uJ3QgaW5pdGlhbGl6ZS4KCgkqIHBhcnNlLnkgKHJlc29sdmVfZmllbGRfYWNjZXNzKTogIERvbid0IHNwZWNpYWwtY2FzZSAiLmxlbmd0aCIgaWYKCWZsYWdfZW1pdF9jbGFzc19maWxlcy4KCShwYXRjaF9hcnJheV9yZWYpOiAgTGVhdmUgYXMgQVJSQVlfUkVGIGlmIGZsYWdfZW1pdF9jbGFzc19maWxlcy4KCSogamNmLXdyaXRlLmMgKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zKTogIEhhbmRsZSBBUlJBWV9SRUYgb3Bjb2RlCglhbmQgQVJSQVkubGVuZ3RoLgoKVHVlIEF1ZyAxMSAxMTozMTo1NSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW1vdmUgdW51c2VkIG1ldGhvZF90eXBlX25vZGUgZmllbGRzLgoJKiBjbGFzcy5jIChtYWtlX21ldGhvZF92YWx1ZSk6ICBSZW1vdmUgaW5pdCBmb3IgcmVtb3ZlZCBmaWVsZHMuCgoJKiBjbGFzcy5jIChsYXlvdXRfY2xhc3MpOiAgVXNlIGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9BUkdVTUVOVF9TSUdOQVRVUkUpOiAgTmV3IG1hY3JvLgoKCSogdHlwZWNrLmMgKHB1c2hfamF2YV9hcmd1bWVudF9zaWduYXR1cmUpOiAgUmVtb3ZlZC4gIE1lcmdlZCBpbnRvIC4uLgoJKGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlKTogIFVzZSBUWVBFX0FSR1VNRU5UX1NJR05BVFVSRSBjYWNoZS4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6ICBEb24ndCB1c2UgcHVzaF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZS4KCgkqIHR5cGVjay5jIChsb29rdXBfYXJndW1lbnRfbWV0aG9kKTogIE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueSAoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMpOiAgVXNlIGxvb2t1cF9hcmd1bWVudF9tZXRob2QKCWluc3RlYWQgb2YgbG9va3VwX2phdmFfbWV0aG9kMiBmb2xsb3dlZCBieSBsb29rdXBfamF2YV9tZXRob2QuCgoJKiBwYXJzZS55IChjaGVja19tZXRob2RfcmVkZWZpbml0aW9uKTogIE1pbm9yIG9wdGltaXphdGlvbi4KCgkqIGpjZi13cml0ZS5jIChnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgUkVUVVJOX0VYUFIsCglNSU5VU19FWFBSLCBNVUxUX0VYUFIsIFRSVU5DX0RJVl9FWFBSLCBhbmQgUkRJVl9FWFBSLgoKTW9uIEF1ZyAxMCAwOTo1NzoxNSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGpjMSQoZXhlZXh0KSk6IERvbid0IGRlcGVuZCBvbiBjLWNvbW1vbi5vIG9yCgljLXByYWdtYS5vLgoKCSogZ2phdmFoLmMgKGphdmFfZmxvYXRfZmluaXRlKTogVXNlIEsmUi1zdHlsZSBkZWZpbml0aW9uLgoJKGphdmFfZG91YmxlX2Zpbml0ZSk6IExpa2V3aXNlLgoJKGdlbmVyYXRlX2FjY2Vzcyk6IE5vdyByZXR1cm5zIHZvaWQuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoJKGxhc3RfYWNjZXNzX2dlbmVyYXRlZCk6IFJlbW92ZWQuCgkocHJvY2Vzc19maWxlKTogT25seSBtYWtlIGEgc2luZ2xlIHBhc3Mgb3ZlciB0aGUgLmNsYXNzIGZpbGUuCgpXZWQgSnVsIDI5IDE3OjUwOjIzIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZ2V0X2Rpc3BhdGNoX3RhYmxlKTogIEFkZCBleHRyYSBkdW1teSB2dGFibGUgZW50cnksCglmb3IgY29tcGF0aWJpbGl0eSBmb3IgRysrICh3aXRoIC1mdnRhYmxlLXRodW5rcykuCgkqIGV4cHIuYyAoYnVpbGRfaW52b2tldmlydHVhbCk6ICBBZGQgb25lIGZvciBleHRyYSBkdW1teSB2dGFibGUgZW50cnkuCgoJKiBnamF2YWguYyAocHJvY2Vzc19maWxlKTogIFVzZSBwdWJsaWMgaW5oZXJpdGFuY2UgZm9yIHN1cGVyLWNsYXNzLgoKV2VkIEp1bCAyOSAxMzoxOTowMyAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogSW5pdGlhbGl6ZSBjdHhwLT5wYWNrYWdlLgoJKiBwYXJzZS5oIChzdHJ1Y3QgcGFyc2VyX2N0eHQpOiBwYWNrYWdlIGFuZCBwYWNrYWdlX2xlbiByZXBsYWNlZAogCWJ5IHRyZWUgcGFja2FnZSwgYW4gaWRlbnRpZmllciBub2RlLiBGaWVsZCBtZXRob2RfZGVjbF9saXN0IGlzCiAJZ29uZS4gRml4ZWQgY29tbWVudHMuCgkobG9va3VwX2ZpZWxkX3dyYXBwZXIsIG1lcmdlX3F1YWxpZmllZF9uYW1lLCBub3RfYWNjZXNzaWJsZSwKIAljbGFzc19pbl9jdXJyZW50X3BhY2thZ2UpOiBOZXcgZnVuY3Rpb24gcHJvdG90eXBlcy4KCSogcGFyc2UueSAoYXJyYXlfdHlwZTopOiBTZXQgY2xhc3MgbG9hZGVkIGZsYWcgb24gcHJpbWl0aXZlIHR5cGUKIAlhcnJheXMuCgkocGFja2FnZV9kZWNsYXJhdGlvbjopOiBBc3NpZ24gY3R4cC0+cGFja2FnZSB0byB0aGUKIAlpZGVudGlmaWVyIG5vZGUuCgkobWV0aG9kX2ludm9jYXRpb246KTogSGFuZGxlIGludm9jYXRpb24gb2YgbWV0aG9kIHF1YWxpZmllZCBieQogCWBzdXBlcicuCgkoc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgYW1iaWd1aXR5IGNoZWNrLgoJKGphdmFfcG9wX3BhcnNlcl9jb250ZXh0KTogTmV3IGxvY2FsIHZhcmlhYmxlIGBuZXh0Jy4gUmVzZXQgYW5kCiAJc2V0IElNUE9SVF9DTEFTU0ZJTEVfTkFNRSBmbGFncyBvbiBjdXJyZW50IGFuZCBwcmV2aW91cyBpbXBvcnQKIAlsaXN0LgoJKGphdmFfYWNjc3RyaW5nX2xvb2t1cCk6IFVzZSBuZXcgbG9jYWwgbWFjcm8gQ09QWV9SRVRVUk4uCgkobG9va3VwX2ZpZWxkX3dyYXBwZXIpOiBOZXcgZnVuY3Rpb24uCgkocGFyc2VyX3F1YWxpZmllZF9jbGFzc25hbWUpOiBVc2UgbWVyZ2VfcXVhbGlmaWVkX25hbWUuCgkocGFyc2VyX2NoZWNrX3N1cGVyX2ludGVyZmFjZSk6IEJyb2FkZW4gZXJyb3IgbWVzc2FnZS4KCShkb19yZXNvbHZlX2NsYXNzKTogQ2hlY2sgZm9yIHF1YWxpZmllZCBjbGFzcyBuYW1lIGluIHRoZSBjdXJyZW50CiAJY29tcGlsYXRpb24gdW5pdCBpZiBhcHByb3ByaWF0ZS4KCShwcm9jZXNzX2ltcG9ydHMpOiBDaGVjayBmb3IgYWxyZWFkeSBkZWZpbmVkIGNsYXNzZXMuCgkoY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcyk6IEdvdCByaWQgb2YgY2FsbCB0bwogCWdldF9hY2Nlc3NfZmxhZ3NfZnJvbV9kZWNsLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBDYWxsIHNhZmVfbGF5b3V0X2NsYXNzIGJhc2VkIG9uCiAJdGhlIGN1cnJlbnQgY2xhc3Mgc2l6ZS4KCShtYWtlX3F1YWxpZmllZF9wcmltYXJ5KTogQnVpbGQgYSBXRkwgcXVhbGlmaWNhdGlvbiBvbiBwcmltYXJ5IGlmCiAJbm9uZSBleGlzdHMuCgkobWVyZ2VfcXVhbGlmaWVkX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkobWFrZV9xdWFsaWZpZWRfbmFtZSk6IFVzZSBtZXJnZV9xdWFsaWZpZWRfbmFtZS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFVzZSBzYWZlX2xvb2t1cF9maWVsZC4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IEdvdCByaWQgb2YgY2FsbCB0byBnZXRfYWNjZXNzX2ZsYWdzX2Zyb21fZGVjbC4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBMaWtld2lzZS4gQ2hlY2sgb24gcmVzb2x2ZWQKIAllbGVtZW50IGFjY2Vzc2liaWxpdHkuCgkobm90X2FjY2Vzc2libGVfcCwgY2xhc3NfaW5fY3VycmVudF9wYWNrYWdlKTogTmV3IGZ1bmN0aW9ucy4KCShtYXliZV9hY2Nlc3NfZmllbGQpOiBHb3QgcmlkIG9mIGNhbGwgdG8gZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IE1lcmdlZCBjb21tb24gcGllY2VzLiBDaGVjawogCWFjY2Vzc2liaWxpdHkgb2YgaW52b2tlZCBtZXRob2QuCgkoY2hlY2tfZm9yX3N0YXRpY19tZXRob2RfcmVmZXJlbmNlKTogQWRkIHJldHVybmVkIHR5cGUgaW4gZXJyb3IKIAltZXNzYWdlLgoJKGludm9jYXRpb25fbW9kZSk6IEdldCByaWQgb2YgYm9ndXMgY2hlY2sgb24gUFJJVkFURSBtZXRob2RzLgoJKHJlZmluZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IE1lcmdlZCB0d28gY29uZGl0aW9ucyBpbiB0ZXN0LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBTYW5pdHkgY2hlY2sgb24gc3RhYmlsaXplX3JlZiBnb25lLgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogQ2FzdCBsc2VlayBzZWNvbmQgYXJndW1lbnQgdG8gbG9uZy4KClR1ZSBKdWwgMjggMjE6Mzk6MjIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChoYXNoVXRmOFN0cmluZyk6ICBGaXggLSB1c2UgbmV3IEphdmFTb2Z0IHNwZWNpZmljYXRpb24uCgpGcmkgSnVsIDI0IDEwOjQzOjI1IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChGX05BTik6IFJlbW92ZWQuCgkoRl9OQU5fTUFTSyk6IE5ldyBtYWNyby4KCShGX1BPU0lUSVZFX0lORklOSVRZKTogUmVtb3ZlZC4KCShGX05FR0FUSVZFX0lORklOSVRZKTogTGlrZXdpc2UuCgkoamF2YV9mbG9hdF9maW5pdGUpOiBSZXdyb3RlLgoJKERfTkFOX01BU0spOiBSZW5hbWVkLgoJKGphdmFfZG91YmxlX2Zpbml0ZSk6IFJld3JvdGUuCgkoRF9QT1NJVElWRV9JTkZJTklUWSk6IFJlbW92ZWQuCgkoRF9ORUdBVElWRV9JTkZJTklUWSk6IExpa2V3aXNlLgoKCSogamNmLWR1bXAuYyAocHJpbnRfY29uc3RhbnQpOiBbQ09OU1RBTlRfRG91YmxlLCBDT05TVEFOVF9GbG9hdF0KCUlmIHZlcmJvc2UsIHByaW50IHVuZGVybHlpbmcgcmVwcmVzZW50YXRpb24gb2YgdmFsdWUgaW4gaGV4LgoKRnJpIEp1bCAyNCAxNDoxNDozMiAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGJ1ZmZlci5oLCBidWZmZXIuYzogIE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKEpBVkFfT0JKUyk6ICBBZGQgYnVmZmVyLm8uCgoJU3VwcG9ydCBsb2NhbHMgdmFyaWFibGVzIGFuZCB3cml0aW5nIHRoZWlyIGRlYnVnIGVudHJpZXMgdG8gLmNsYXNzLgoJKiBqY2Ytd3JpdGUuYzogIFNpbXBsaWZ5IHNvbWUgYnkgdXNlciBuZXcgYnVmZmVyIHR5cGUuCgkodm9kZV9idWZmZXJfZ3Jvdyk6ICBSZW1vdmVkLgoJKHN0cnVjdCBsb2NhbHZhcl9pbmZvKTogIE5ldyB0eXBlLgoJKGxvY2Fsc3ZhcnMsIGxvY2FsdmFydGFibGUpOiAgTmV3IGJ1ZmZlcnMuCgkobG9jYWx2YXJfYWxsb2MsIGxvY2FsdmFyX2ZyZWUpOiAgTmV3IGZ1bmN0aW9ucy4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNucyk6ICBIYW5kbGUgbG9jYWwgdmFyaWFibGVzLgoJKGdlbmVyYXRlX2NsYXNzZmlsZSk6ICBXcml0ZSBMb2NhbFZhcmlhYmxlVGFibGUgYXR0cmlidXRlLgoKRnJpIEp1bCAyNCAxMzo0Njo1OSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1pby5jIChvcGVuX2luX3ppcCk6IENoZWNrIHRoZSB6aXBmaWxlIG1hZ2ljIG51bWJlci4KCSogemlwZmlsZS5oIChaSVBNQUdJQyk6IE5ldyBtYWNyby4KCkZyaSBKdWwgMjQgMTA6NDM6MjUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGdqYXZhaC5vKTogVXBkYXRlZCBkZXBlbmRlbmNpZXMuCgkoamNmLWR1bXAubyk6IExpa2V3aXNlLgoJKGFsbC5pbmRpcmVjdCk6IFVzZSAuLi9namF2YWguCgkoLi4vZ2phdmFoJChleGVleHQpKTogTGlrZXdpc2UuCgkoY2xlYW4pOiBEb24ndCByZW1vdmUgZ2phdmFoLgoJKGNsZWFuKTogUmVtb3ZlIHBhcnNlLmMsIG5vdCBqYXZhL3BhcnNlLmMuCgkqIE1ha2UtbGFuZy5pbiAoamF2YSk6IEFkZGVkIGdqYXZhaC4KCShnamF2YWgkKGV4ZWV4dCkpOiBOZXcgdGFyZ2V0LgoJKEdKQVZBSF9TT1VSQ0VTKTogTmV3IG1hY3JvLgoJKGphdmEuYWxsLmJ1aWxkKTogQWRkZWQgZ2phdmFoLgoJKGphdmEuYWxsLmNyb3NzKTogTGlrZXdpc2UuCgkoamF2YS5yZXN0LmVuY2FwKTogTGlrZXdpc2UuCgkqIGNvbmZpZy1sYW5nLmluIChjb21waWxlcnMsIHN0YWdlc3R1ZmYpOiBBZGRlZCBnamF2YWguCgpUaHUgSnVsIDIzIDE4OjMzOjU2IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChqYXZhX2Zsb2F0X2Zpbml0ZSk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2RvdWJsZV9maW5pdGUpOiBMaWtld2lzZS4KCShGX1BPU0lUSVZFX0lORklOSVRZKTogTmV3IG1hY3JvLgoJKEZfTkVHQVRJVkVfSU5GSU5JVFkpOiBMaWtld2lzZS4KCShGX05BTik6IExpa2V3aXNlLgoJKERfUE9TSVRJVkVfSU5GSU5JVFkpOiBMaWtld2lzZS4KCShEX05FR0FUSVZFX0lORklOSVRZKTogTGlrZXdpc2UuCgkoRF9OQU4pOiBMaWtld2lzZS4KCShwcmludF9maWVsZF9pbmZvKTogVXNlIGphdmFfZmxvYXRfZmluaXRlIGFuZCBqYXZhX2RvdWJsZV9maW5pdGUuCgpUaHUgSnVsIDIzIDE1OjI4OjI0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogcGFyc2UueSAobWV0aG9kX2hlYWRlcik6ICBOYW1lICJ0aGlzIiBpbXBsaWNpdCBhcmd1bWVudC4KCldlZCBKdWwgMjIgMTU6NDc6MzAgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2Ytd3JpdGUuYzogIFdyaXRlIG91dCBMaW5lTnVtYmVyVGFibGUgYXR0cmlidXRlIGluIC5jbGFzcyBmaWxlLgogCShsaW5lbnVtYmVyX2J1ZmZlciwgbGluZW51bWJlcl9wdHIsIGxpbmVudW1iZXJfbGltaXQpOiAgTmV3IHN0YXRpY3MuCgkocHV0X2xpbmVudW1iZXIpOiAgTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2J5dGVjb2RlX2luc25zLCBnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgV3JpdGUgbGluZSBudW1iZXJzLgoKV2VkIEp1bCAyMiAxNDozOTowMCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChDQUxMX0VYUFJfRlJPTV9QUklNQVJZX1ApOiBDaGFuZ2VkIGluIFBSSU1BUllfUC4KCShsb29rdXBfbmFtZSwgYnVpbGRfa25vd25fbWV0aG9kX3JlZiwgYnVpbGRfY2xhc3NfaW5pdCwKIAlidWlsZF9pbnZva2V2aXJ0dWFsLCBpbnZva2VfYnVpbGRfZHRhYmxlLCBtYXRjaF9qYXZhX21ldGhvZCwKIAlidWlsZF9maWVsZF9yZWYsIHB1c2hkZWNsX2ZvcmNlX2hlYWQsIGJ1aWxkX2phdmFfYmlub3AsCiAJYmluYXJ5X251bWVyaWNfcHJvbW90aW9uLCBidWlsZF9kZWNsX25vX2xheW91dCwKIAlidWlsZF9qYXZhX2FycmF5YWNjZXNzLCBidWlsZF9uZXdhcnJheSwgYnVpbGRfYW5ld2FycmF5LAogCWJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2VzcywgYnVpbGRfamF2YV9hcnJheW51bGxfY2hlY2spOiBOZXcKIAlleHRlcm4gZnVuY3Rpb24gcHJvdG90eXBlcy4KCShKQVZBX1VOQVJZX1BMVVNfRVhQUiwgSkFWQV9ORVdfQVJSQVlfRVhQUiwgSkFWQV9ORVdfQ0xBU1NfRVhQUiwKIAlKQVZBX1RISVNfRVhQUiwgQ0FMTF9DT05TVFJVQ1RPUl9QKTogTWFjcm8gZGVmaW5pdGlvbiBtb3ZlZCBpbgogCWphdmEtdHJlZS5oLgoJKiBqY2YtcGFyc2UuYyAoaW5pdF9vdXRnb2luZ19jcG9vbCk6IFNldCBjdXJyZW50X2NvbnN0YW50X3Bvb2xfZGF0YV9yZWYKCXRvIE5VTEwKCSogamNmLmggKGpjZl9vdXRfb2Zfc3luY2gpOiBOZXcgZXh0ZXJuIGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogcGFyc2UuaDogU3RhdGljL2dsb2JhbCBmdW5jdGlvbiBpbXBsZW1lbnRlZCBpbiBwYXJzZS55CiAJcHJvdG90eXBlZCBhbmQgZGVjbGFyYXRpb25zIG1vdmVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCgkoREVDTF9QKTogQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgaXNuJ3QgbnVsbC4KCShKQVZBX1VOQVJZX1BMVVNfRVhQUiwgSkFWQV9ORVdfQVJSQVlfRVhQUiwgSkFWQV9ORVdfQ0xBU1NfRVhQUiwKIAlKQVZBX1RISVNfRVhQUik6IE5vIGxvbmdlciBkZWZpbmVkIGhlcmUuIFNlZSBqYXZhLXRyZWUuaAoJKFFVQUxfREVDTF9UWVBFKTogTmV3IG1hY3JvLgoJKFBBUkFNUyk6IE1hY3JvIGRlZmluaXRpb24gcmVtb3ZlZC4KCSogcGFyc2UueTogKHl5cGFyc2UsIHl5ZXJyb3IpOiBVc2UgUFJPVE8gaW5zdGVhZCBvZiBQQVJBTVMuCgkocmV0dXJuX3N0YXRlbWVudDopOiBDYWxsIGJ1aWxkX3JldHVybi4KCShmaWVsZF9hY2Nlc3M6KTogQ2FsbCBtYWtlX3F1YWxpZmllZF9wcmltYXJ5IGluIHN1YiBydWxlLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IEJ1aWxkIG1ldGhvZCBpbnZvY2F0aW9uIGFuZCBjYWxsCiAJbWFrZV9xdWFsaWZpZWRfcHJpbWFyeSB3aGVuIHByb2Nlc3NpbmcgcHJpbWFyaWVzLgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBTZXQgSURFTlRJRklFUl9TSUdOQVRVUkVfVFlQRSBieSBjYWxsaW5nCiAJZ2V0X3R5cGVfZnJvbV9zaWduYXR1cmUuCgkoamF2YV9jaGVja19yZWd1bGFyX21ldGhvZCk6IEV4dHJhIGludGVnZXIgMCBhcmd1bWVudCB3aGVuIGNhbGxpbmcKIAlsb29rdXBfamF2YV9tZXRob2QyLgoJKGxvb2t1cF9qYXZhX2ludGVyZmFjZV9tZXRob2QyKTogRXh0cmEgbWV0aG9kIERFQ0wgYXJndW1lbnQgd2hlbgogCWNhbGxpbmcgbG9va3VwX2phdmFfaW50ZXJmYWNlX21ldGhvZDIuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBTZXQgVFJFRV9TSURFX0VGRkVDVFMgb24gbmV3bHkgY3JlYXRlZAogCUNPTVBPVU5EX0VYUFIgbm9kZS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBMYXlvdXQgY3VycmVudCBjbGFzcyBpZmYgbm90CiAJYWxyZWFkeSBkb25lLiBEb24ndCBwcm9jZXNzIGludGVyZmFjZSdzIG1ldGhvZHMuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kKTogVXNlIHN1cGVyIGNsYXNzIG9ubHkgaWYgaXQKIAlleGlzdHMuIFVzZSBjdXJyZW50IGNsYXNzIG90aGVyd2lzZS4KCShtYWtlX3F1YWxpZmllZF9wcmltYXJ5KTogTmV3IGZ1bmN0aW9uLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogUHJvY2VzcyBxdWFsaWZpZWQgZXhwcmVzc2lvbiBvcgogCWV4cHJlc3Npb24gZnJvbSBwcmltYXJ5IHRoZSBzYW1lIHdheS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IFR3byBsYXN0IGFyZ3VtZW50cyB0bwogCXJlc29sdmVfZmllbGRfYWNjZXNzIGFyZSBub3cgTlVMTF9UUkVFcy4KCShyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IE5ldyB2YXJpYWJsZSBpc19zdGF0aWMuIExvY2FsIGZpZWxkIG11c3QKIAliZSBERUNMcy4gaXNfc3RhdGljIGNvbXB1dGVkIG9uIGZpZWxkIERFQ0xzIG9ubHkuIEFwcGVuZCBjb2RlIGluCiAJd2hlcmVfZm91bmQgdG8gdGhlIGZpZWxkIGFjY2VzcyBpZiBuZWNlc3NhcnkuIFVzZSBRVUFMX0RFQ0xfVFlQRQogCXRvIGluaXRpYWxpemUgZmllbGRfdHlwZS4KCShyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUpOiBOZXcgbG9jYWwgdmFyaWFibGUsCiAJcHJldmlvdXNfY2FsbF9zdGF0aWMgYW5kIGlzX3N0YXRpYy4gSGFuZGxlIHByaW1hcmllcyB3aXRoIGZ1bmN0aW9uCiAJY2FsbHMsIGNhc3RzLCBhcnJheSByZWZlcmVuY2VzIGFuZCBgdGhpcycuIGBzdXBlcicgbm93IGhhbmRsZWQgYXMKIAlgKHN1cGVyX2NsYXNzKXRoaXMnLiBVc2UgaXNfc3RhdGljIHRvIGNsYXJpZnkgYm9vbGVhbiBleHByZXNzaW9ucy4KICAJQWRkZWQgY29kZSB0byBoYW5kbGUgY2FzZSB3aGVyZSBhIHByb3BlciBoYW5kbGUgaXMgcmVxdWlyZWQgdG8KIAlhY2Nlc3MgYSBmaWVsZC4gVXNlIFFVQUxfREVDTF9UWVBFIHdoZXJlIGFwcGxpY2FibGUuCgkobWF5YmVfYWNjZXNzX2ZpZWxkKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiBOZXcgYXJndW1lbnRzIHByaW1hcnksIHdoZXJlLAogCWlzX3N0YXRpYy4gQnJhbmNoIG9mIHRoZSB0ZXN0IG9uIENBTExfRVhQUl9GUk9NX1BSSU1BUllfUAogCWRlbGV0ZWQuIFVzZSBgd2hlcmUnIGFzIGEgdHlwZSB0byBzZWFyY2ggZnJvbSBpZiBzcGVjaWZpZWQuIENoZWNrCiAJZm9yIHN0YXRpYyBtZXRob2QgcmVmZXJlbmNlIHdoZXJlIGZvcmJpZGRlbi4gQXBwZW5kIHByaW1hcnkgb3IKIAljdXJyZW50X3RoaXMgdG8gdGhlIGFyZ3VtZW50IGxpc3QgaWYgbm90IGNhbGxpbmcgY29uc3RydWN0b3Igbm9yCiAJc3RhdGljIG1ldGhvZHMuCgkoY2hlY2tfZm9yX3N0YXRpY19tZXRob2RfcmVmZXJlbmNlKTogTmV3IGZ1bmN0aW9uLgoJKHBhdGNoX2ludm9rZSk6IExheW91dCB0aGUgY2xhc3Mgb24gd2hpY2ggbmV3IGlzIGRvbmUgaWYKIAluZWNlc3NhcnkuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBDaGFuZ2VkIGZvcm1hdCB0byByZXBvcnQgZXJyb3JzIG9uCiAJbWV0aG9kcy4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogTmV3IGxvY2FsIHZhcmlhYmxlIHRoaXNfZm91bmQuIE5vdwogCWhhbmRsZSB0aGluZ3MgZnJvbSBwcmltYXJpZXMuIE1ldGhvZCBjYWxsIGFyZSBjb25zaWRlcmVkCiAJZXhwcmVzc2lvbiBuYW1lcy4KCShpZGVudGljYWxfc3VicGF0aF9wKTogTlVMTF9UUkVFIGFyZ3VtZW50cyB0byBicmVha2Rvd25fcXVhbGlmaWVkCiAJY2hhbmdlZCBpbnRvIE5VTExzLgoJKG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCk6IENvbXBseSB3aXRoIHRoZSBuZXcgREVDTF9QLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IE5ldyBjYXNlIGZvIFJFVFVSTl9FWFBSLiBQcm9jZXNzIGZ1bmN0aW9uCiAJY2FsbCBhcmd1bWVudHMgaW4gc2VwYXJhdGUgZnVuY3Rpb24uCgkoY29tcGxldGVfZnVuY3Rpb25fYXJndW1lbnRzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uKTogRG9uJ3QgdXNlIENBTExfRVhQUl9GUk9NX1BSSU1BUllfUAogCWFueW1vcmUuCgkocGF0Y2hfYXNzaWdubWVudCk6IFRha2UgdGhlIHJldHVybiBmdW5jdGlvbiBzbG90IGludG8gYWNjb3VudCBhcwogCWEgUkhTLiBEaXN0aW5ndWlzaCBhc3NpZ25tZW50IGZyb20gYSByZXR1cm4uCgkodmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wKTogVXNlIGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlCiAJd2hlbiBjaGVja2luZyBtZXRob2RzIGluIGludGVyZmFjZXMuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IE5VTEwgYXJndW1lbnQgdG8gdW5yZXNvbHZlX3R5cGVfcAogCWluc3RlYWQgb2YgTlVMTF9UUkVFLgoJKHBhdGNoX25ld2FycmF5KTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoJKGJ1aWRfdGhpcyk6IEJ1aWxkIGEgV0ZMIHdpdGggYGt3X3RoaXMnIGluc3RlYWQgb2YgYSBGSUVMRF9ERUNMLgoJKGJ1aWxkX3JldHVybiwgcGF0Y2hfcmV0dXJuKTogTmV3IGZ1bmN0aW9ucy4KCSogdHlwZWNrLmMgKGxvb2t1cF9qYXZhX2NvbnN0cnVjdG9yKTogRml4ZWQgdHlwbyBpbiBjb21tZW50LgoKVHVlIEp1bCAyMSAxMjoxMDowNCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChmaW5kX25hbWVfYW5kX3R5cGVfY29uc3RhbnQsIGZpbmRfZmllbGRyZWZfaW5kZXgsCglmaW5kX21ldGhvZHJlZl9pbmRleCk6ICBOZXcgbWV0aG9kcy4KCSogZXhwci5jIChidWlsZF9pbnZva2Vfbm9uX2ludGVyZmFjZSk6ICBJZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMsCglqdXN0IHJldHVybiBnaXZlbiBtZXRob2QuICBBbHNvLCByZW5hbWUgdG8gYnVpbGRfa25vd25fbWV0aG9kX3JlZi4KCShleHBhbmRfaW52b2tlKTogIFJlbmFtZSBjYWxsIHRvIGJ1aWxkX2ludm9rZV9ub25faW50ZXJmYWNlLgoJKiBqYXZhLXRyZWUuaCwgcGFyc2UuaDogIFVwZGF0ZSBwcm90b3R5cGUuCgkqIHBhcnNlLnksIGRlY2wuYywgamNmLXBhcnNlLmM6ICBTdXBwcmVzcyBjYWxscyB0byBiYWNrLWVuZCBmdW5jdGlvbnMKIAkoc3VjaCBhcyBleHBhbmRfZXhwcl9zdG10KSBpZiBmbGFnX2VtaXRfY2xhc3NfZmlsZXMuCgkqIGpjZi13cml0ZS5jIChSRVNFUlZFLCBPUDEsIE9QMiwgT1A0LCBOT1RFX1BVU0gsIE5PVEVfUE9QLAoJU1RBQ0tfVEFSR0VULCBJR05PUkVfVEFSR0VUKTogIE5ldyBtYWNyb3MuCiAJKGNvZGVfYnVmZmVyLCBjb2RlX3B0ciwgY29kZV9saW1pdCwgY29kZV9TLCBjb2RlX1NQX21heCk6ICBOZXcgZ2xvYmFscy4KCShnZW5lcmF0ZV9ieXRlY29kZV9pbnNuKTogIE5ldyBmdW5jdGlvbiB0byBnZW5lcmF0ZSBtZXRob2QncyBieXRlY29kZS4KCShnZW5lcmF0ZV9jbGFzc2ZpbGUpOiAgTm9kZSBnZW5lcmF0ZSBDb2RlIGF0dHJpYnV0ZSBmb3IgYSBtZXRob2QuCgkoY29kZV9idWZmZXJfZ3JvdywgcHVzaF9jb25zdGFudDEsIHB1c2hfY29uc3RhbnQyLCBwdXNoX2ludF9jb25zdCwKCXB1c2hfbG9uZ19jb25zdCwgZmllbGRfb3AsIGFkanVzdF90eXBlZF9vcCwgbWF5YmVfd2lkZSk6CglOZXcgZnVuY3Rpb25zIHVzZWQgYnkgZ2VuZXJhdGVfYnl0ZWNvZGVfaW5zbi4KCgkqIHR5cGVjay5jIChzaWduYXR1cmVfaW5jbHVkZV9yZXR1cm4pOiAgUmVtb3ZlIHZhcmlhYmxlLgoJKHB1c2hfamF2YV9hcmd1bWVudF9zaWduYXR1cmUsIGJ1aWxkX2phdmFfYXJndW1lbnRfc2lnbmF0dXJlKTogIE5ldy4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6ICBVc2UgcHVzaF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZS4KCSogcGFyc2UueTogIFVzZSBidWlsZF9qYXZhX2FyZ3VtZW50X3NpZ25hdHVyZSBpbnN0ZWFkIG9mIGZpZGRsaW5nCgl3aXRoIHNpZ25hdHVyZV9pbmNsdWRlX3JldHVybi4KCkZyaSBKdWwgMTcgMDk6NDg6NTEgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2phdmFoLmMgKHByaW50X2NfZGVjbCk6IEFsd2F5cyBnZW5lcmF0ZSBKQXJyYXk8PiogZm9yIGFycmF5Cgl0eXBlcy4KCgkqIE1ha2VmaWxlLmluIChhbGwuaW5kaXJlY3QpOiBBZGRlZCBnamF2YWgkKGV4ZWV4dCkuCgkoZ2phdmFoJChleGVleHQpKTogQWRkZWQgJChleGVleHQpLgoJKGNsZWFuKTogTGlrZXdpc2UuCgpUaHUgSnVsIDE2IDE1OjI5OjIwIDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogQ2FsbCB0byBqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MgcmVwbGFjZQogCWJ5IHNhZmVfbGF5b3V0X2NsYXNzLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2Vzcyk6IFJlbW92ZWQgc3RhdGljIHN0b3JhZ2UKIAljbGFzcyBpbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCShidWlsZF9qYXZhX2FycmF5bnVsbF9jaGVjayk6IExpa2V3aXNlLgoJQWxzbyBmaXhlZCB0eXBvcyBpbiB0d28gY29tbWVudHMuCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogSW5pdGlhbGl6ZSBzdGF0aWMgZ2xvYmFsIGt3X2xlbmd0aC4KCShqYXZhX2xleCk6IFVzZSBCVUlMRF9PUEVSQVRPUiBvbiBSRVRVUk5fVEsuCgkqIGxleC5oIChKQVZBX0ZMT0FUX1JBTkdFX0VSUk9SKTogQWRkIGV4dHJhIGFyZ3VtZW50IHRvCiAJamF2YV9sZXhfZXJyb3IuCgkoSkFWQV9JTlRFR1JBTF9SQU5HRV9FUlJPUik6IExpa2V3aXNlLgoJKiBwYXJzZS5oIChyZXNvbHZlX25vX2xheW91dCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uCgkoZ2V0X2lkZW50aWZpZXJfaW5fc3RhdGljKTogRGVjbGFyYXRpb24gcmVtb3ZlZC4KCShqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MpOiBGdW5jdGlvbiBuYW1lIGRlY2xhcmF0aW9uIGNoYW5nZWQgdG8KIAlzYWZlX2xheW91dF9jbGFzcy4KCShidWlsZF9uZXdhcnJheV9ub2RlLCBwYXRjaF9uZXdhcnJheSwgcmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCwKIAlub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3AsIGJ1aWxkX3RoaXMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uCiAJZGVjbGFyYXRpb25zLgoJKHB1c2hkZWNsX2ZvcmNlX2hlYWQsIGJ1aWxkX2phdmFfYmlub3AsIGludF9maXRzX3R5cGVfcCwKIAliaW5hcnlfbnVtZXJpY19wcm9tb3Rpb24sIHN0YWJpbGl6ZV9yZWZlcmVuY2UsCiAJYnVpbGRfZGVjbF9ub19sYXlvdXQsIGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBFeHRlcm4gZnVuY3Rpb24KIAlkZWNsYXJhdGlvbnMgbW92ZWQgaW50byB0aGVpciBvd24gc2VjdGlvbi4KCShidWlsZF9uZXdhcnJheSwgYnVpbGRfYW5ld2FycmF5LCBidWlsZF9qYXZhX2FycmF5X2xlbmd0aF9hY2Nlc3MsCiAJYnVpbGRfamF2YV9hcnJheW51bGxfY2hlY2spOiBOZXcgZXh0ZXJuIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KCShVTkFSWV9QTFVTX0VYUFIpOiBNYWNybyByZW5hbWVkIGludG8gSkFWQV9VTkFSWV9QTFVTX0VYUFIuCgkoSkFWQV9ORVdfQVJSQVlfRVhQUiwgSkFWQV9ORVdfQ0xBU1NfRVhQUiwgSkFWQV9USElTX0VYUFIpOiBOZXcKIAlmYWtlIHRyZWUgY29kZXMuCgkoQ0FMTF9DT05TVFJVQ1RPUl9QKTogTmV3IG1hY3JvLgoJKiBwYXJzZS55IChrd19sZW5ndGgpOiBOZXcgc3RhdGljIGdsb2JhbCB0cmVlIG5vZGUuCgkocmV0dXJuX3N0YXRlbWVudCk6IFRhZ2dlZCA8bm9kZT4uCgkoUkVUVVJOX1RLKTogVGFnZ2VkIDxvcGVyYXRvcj4uCgkodmFyaWFibGVfZGVjbGFyYXRvcl9pZDopOiBCdWlsZCB2YXJpYWJsZSBkZWNsYXJhdGlvbiB3aXRoIGFuCiAJZW1wdHkgaW5pdGlhbGl6YXRpb24gdmFsdWUgaWYgYSBzeW50YXggZXJyb3Igd2FzIGZvdW5kIGluIHRoZQogCWluaXRpYWxpemF0aW9uIHBhcnQgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgoJKHN0YXRlbWVudF93aXRob3V0X3RyYWlsaW5nX3N1YnN0YXRlbWVudDopOiByZXR1cm5fc3RhdGVtZW50OiBub3cKIAl1c2VzIHRoZSBkZWZhdWx0IHJ1bGUuCgkocmV0dXJuX3N0YXRlbWVudDopOiBUZW1wb3JhcmlseSBmaXhlZCB0byByZXR1cm4gTlVMTF9UUkVFLgoJKHByaW1hcnlfbm9fbmV3X2FycmF5Oik6IENhbGwgYnVpbGRfdGhpcyB3aGVuIFRISVNfVEsgd2FzIHBhcnNlZC4KCShjbGFzc19pbnN0YW5jZV9jcmVhdGlvbl9leHByZXNzaW9uOik6IENsYXNzIGNyZWF0aW9uIHJ1bGVzIG5vdwogCWNhbGwgYnVpbGRfbWV0aG9kX2ludm9jYXRpb24gdXBvbiByZWR1Y3Rpb24uCgkoYXJyYXlfY3JlYXRpb25fZXhwcmVzc2lvbjopOiBSdWxlcyBjYWxsIGJ1aWxkX25ld2FycmF5X25vZGUgdXBvbgogCXJlZHVjdGlvbi4KCShkaW1fZXhwcnM6KTogQnVpbGQgYSBsaXN0IG9mIGRpbWVuc2lvbiBleHByZXNzaW9ucy4KCShkaW1fZXhwcjopOiBTdG9yZSBsb2NhdGlvbiBvZiB0aGUgT1NCX1RLIGluIHRoZSBkaW1lbnNpb24KIAlleHByZXNzaW9uIG5vZGUuCgkobWV0aG9kX2ludm9jYXRpb246KTogQWRkZWQgYSBuZXcgZXJyb3IgcnVsZS4KCShidWlsZF91bnJlc29sdmVkX2FycmF5X3R5cGUpOiBXRkwgYXJndW1lbnQgbWF5IGFsc28gYmUgYW4gYXJyYXkKIAlvbiBhIHByaW1pdGl2ZSB0eXBlLiBOYW1lIG9mIHRoZSBhcmd1bWVudCBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhpcy4KCShtZXRob2RfZGVjbGFyYXRvcik6IEluc2VydCBhcmd1bWVudCB0eXBlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAJYXJndW1lbnQgdHlwZSBsaXN0IGFuZCBsYXRlciByZXZlcnNlIHRoZSBsaXN0LgoJKHVucmVzb2x2ZWRfdHlwZV9wKTogQXJndW1lbnQgJ3JldHVybmVkJyBtYXkgYmUgb3B0aW9uYWxseQogCU5VTExfVFJFRS4KCShqYXZhX2xheW91dF9jbGFzc19mcm9tX3NvdXJjZSk6IEZ1bmN0aW9uIHJlbmFtZWQKIAlzYWZlX2xheW91dF9jbGFzcy4KCShyZXNvbHZlX2FuZF9sYXlvdXQpOiBOb3cgY2FsbCByZXNvbHZlX25vX2xheW91dCBhbmQKIAlzYWZlX2xheW91dF9jbGFzcy4KCShyZXNvbHZlX25vX2xheW91dCk6IE5ldyBmdW5jdGlvbi4KCShwdXJpZnlfdHlwZV9uYW1lKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBsZXRlX2NsYXNzX3JlcG9ydF9lcnJvcnMpOiBDYWxsIHB1cmlmeV90eXBlX25hbWUgZHVyaW5nIGVycm9yCiAJcmVwb3J0IG9uIGEgdHlwZSBub3QgZm91bmQuCgkocHJvY2Vzc19pbXBvcnRzKTogZXJyb3JfZm91bmQgbG9jYWwgdmFyaWFibGUgZG9lc24ndCBuZWVkIHRvIGJlCiAJaW5pdGlhbGl6ZWQgdG8gemVyby4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IE5ldyBsb2NhbCB0eXBlX3dmbC4gRml4ZWQgdHlwbyBpbiBlcnJvcgogCW1lc3NhZ2UuIHR5cGVfd2ZsIGFzc2lnbmVkIHRvIHVucmVzb2x2ZWQgdHlwZSBhbmQgdXNlZCB0byByZWdpc3RlcgogCWluY29tcGxldGUgdHlwZS4gQnVpbGQgYSBXRkwgYXJvdW5kIHRoZSB2YXJpYWJsZSBpbml0aWFsaXphdGlvbgogCXN0YXRlbWVudCBzbyB0aGF0IGRlYnVnIGluZm8gY2FuIGJlIGdlbmVyYXRlZCBvbiBpdC4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBSZXZlcnNlIGFyZ3VtZW50IGxpc3QgYWZ0ZXIgdGhleSd2ZQogCWJlZW4gcHJvY2Vzc2VkLgoJKGN1cnJlbnRfdGhpcyk6IE5ldyBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBTZXQgY3VycmVudF90aGlzIHdoZW4gYXBwcm9wcmlhdGUuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBCdWlsZCBjb3JyZWN0IHN0YXRpYyBhbmQgbm9uIHN0YXRpYwogCWZpZWxkIGFjY2VzcyBiZWFyaW5nIGEgc2ltcGxlIG5hbWUuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MpOiBSZXNvbHZlIHRoZSBsZW5ndGggZmllbGQgb2YgYXJyYXlzLiBIYW5kbGUKIAlmLm0oKSBjYXNlcy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogU2V0IHRoZSB0eXBlIG9mIHRoZSBtZXRob2QKIAlpbnZvY2F0aW9uIHRvIGVycm9yX21hcmtfbm9kZS4gVGhpcyB2YWx1ZSBpcyBsYXRlciBvdmVycmlkZGVuIGJ5IGEKIAl2YWxpZCB0eXBlLCBpZiBhbnkuIERvbid0IGhhbmRsZSBxdWFsaWZpZWQgY29uc3RydWN0b3IgaW52b2NhdGlvbgogCWFzIHF1YWxpZmllZCBtZXRob2QgaW52b2NhdGlvbi4gQ2FsbCBsb29rdXBfbWV0aG9kX2ludm9rZSB3aXRoIGl0cwogCW5ldyBmbGFnLiBJdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBzZWxlY3RlZCBtZXRob2QKIAlhcyB0aGUgdmFsdWUgb2YgYSB0cmVlIGxpc3QuIEhhbmRsZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLgoJKHBhdGNoX2ludm9rZSk6IFJldmVyc2UgYXJndW1lbnQgbGlzdCB3aGVuIGludm9raW5nIG5vbiBpbnRlcmZhY2UKIAltZXRob2RzLiBJbnNlcnQgY2FsbCB0byBuZXcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZQogCWNvbnN0cnVjdG9yLgoJKGludm9jYXRpb25fbW9kZSk6IFJldHVybiBhIElOVk9LRV9TVEFUSUMgaXMgdGhlIGludm9rZWQgbWV0aG9kIGlzCiAJZGVmaW5lZCB3aXRoaW4gYSBmaW5hbCBjbGFzcy4gUmV0dXJuIElOVk9LRV9TVEFUSUMgaWYgdGhlIGludm9rZWQKIAltZXRob2QgaXMgYSBjb25zdHJ1Y3Rvci4KCShsb29rdXBfbWV0aG9kX2ludm9rZSk6IE5ldyBsYyBhcmd1bWVudCBpcyBhIGZsYWcgdG8gaW5kaWNhdGUgYQogCWNvbnN0cnVjdG9yIGxvb2t1cC4gTm93IGhhbmRsZSBjb25zdHJ1Y3RvciBsb29rdXAuIENob29zZSB0aGUgbW9zdAogCXNwZWNpZmljIG1ldGhvZCBpbiBjYXNlIHNldmVyYWwgd2VyZSBtYXRjaGluZyB0aGUgaW52b2NhdGlvbgogCXJlcXVpcmVtZW50cy4gUmV0dXJuIGEgbWV0aG9kIGRlY2wgaW5zdGVhZCBvZiBhIHRyZWUgbGlzdCBmZWF0dXJpbmcKIAlvbmUgc2luZ2xlIG1ldGhvZCBkZWNsIGVsZW1lbnQuCgkocmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogTmV3IGxjIGZsYWcgYXJndW1lbnQgdG8KIAlpbmRpY2F0ZSB0aGF0IGEgY29uc3RydWN0b3IgaXMgYmVpbmcgbG9va2VkIHVwLgoJKG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCk6IE5ldyBmdW5jdGlvbi4KCShqYXZhX2NvbXBsZXRlX3RyZWUpOiBOb3cgcHJvY2VzcyBmYWtlIHRyZWUgY29kZXMKIAlKQVZBX05FV19BUlJBWV9FWFBSLCBKQVZBX05FV19DTEFTU19FWFBSIGFuZCBKQVZBX1RISVNfRVhQUi4gQ2FsbAogCXNhdmVfZXhwciBvbiByZXNvbHZlZCBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cy4gQ2FzZSBvbgogCVVOQVJZX1BMVVNfRVhQUiBjaGFuZ2VkIGludG8gYSBjYXNlIG9uIEpBVkFfVU5BUllfUExVU19FWFBSLgoJKHBhdGNoX2Fzc2lnbm1lbnQpOiBMSFMgY2FuIGJlIGEgZmllbGQgYWNjZXNzIGV4cHJlc3Npb24uIFdoZW4KIAlkZWFsaW5nIHdpdGggcmVmZXJlbmNlLCBsaHNfdHlwZSBpcyB0aGUgcHJvbW90ZWQgdHlwZSBvZiB0aGUKIAlyaHNfdHlwZSwgbm90IHRoZSBSSFMuIFVzZSBub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3Agd2hlcmUKIAlhcHBsaWNhYmxlLgoJKG9wZXJhdG9yX3N0cmluZyk6IEpBVkFfVU5BUllfUExVU19FWFBSIHJlcGxhY2VzIFVOQVJZX1BMVVNfRVhQUi4KCShwYXRjaF9iaW5vcCk6IFVzZSBub3RfaW5pdGlhbGl6ZWRfYXNfaXRfc2hvdWxkX3Agd2hlcmUKIAlhcHBsaWNhYmxlLgoJKGJ1aWxkX3VuYXJ5b3ApOiBKQVZBX1VOQVJZX1BMVVNfRVhQUiByZXBsYWNlcyBVTkFSWV9QTFVTX0VYUFIuCgkocGF0Y2hfdW5hcnlvcCk6IExpa2V3aXNlLiBBbmQgdXNlIG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcAogCXdoZXJlIGFwcGxpY2FibGUuCgkocmVzb2x2ZV90eXBlX2R1cmluZ19wYXRjaCk6IE5ldyBmdW5jdGlvbi4KCShwYXRjaF9jYXN0KTogQ2FsbCByZXNvbHZlX3R5cGVfZHVyaW5nX3BhdGNoIHRvIHJlc29sdmUgdHlwZSBhbmQKIAlyZXBvcnQgZXJyb3IgYWNjb3JkaW5nbHkuCgkocGF0Y2hfYXJyYXlfcmVmKTogVXNlIG5vdF9pbml0aWFsaXplZF9hc19pdF9zaG91bGRfcCB3aGVyZQogCWFwcGxpY2FibGUuIEFycmF5IGJhc2UgZXhwcmVzc2lvbiBpcyBzYXZlZCBiZWZvcmUgYmVpbmcKIAl1c2VkLiBQcm9tb3RlIHRoZSB0eXBlIG9mIGFuIGFycmF5IGVsZW1lbnRzIGlmIGl0IGNvbnRhaW5zIG5vbgogCWJ1aWx0aW4gdHlwZXMuCgkoYnVpbGRfbmV3YXJyYXlfbm9kZSwgcGF0Y2hfbmV3YXJyYXksIGJ1aWxkX3RoaXMpOiBOZXcgZnVuY3Rpb25zLgoKVGh1IEp1bCAxNiAxMDo0Njo0NyAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnamF2YWguYyAocHJpbnRfY19kZWNsKTogVVRGOF9HRVQgaW5jcmVtZW50cyBwb2ludGVyOyBkb24ndAoJaW5jcmVtZW50IGl0IGluIGBmb3InIHN0YXRlbWVudC4KCShwcmludF9maWVsZF9pbmZvKTogSWYgbnVtYmVyIGlzIGluZiBvciBuYW4sIGRvbid0IHByaW50IGl0LgoJKHByaW50X21ldGhvZF9pbmZvKTogSWYgbWV0aG9kIG5hbWUgaXMgYGRlbGV0ZScsIGp1c3QgaWdub3JlIGl0LgoJKHByaW50X2NfZGVjbCk6IFNwZWNpYWwtY2FzZSBqc3RyaW5nQXJyYXkuCgoJKiBnamF2YWguYyAoaGVscCk6IE5ldyBmdW5jdGlvbi4KCShub19hcmd1bWVudCk6IE5ldyBmdW5jdGlvbi4KCSh1c2FnZSk6IENoYW5nZWQgdGV4dC4KCShtYWluKTogUmV3cm90ZSBhcmd1bWVudCBoYW5kbGluZy4gIE5vdyBoYW5kbGVzIC12LCAtLWhlbHAsCgktLXZlcnNpb24uCgkodmVyc2lvbik6IE5ldyBmdW5jdGlvbi4KCShmb3VuZF9lcnJvcik6IE5ldyBnbG9iYWwuCgkobWFpbik6IFJldHVybiBmb3VuZF9lcnJvci4KCShnZW5lcmF0ZV9hY2Nlc3MpOiBTZXQgZm91bmRfZXJyb3IuCgkocHJpbnRfY19kZWNsKTogTGlrZXdpc2UuCgpXZWQgSnVsIDE1IDEwOjM2OjI3IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9jX2RlY2wpOiBEb24ndCBwcmludCAiLCIgd2hlbiBleGFtaW5pbmcgZmllbGQuCglTa2lwIHR5cGUgbmFtZSB3aGVuIGxvb2tpbmcgYXQgIltMIiB0eXBlcy4KCShwcm9jZXNzX2ZpbGUpOiBOb3cgc3RhdGljLgoJKGdlbmVyYXRlX2FjY2Vzcyk6IE5vdyByZXR1cm5zIGludC4KCShsYXN0X2FjY2Vzc19nZW5lcmF0ZWQpOiBOZXcgZ2xvYmFsLgoJKHByb2Nlc3NfZmlsZSk6IENsZWFyIGxhc3RfYWNjZXNzX2dlbmVyYXRlZDsgbWFrZSBtdWx0aXBsZSBwYXNzZXMKCW92ZXIgdGhlIGNsYXNzLgoJKHByaW50X2ZpZWxkX2luZm8pOiBKdXN0IHJldHVybiBpZiBnZW5lcmF0ZV9hY2Nlc3MgcmV0dXJucyB0cnVlLgoJKHByaW50X21ldGhvZF9pbmZvKTogTGlrZXdpc2UuICBBbHNvLCBhbGxvdyA8aW5pdD4gZnVuY3Rpb25zIHRvCglwYXNzIHRocm91Z2guCgkocHJpbnRfY19kZWNsKTogQWRkZWQgaXNfaW5pdCBhcmd1bWVudC4gIFByaW50IGNvbnN0cnVjdG9ycwoJcHJvcGVybHkuCgkocHJpbnRfY3h4X2NsYXNzbmFtZSk6IFVzZSBVVEY4X0dFVCB0byBleHRyYWN0IGNoYXJhY3RlcnMgZnJvbQoJc3RyaW5nLgoJKHByaW50X2Jhc2VfY2xhc3NuYW1lKTogTmV3IGZ1bmN0aW9uLgoJKHByaW50X2NsYXNzX2RlY2xzKTogTmV3IGZ1bmN0aW9uLgoJKHByb2Nlc3NfZmlsZSk6IFVzZSBpdC4KCSh1dGY4X2NtcCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBKdWwgMTMgMTQ6MjE6NDcgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBGb3JtYXQgY2hhbmdlZCB0byBtYXRjaCBjaGFuZ2VzIGluIGdjYy90b3BsZXYuYwoJdG8gaW1wbGVtZW50IGEgLS1oZWxwIG9wdGlvbi4KCjE5OTgtMDctMTAgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUmV2ZXJ0IGNoYW5nZSB0byBkdGFibGVfdHlwZS4KClRodSBKdWwgIDkgMTg6MjI6MTIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQ0xBU1NfUCk6ICBDaGFuZ2VkIERFQ0xfTEFOR19GTEFHXzcgLT4gVFlQRV9MQU5HX0ZMQUdfNC4KCjE5OTgtMDctMDggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IENMQVNTX0xPQURFRF9QIG9uIGR0YWJsZV90eXBlLgoKCSogbGFuZy5jIChsYW5nX2luaXQpOiBEZWZhdWx0IGZsYWdfZXhjZXB0aW9ucyB0byAxLCB3aXRob3V0CgljaGVja2luZyB0byBzZWUgaWYgaXQncyAyIGZpcnN0LgoKV2VkIEp1bCAgOCAwMzowMTozMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25zdGFudHMuYzogSW5jbHVkZSAic3lzdGVtLmgiLgoJKiBkZWNsLmM6IExpa2V3aXNlLgoJKiBsYW5nLmMgKGZsYWdfbmV3X2V4Y2VwdGlvbnMpOiBHZXQgdmlhIGV4dGVybiBub3cuCgkobGFuZ19pbml0X29wdGlvbnMpOiBOZXcgZnVuY3Rpb25zLiAgVHVybiBvbiBmbGFnX25ld19leGNlcHRpb25zLgoKVHVlIEp1bCAgNyAxMjo1Njo0OCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGxleC5jIChqYXZhX2xleCk6IFJldHVybiAwIHdoZW4gd2Ugc2VlIGFuIGludmFsaWQgY2hhcmFjdGVyIGluCiAJdGhlIGlucHV0LgoKCSogbGV4LmMgKGphdmFfcmVhZF9jaGFyKTogU3BlY2lmeSBleHRyYSBhcmd1bWVudCB3aGVuIGNhbGxpbmcKIAlqYXZhX2xleF9lcnJvci4KCShqYXZhX3JlYWRfdW5pY29kZSwgamF2YV9wYXJzZV9lbmRfY29tbWVudCwKIAlqYXZhX3BhcnNlX2VzY2FwZV9zZXF1ZW5jZSk6IExpa2V3aXNlLAoJKGphdmFfbGV4KTogU3BlY2lmeSBleHRyYSBhcmd1bWVudCB3aGVuIGNhbGxpbmcKIAlqYXZhX2xleF9lcnJvci4gVGVzdCB0aGF0IElEcyBhcmUgYmVnaW5uaW5nIHdpdGggYSBsZWdhbCBjaGFyYWN0ZXIKIAlmb3IgSURzLiBIYW5kbGUgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBhbmQgYQogCWNhbGwgdG8gamF2YV9sZXhfZXJyb3IuCgkoamF2YV9sZXhfZXJyb3IpOiBBZGp1c3QgY29sdW1uIHBvc2l0aW9uIGJ5IG5ldyBhcmd1bWVudAogCWBmb3J3YXJkJy4gSXNzdWUgYW4gZXJyb3IgZXZlbiBpZiBpbiB0aGUgbWlkZGxlIG9mIHJlcG9ydGluZyBhbgogCW90aGVyIGVycm9yLgoKMTk5OC0wNy0wNyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogWmVybyBvdXQgQlVGRkVSIGJlZm9yZSB3ZSB1c2UgaXQsIHNpbmNlCgl3ZSBkb24ndCBleHBsaWNpdGx5IHB1dCBhIG51bGwgcG9pbnRlciB3aGVuIHdlJ3JlIGNvcHlpbmcgaXQuCgpUdWUgSnVsICA3IDA5OjM4OjM4IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdqYXZhaC5jIChwcmludF9jeHhfY2xhc3NuYW1lKTogTmV3IGZ1bmN0aW9uLgoJKHN1cGVyX2NsYXNzX25hbWUpOiBMaWtld2lzZS4KCShwcmludF9zdXBlcl9maWVsZHMpOiBSZW1vdmVkLgoJKGluX3N1cGVyKTogUmVtb3ZlZC4KCShwcmludF9maWVsZF9pbmZvKTogTmV2ZXIgZ2VuZXJhdGUgI2RlZmluZXMuCgkocHJpbnRfY19kZWNsKTogQ2hhbmdlZCBnZW5lcmF0ZWQgdHlwZXMgdG8gbWF0Y2ggSk5JLiAgTm8gbG9uZ2VyCglwcmludCBjbGFzcyBuYW1lIGJlZm9yZSBtZXRob2QgbmFtZS4KCShwcmludF9tZXRob2RfaW5mbyk6IFByaW50ICJzdGF0aWMiIGJlZm9yZSBzdGF0aWMgbWV0aG9kcy4KCVByaW50ICJ2aXJ0dWFsIiBiZWZvcmUgbm9uLWZpbmFsIG1ldGhvZHMuCgkodXNhZ2UpOiBVc2UgZXhpdCgxKSwgbm90IGV4aXQoLTEpLgoJKG1haW4pOiBMaWtld2lzZS4KCShwcmludF9maWVsZF9pbmZvKTogVXNlICUuMTdnIHRvIHByaW50IGEgZG91YmxlLgoJKGxhc3RfYWNjZXNzKTogTmV3IGdsb2JhbHMuCgkocHJvY2Vzc19maWxlKTogSW5pdGlhbGl6ZSBsYXN0X2FjY2Vzcy4KCSh1c2FnZSk6IE5vdyBzdGF0aWMuCgkoQUNDX1ZJU0lCSUxJVFkpOiBOZXcgZGVmaW5lLgoJKGdlbmVyYXRlX2FjY2Vzcyk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9maWVsZF9pbmZvKTogQ2FsbCBpdC4KCShwcmludF9tZXRob2RfaW5mbyk6IExpa2V3aXNlLiAgQWxzbywgZ2VuZXJhdGUgaW5mb3JtYXRpb24gZm9yIGFsbAoJbWV0aG9kcywgbm90IGp1c3QgbmF0aXZlIG1ldGhvZHMuICBSZXR1cm4gdm9pZC4KCShwcmludF9jX2RlY2wpOiBSZXR1cm4gdm9pZC4KCShwcmludF9maWVsZF9pbmZvKTogUmV0dXJuIHZvaWQuCgpUaHUgSnVsICAyIDE2OjUzOjE2IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEpBVkFCSVNPTkZMQUdTKTogU3BlY2lmaWMgZmxhZyBmb3IgYmlzb24gd2hlbgogCXByb2Nlc3NpbmcgdGhlIGpjMSBncmFtbWFyIGZpbGUuIFByZWZpeCBiaXNvbiBmdW5jdGlvbnMgYW5kCiAJdmFyaWFibGVzIHdpdGggamF2YV8uCgkocGFyc2UuYyk6IERlcGVuZGVuY2llcyBvbiBwYXJzZS5oIGFuZCBsZXguaAoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBGdW5jdGlvbiBub3cgZ2xvYmFsLgoJKiBqYXZhLXRyZWUuaDogQ29tbWVudCByZW9yZ2FuaXplZCB0byBjYXJyeSBvbiBwcmV2aW91cwogCWNsYXNzaWZpY2F0aW9uIGVmZm9ydC4KCShSRVNPTFZFX0VYUFJFU1NJT05fTkFNRV9QLCBSRVNPTFZFX1BBQ0tBR0VfTkFNRV9QLAogCVJFU09MVkVfVFlQRV9OQU1FX1ApOiBOZXcgZmxhZ3Mgb24gV0ZMcy4KCSogamNmLXBhcnNlLmMgKHBhcnNlX3NvdXJjZV9maWxlKTogamF2YV9wYXJzZV9zb3VyY2VfZmlsZSByZW5hbWVkCiAJamF2YV9wYXJzZSAobmV3IHByZWZpeCBqYXZhXyBnZW5lcmF0ZWQgYnkgYmlzb24pLgoJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcywgamF2YV9yZWdpc3Rlcl9wYXJzZWRfY2xhc3MpOiBGdW5jdGlvbgogCWNhbGwgcmVtb3ZlZC4KCSh5eXBhcnNlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBjYWxsIHRvIGluaXRfb3V0Z29pbmdfY3Bvb2wuCgkqIGxleC5jIChzdGF0aWMgdHJlZSB3Zmxfb3ApOiBWYXJpYWJsZSBkZWxldGVkLgoJKGphdmFfaW5pdF9sZXgpOiBJbml0aWFsaXplIGt3X3N1cGVyIGFuZCBrd190aGlzLiBJbml0aWFsaXplIG1vcmUKIAljdHhwIGZpZWxkcyB0byBOVUxMX1RSRUUuCgkoamF2YV9sZXgpOiBObyBsb25nZXIgY3JlYXRlIFdGTCBmb3Igb3BlcmF0b3JzLiBGaWxlbmFtZSBjYWNoaW5nCiAJbWVjaGFuaXNtIGRlbGV0ZWQuIENhbGwgQlVJTERfT1BFUkFUT1IgZm9yIGAuJywgJygnLCAnWycuIFN0cmluZ3MKIAljcmVhdGVkIGFzIFNUUklOR19DU1QgYW5kIGxhdGVyIGV4cGFuZGVkLiBSZW1vdmVkIGV4dHJhIGFyZ3VtZW50CiAJdG8gQlVJTERfT1BFUkFUT1IgYW5kIEJVSUxEX09QRVJBVE9SMi4gQnVpbGQgb3BlcmF0b3JzIGZvciBUSElTCiAJYW5kIFNVUEVSLgoJKGJ1aWxkX3dmbF9ub2RlKTogUmVtb3ZlZCBjb2RlIGluIGNvbW1lbnRzLgoJKiBsZXguaCAoQlVJTERfT1BFUkFUT1IsIEJVSUxEX09QRVJBVE9SMik6IE5vIGxvbmdlciBidWlsZCBhIFdGTCBidXQKIAlzdG9yZSB0b2tlbiBhbmQgbG9jYXRpb24gZGF0YSBpbiB0aGUgY3VycmVudCBiaXNvbiB0b2tlbi4KCSogcGFyc2UuaDogUmVtb3ZlZCBwcmUtcHJvY2Vzc29yIGJhc2VkIHN5bWJvbCBwcmVmaXhlcyBoYWNrLiBNb3ZlZAogCXN0YXRpYy9leHRlcm4gZnVuY3Rpb24gZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCShzdHJ1Y3QgcXVhbGlmaWNhdGlvbik6IERhdGEgc3RydWN0dXJlIGRlZmluaXRpb24gZGVsZXRlZC4KCShSRVNPTFZFX0NIQUlOX1JFTUFJTkRFUik6IE1hY3JvIGRlZmluaXRpb24gZGVsZXRlZC4KCShxdWFsaWZ5X2FtYmlndW91c19uYW1lKTogRnVuY3Rpb24gZGVjbGFyYXRpb24gbW9kaWZpZWQuIEZ1bmN0aW9uCiAJbm93IHJldHVybnMgbm90aGluZy4KCShidWlsZF9hcnJheV9yZWYsIHBhdGNoX2FycmF5X3JlZiwgbWFrZV9xdWFsaWZpZWRfbmFtZSwKIAlyZXNvbHZlX3F1YWxpZmllZF9leHByZXNzaW9uX25hbWUsIG1heWJlX2dlbmVyYXRlX2NsaW5pdCwKIAlyZXNvbHZlX2ZpZWxkX2FjY2Vzcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBOZXcgZXh0ZXJuIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgoJKGVudW0geyBSRVNPTFZFX0VYUFJFU0lPTl9OQU1FLi4ufSk6IEVudW0gZGVsZXRlZC4KCShDQUxMX0VYUFJfUFJJTUFSWSk6IE1hY3JvIGRlbGV0ZWQuCgkoRVhQUl9XRkxfUVVBTElGSUNBVElPTiwgUVVBTF9XRkwsIFFVQUxfUkVTT0xVVElPTik6IE5ldyBtYWNyb3MuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogRmllbGQgaW5pdGlhbGl6ZWRfZmluYWwKIAlyZW1vdmVkLiBub25fc3RhdGljX2luaXRpYWxpemVkLCBzdGF0aWNfaW5pdGlhbGl6ZWQ6IE5ldyBmaWVsZHMuCgkqIHBhcnNlLnkgKHN0YXRpYyB0cmVlIGt3X3N1cGVyLCBzdGF0aWMgdHJlZSBrd190aGlzKTogTmV3IGdsb2JhbAogCXN0YXRpYy4KCSgldW5pb24pOiB0cmVlIHdmbCBmaWVsZCBvZiBvcGVyYXRvciBtZW1iZXIgcmVwbGFjZWQgYnkgaW50CiAJbG9jYXRpb24uIFdGTHMgYXJlIG5vbiBsb25nZXIgY3JlYXRlZCBmb3Igb3BlcmF0b3JzLgoJKE9TQl9USywgRE9UX1RLLCBUSElTX1RLLCBTVVBFUl9USyk6IFRhZ2dlZCA8b3BlcmF0b3I+LgoJKHF1YWxpZmllZF9uYW1lOik6IE5vdyBjYWxscyBtYWtlX3F1YWxpZmllZF9uYW1lIHRvIGJ1aWxkIHRoZQogCWlkZW50aWZpZXIuCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDb25zaWRlciBnZW5lcmF0aW5nIDxjbGluaXQ+IHdoZW4gY2xhc3MKIAlwYXJzaW5nIGNvbXBsZXRlZC4KCSh2YXJpYWJsZV9kZWNsYXJhdG9yOik6IERpcmVjdGx5IGJ1aWxkIGFuIGFzc2lnbm1lbnQgbm9kZSB3aGVuIHRoZQogCXZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHdoZW4gZGVjbGFyZWQuCgkodGhpc19vcl9zdXBlcjopOiBCdWlsZCBhIFdGTCBhbmQgc2V0IGN1cnJlbnQgbG9jYXRpb24gd2hlbiBUSElTCiAJb3IgU1VQRVIgYXJlIHBhcnNlZC4KCShleHByZXNzaW9uX3N0YXRlbWVudDopOiBXcmFwIHN0YXRlbWVudCBhcm91bmQgYSBXRkwuCgkocHJpbWFyeV9ub19uZXdfYXJyYXk6KTogRml4ZWQgdHlwby4gQ2hhbmdlZCB2YWx1ZSByZXR1cm5lZCBieQogCVRISVNfVEsgYmVjYXVzZSBvZiBpdHMgbmV3IHR5cGUgKHRlbXBvcmFyeSkuCgkoZGltX2V4cHJzOik6IFRlbXBvcmFyeSBmaXggYmVjYXVzZSBvZiBPU0JfVEsncyBuZXcgdHlwZS4KCShmaWVsZF9hY2Nlc3M6KTogQnVpbGQgcXVhbGlmaWVkIG5hbWUgd2l0aCBTVVBFUi4KCShtZXRob2RfaW52b2NhdGlvbjopOiBGaXhlZCByZXR1cm5lZCB2YWx1ZSBiZWNhdXNlIG9mIFNVUEVSJ3MgbmV3CiAJdHlwZS4KCShhcnJheV9hY2Nlc3M6KTogVXNlIE9TQl9USyBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KCShwb3N0X2luY3JlbWVudF9leHByZXNzaW9uOiwgcG9zdF9kZWNyZW1lbnRfZXhwcmVzc2lvbjosCiAJdW5hcnlfZXhwcmVzc2lvbjosIHByZV9pbmNyZW1lbnRfZXhwcmVzc2lvbjosCiAJcHJlX2RlY3JlbWVudF9leHByZXNzaW9uOiwgdW5hcnlfZXhwcmVzc2lvbl9ub3RfcGx1c19taW51czosCiAJY2FzdF9leHByZXNzaW9uOiwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbjosCiAJYWRkaXRpdmVfZXhwcmVzc2lvbjosIHNoaWZ0X2V4cHJlc3Npb246LCByZWxhdGlvbmFsX2V4cHJlc3Npb246LAogCWVxdWFsaXR5X2V4cHJlc3Npb246LCBhbmRfZXhwcmVzc2lvbjosIGV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uOiwKIAlpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbjosIGNvbmRpdGlvbmFsX2FuZF9leHByZXNzaW9uOiwKIAljb25kaXRpb25hbF9vcl9leHByZXNzaW9uOiwgYXNzaWdubWVudDopOiBVc2UgbmV3IGxvY2F0aW9uL3Rva2VuCiAJaW5mb3JtYXRpb24gYXZhaWxhYmxlIG9uIG9wZXJhdG9ycy4KCShjcmVhdGVfY2xhc3MpOiBTZXQgc3VwZXJfZGVjbF90eXBlIHRvIE5VTExfVFJFRSB3aGVuIHByb2Nlc3NpbmcKIAlqYXZhLmxhbmcuT2JqZWN0LgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IEZpZWxkIGluaXRpYWxpemF0aW9uIGlzIG5vdyBhIE1PRElGWV9FWFBSCiAJbm9kZS4gQ2hhaW4gaW5pdGlhbGl6YXRpb24gY29kZSB0byB0aGUgbWF0Y2hpbmcgbGlzdHMgKGFjY29yZGluZwogCXRoZSB0aGUgZmllbGQgZGVjbGFyYXRpb24gbW9kaWZpZXJzKS4KCShtYXliZV9nZW5lcmF0ZV9jbGluaXQpOiBOZXcgZnVuY3Rpb24uCgkobWV0aG9kX2hlYWRlcik6IERvbid0IHNldCBtZXRob2QncyBERUNMX05BTUUgdG8gYSBXRkwgd2hlbiBhZGRpbmcKIAltZXRob2RzIHRvIGphdmEubGFuZy5PYmplY3QuCgkocmVzb2x2ZV9hbmRfbGF5b3V0KTogTm93IGNhbiByZXR1cm4gTlVMTF9UUkVFIGlmIHRoZSB0eXBlCiAJcmVzb2x1dGlvbiBmYWlscy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGNsYXNzIERFQ0wgaW5zdGVhZCBvZiBpdHMKIAlUWVBFLgoJKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBEb24ndCBwYXRjaCBtZXRob2QgREVDTF9OQU1FIGlmIGl0CiAJYmVsb25ncyB0byBqYXZhLmxhbmcuT2JqZWN0LgoJKHByb2Nlc3NfaW1wb3J0cyk6IFNpbXBseSBhc3NpZ24gZXJyb3JfZm91bmQgdG8gdGhlIHZhbHVlIHJldHVybmVkCiAJYnkgY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcy4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IERvbid0IHVzZSB0aGVpciBpbml0IHN0YXRlbWVudHMgKGlmCiAJYW55KSB3aGVuIHBhcnNpbmcgZXJyb3Igd2VyZSBwcmV2aW91c2x5IGZvdW5kLiBSZXVzZSBNT0RJRllfRVhQUgogCWJ1aWxkIGR1cmluZyBwYXJzaW5nIGFzIGFuIGluaXQgc3RhdGVtZW50LgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogTm93IHJldHVybiB0aGUgY3VycmVudCBtZXRob2QgYm9keS4KCShqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MsIGphdmFfcmVnaXN0ZXJfcGFyc2VkX2NsYXNzKTogRnVuY3Rpb25zCiAJcmVtb3ZlZC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogSW5pdGlhbGl6ZSB0aGUgY29uc3RhbnQgcG9vbCBvbiBhCiAJcGVyIGNsYXNzIGJhc2lzLiBMYXlvdXQgdGhlIGNsYXNzZXMgYmVmb3JlIGV4cGFuZGluZyB0aGVpciBtZXRob2QKIAlib2RpZXMuIERvbid0IHRyeSBleHBhbmQgYXJ0aWZpY2lhbCBjb25zdHJ1Y3RvciBjb2RlIGlmIGVycm9yIHdlcmUKIAlmb3VuZC4gTWFrZSB0aGUgY2xhc3NlcyBkYXRhIGFuZCByZWdpc3RlciB0aGVtIGlmIG5vIGVycm9yIHdlcmUKIAlmb3VuZC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBSZXRyaWV2ZSBhbiBhcnRpZmljaWFsIGNvbnN0cnVjdG9yCiAJYXJndW1lbnQgbGlzdCBiZWZvcmUgZW50ZXJpbmcgaXRzIGJvZHkuIEFzc2lnbiB0aGUgdG9wIGJsb2NrIHRvCiAJdGhlIGFydGlmaWNpYWwgY29uc3RydWN0b3IgZnVuY3Rpb24gYm9keSBhbmQgc2V0IHR5cGVzIG9mIGRlY2xhcmVkCiAJYmxvY2tzIGFuZCBjb21wb3VuZCBzdGF0ZW1lbnRzIHRvIHZvaWQuIFdhbGsgbWV0aG9kIGJvZHkgaWYgbm90IGFuCiAJYXJ0aWZpY2lhbCBjb25zdHJ1Y3Rvci4KCShtYWtlX3F1YWxpZmllZF9uYW1lLCBjdXRfaWRlbnRpZmllcl9pbl9xdWFsaWZpZWQpOiBOZXcgZnVuY3Rpb25zLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogRml4ZWQgY29tbWVudHMuIFNhdmUvcmVzdG9yZSB0aGUKIAljdXJyZW50IGNsYXNzIENMQVNTX0xPQURFRF9QIGZsYWcgdmFsdWUuIEJ1aWxkIG5vbiBxdWFsaWZpZWQKIAlzdGF0aWMgZmllbGQgYWNjZXNzIGFuZCBoYW5kbGUgcXVhbGlmaWVkIGV4cHJlc3Npb24gbmFtZXMuCgkocmVzb2x2ZV9maWVsZF9hY2Nlc3MsIHJlc29sdmVfcXVhbGlmaWVkX2V4cHJlc3Npb25fbmFtZSk6IE5ldwogCWZ1bmN0aW9ucy4KCShwYXRjaF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogVXNlIHRoZSBuZXcgZXhwcmVzc2lvbiByZXNvbHV0aW9uCiAJc2NoZW1lLCBjYWxsaW5nIHJlc29sdmVfZmllbGRfYWNjZXNzIHdoZW4gdGhlIGZ1bmN0aW9uIGNhbGwgaXMKIAlyZXNvbHZlZCBhcyBhbiBleHByZXNzaW9uLgoJKHF1YWxpZnlfYW1iaWd1b3VzX25hbWUpOiBGdW5jdGlvbiByZXdyaXR0ZW4gdG8gd29yayBvbiBxdWFsaWZpZWQKIAlleHByZXNzaW9uIHByb2R1Y2VkIGJ5IG1ha2VfcXVhbGlmaWVkX25hbWUuCgkoamF2YV9jb21wbGV0ZV90cmVlKTogUHJvbW90ZSB0eXBlIHdoZW4gZnVuY3Rpb24ncyBhcmd1bWVudCBhcmUKIAlSRUNPUkRfVFlQRXMuIFdoaWxlIHByb2Nlc3NpbmcgdGhlIE1PRElGWV9FWFBSIGNhc2U6IGRvbid0IHBhdGNoCiAJdGhlIGFzc2lnbm1lbnQgdG8gZGlzY292ZXIgZnVydGhlciBlcnJvcnMgaWYgUkhTIGlzIGEgZXhwcmVzc2lvbgogCW5hbWUgdGhhdCBmYWlscyB0byBldmFsdWF0ZS4gRGVjbGFyZSBMSFMgaW5pdGlhbGl6ZWQgZXZlbiB0aG91Z2gKIAl0aGUgYXNzaWdubWVudCBmYWlsZWQuIERvbid0IHVzZSB0aGUgbG9jYXRpb24gdmFyaWFibGUgYW5kIHJlbW92ZWQKIAlleHRyYSBhcmd1bWVudCBpbiBwYXRjaCBmdW5jdGlvbiBjYWxscy4gTm93IGhhbmRsZSB0aGUgQVJSQVlfUkVGCiAJY2FzZSBhbmQgYnVpbGQgaW50ZXJuYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdoZW4gU1RSSU5HX0NTVHMgYXJlCiAJd2Fsa2VkLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uKTogRG9uJ3Qgd3JhcCBmdW5jdGlvbiBjYWxsIGFyb3VuZCBhIFdGTC4KCShidWlsZF9hc3NpZ25tZW50KTogTGlrZXdpc2UuIFVzZSB0aGUgb3BlcmF0b3IgbG9jYXRpb24KIAlpbmZvcm1hdGlvbi4KCShwYXRjaF9hc3NpZ25tZW50KTogSGFuZGxlIGFycmF5IGFjY2VzcyBMSFNzLiBIYW5kbGUgZXJyb3IKIAlwcm92ZW5hbmNlLCByZXN1bHRpbmcgaW4gYSBiZXR0ZXIgZXJyb3IgcmVwb3J0LgoJKGJ1aWxkX2Jpbm9wKTogVXNlIG9wX2xvY2F0aW9uIGZyb20gb3BlcmF0b3IgYXMgYmlub3AgbG9jYXRpb24KIAlpbmZvcm1hdGlvbi4KCShidWlsZF91bmFyeW9wLCBidWlsZF9pbmNkZWMsIGJ1aWxkX2Nhc3QpOiBMaWtld2lzZS4KCShwYXRjaF9iaW5vcCk6IEV4dHJhY3QgbG9jYXRpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgbm9kZS4gRml4ZWQKIAl0eXBvIGluIGVycm9yIG1lc3NhZ2UuCgkocGF0Y2hfdW5hcnlfb3ApOiBFeHRyYWN0IGxvY2F0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIG5vZGUuCgkoYnVpbGRfYXJyYXlfcmVmLCBwYXRjaF9hcnJheV9yZWYpOiBOZXcgZnVuY3Rpb25zLgoKV2VkIEp1bCAgMSAxMzoxMTozNiAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX0lOU1RBTkNFT0YpOiBDaGFuZ2VkIGNhbGxpbmcgY29udmVudGlvbiB0bwoJbWF0Y2ggX0p2X0lzSW5zdGFuY2VPZi4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVzZSBfSnZfTmV3QXJyYXksIG5vdAoJc29mdF9uZXdhcnJheS4gIFVzZSBfSnZfSXNJbnN0YW5jZU9mLCBub3Qgc29mdF9pbnN0YW5jZW9mLgoKVHVlIEp1biAzMCAxNDoxMjo1NCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRnVuY3Rpb25zIGFyZSBub3cgbmFtZWQKCV9Kdl9Nb25pdG9yRW50ZXIgYW5kIF9Kdl9Nb25pdG9yRXhpdCwgYW5kIHJldHVybiBqaW50LgoKTW9uIEp1biAyOSAxNDo0NzoxMCAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oIChsb2FkX2NsYXNzKTogIEFkZCBwcm90b3R5cGUuCiAJKiBjbGFzcy5jIChpc19jb21waWxlZF9jbGFzcyk6ICBBZGQgbWlzc2luZyBhcmcgdG8gbG9hZF9jbGFzcy4KCSogZXhwci5jIChleHBhbmRfamF2YV9ORVcpOiAgQ2FsbCBsb2FkX2NsYXNzLgoJKiBwYXJzZS55IChwcm9jZXNzX2ltcG9ydCk6ICBSZW1vdmVkIGJvZ3VzIHVzZSBvZiB2b2lkIHJldHVybiB2YWx1ZS4KClRodSBKdW4gMjUgMTE6NTA6NDggMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oIChzb2Z0X2F0aHJvd19ub2RlKTogIFJlbmFtZWQgdG8gc29mdF9ub2RlLgoJRnVuY3Rpb24gbmFtZSBpcyAiX0p2X1Rocm93IiBpbnN0ZWFkIG9mICJzb2Z0X2F0aHJvdyIuCgkqIGRlY2wuYywgamF2YS10cmVlLmggKHNvZnRfbmV3X25vZGUpOiAgUmVuYW1lZCB0byBhbGxvY19vYmplY3Rfbm9kZS4KCUZ1bmN0aW9uIG5hbWUgaXMgIl9Kdl9BbGxvY09iamVjdCIgaW5zdGVhZCBvZiAic29mdF9uZXciLgoJVGFrZXMgYW4gZXh0cmEgcGFyYW1ldGVyIChvYmplY3Qgc2l6ZSkuCgkqIGV4cHIuYzogIFVwZGF0ZSBjYWxscy4KCldlZCBKdW4gMjQgMTM6NTk6MDIgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBsZXguYyAoamF2YV9nZXRfbGluZV9jb2wpOiAgSGFuZGxlIGVuZC1vZi1maWxlLgoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiAgSGFuZGxlIG51bGwgdHlwZSAoaS5lLiBmaW5hbGx5KS4KCldlZCBKdW4gMjQgMDk6MjI6MzQgRURUIDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGxhbmcuYyAobGFuZ19pbml0KTogTWFrZSAtZmV4Y2VwdGlvbnMgdGhlIGRlZmF1bHQuCgkqIGV4Y2VwdC5jIChtYXliZV9zdGFydF90cnksIG1heWJlX2VuZF90cnkpOiBEb24ndCBkbyBhbnl0aGluZyBpZgoJZXhjZXB0aW9uIGhhbmRsaW5nIGlzIG5vdCB0dXJuZWQgb24uCgpUdWUgSnVuIDIzIDEwOjE3OjA5IEVEVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBsYW5nLmMgKGZsYWdfbmV3X2V4Y2VwdGlvbnMpOiBNYWtlIHRoaXMgdGhpcyBkZWZhdWx0LgoJKiBkZWNsLmMgKGVuZF9qYXZhX21ldGhvZCk6IENhbGwgZW1pdF9oYW5kbGVycy4KCSogZXhjZXB0LmMgKG1ldGhvZF9pbml0X2V4Y2VwdGlvbnMpOiBTZXQgbGFuZ3VhZ2UgY29kZSBhbmQgdmVyc2lvbi4KCShleHBhbmRfc3RhcnRfamF2YV9oYW5kbGVyKTogRW5hYmxlIGV4Y2VwdGlvbiwgYW5kIGNhbGwKCWV4cGFuZF9laF9yZWdpb25fc3RhcnQuCgkoZXhwYW5kX2VuZF9qYXZhX2hhbmRsZXIpOiBFbmFibGUgZXhjZXB0aW9uLCBhbmQgc2V0IHVwIGNhdGNoIGJsb2Nrcy4KCShlbWl0X2hhbmRsZXJzKTogTmV3IHJvdXRpbmUgdG8gZ2VuZXJhdGUgdGhlIHNhdmVkIGhhbmRsZXJzLgoJKiBqYXZhLWV4Y2VwdC5oIChlbWl0X2hhbmRsZXJzKTogQWRkIHByb3RvdHlwZS4KCkZyaSBKdW4gMTIgMTE6MzE6MjQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJV2UgdXNlZCB0byBoYXZlIHRocmVlIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGNvbnN0YW50IHBvb2w6Cgl0aGUgQ1Bvb2wgc3RydWN0dXJlLCB0aGUgdHJlZV9jb25zdGFudF9wb29sLCBhbmQgdGhlIGNvbnN0cnVjdHVyZXMKCXVzZWQgdG8gYnVpbGQgdGhlIENsYXNzIG9iamVjdCAod2hpY2ggbWF5IG5lZWQgY2xhc3MgYW5kIHN0cmluZwoJY29uc3RhbnRzKSBpbiBjb21waWxlZCBjb2RlLiAgTm9uZSB3ZXJlIGFwcHJvcHJpYXRlIGZvciBjb21waWxpbmcKCXRvIC5jbGFzcyBmaWxlcywgc28gSSBkaWQgYSBtYWpvciBvdmVyaGF1bC4KCglGaXJzdCwgdGhlIHRyZWVfY29uc3RhbnRfcG9vbCBhcnJheSB3YXMgcmVtb3ZlZC4gIFRoaW5ncyB3ZXJlCgltb2RpZmllZCB0byB0aGUgQ1Bvb2wgc3RydWN0dXJlIGluIHRoZSBKQ0YgY291bGQgYmUgdXNlZC4KCVNlY29uZCwgYSAiY2FwYWNpdHkiIGZpZWxkIHdhcyBhZGRlZCB0byB0aGUgQ1Bvb2wsIGFuZCBmdW5jdGlvbnMKCXdyaXR0ZW4gdG8gc2VhcmNoIGZvciBhIG1hdGNoaW5nIGNvbnN0YW50LCBhZGRpbmcgb25lIGlmIG5vdCBmb3VuZC4KCVRoZSBjb2RlIHRoYXQgZ2VuZXJhdGVkIHRoZSBDbGFzcyBvYmplY3Qgd2FzIGNoYW5nZWQgdG8gdXNlIGEgQ1Bvb2wuCglUaGUgYWN0dWFsIFRSRUVfTElTVHMgdXNlZCB0byBidWlsZCB0aGUgQ09OU1RSVUNUT1JzIHVzZWQgZm9yCgl0aGUgc3RhdGljIENsYXNzIG9iamVjdCBhcmUgbm93IG9ubHkgaW4gYnVpbGRfY29uc3RhbnRzX2NvbnN0cnVjdG9yLgoJRmluYWxseSwgSSB3cm90ZSBjb2RlIHdoaWNoIGNhbiBnZW5lcmF0ZSBhIC5jbGFzcyBmaWxlIChpbmNsdWRpbmcgaXRzCgljb25zdGFudCBwb29sKSBmcm9tIHRoZSBSRUNPUkRfVFlQRSBvZiBhIGNsYXNzLiAgVGhpcyBpcyBhIGJpZyBzdGVwCglvbiB0aGUgd2F5IHRvIGNvbXBpbGluZyBKYXZhIHNvdXJjZSBpbnRvIC5jbGFzcyBmaWxlcy4KCgkqIGpjZi13cml0ZS5jOiAgTmV3IGZpbGUuIFdyaXRlcyBvdXQgYSBSRUNPUkRfVFlQRSBhcyBhIC5jbGFzcyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoSkFWQV9PQkpTKTogIEFkZGVkIGpjZi13cml0ZS5vLgoKCSogamF2YS10cmVlLmggKENQT09MX1VURiwgQ09OU1RBTlRfUmVzb2x2ZWRGbGFnLAoJQ09OU1RBTlRfUmVzb2x2ZWRTdHJpbmcsIENPTlNUQU5UX1Jlc29sdmVkQ2xhc3MpOiAgTmV3IG1hY3Jvcy4KCShOQU1FX0FORF9UWVBFX05BTUUsIE5BTUVfQU5EX1RZUEVfU0lHTkFUVVJFLCBDT01QT05FTlRfUkVGX05BTUUsCglDT01QT05FTlRfUkVGX05BTUVfQU5EX1RZUEUsIENPTVBPTkVOVF9SRUZfU0lHTkFUVVJFKTogUmVkZWZpbmVkLgoJKENPTVBPTkVOVF9SRUZfQ0xBU1MpOiAgUmVwbGFjZWQgYnkgQ09NUE9ORU5UX1JFRl9DTEFTU19JTkRFWC4KCShsYW5nX3R5cGUpOiAgUmVtb3ZlZCBjb25zdGFudF9wb29sIGZpZWxkLgoJKiBqY2YuaCAoQ1Bvb2wpOiAgUmVuYW1lZCBzaXplIHRvIGNvdW50LiAgQWRkZWQgZmllbGQgY2FwYWNpdHkuCgkoQ1BPT19DT1VOVCwgQ1BPT0xfVUlOVCwgQ1BPT0xfVVNIT1JUMSwgQ1BPT0xfVVNIT1JUMiwKCUNQT09MX0ZJTklTSCwgQ1BPT0xfSU5JVCwgQ1BPT0xfUkVJTklUKTogIE5ldyBtYWNyb3MuCglSZXdyaXRlIHNvbWUgb2YgdGhlIG9sZCBKQ0ZfWFhYIGluIHRlcm1zIG9mIENQT09MX1hYWCBtYWNyb3MuCgoJKiBjb25zdGFudHMuYyAoY3VycmVudF9jb25zdGFudF9wb29sX3RhZ3MsIGN1cnJlbnRfY29uc3RhbnRfcG9vbF9kYXRhLAoJY3VycmVudF9jb25zdGFudF9wb29sX2xlbmd0aCksIGphdmEtdHJlZS5oOiBSZXBsYWNlZCBieSBvdXRnb2luZ19jcG9vbC4KCSogY29uc3RhbnRzLmMgKGJ1aWxkX2NvbnN0YW50c19jb25zdHJ1Y3Rvcik6ICBVc2UgbmV3IG91dGdvaW5nX2Nwb29sLgoJKHNldF9jb25zdGFudF9lbnRyeSwgZmluZF9jb25zdGFudDEsIGZpbmRfY29uc3RhbnQyLAoJZmluZF9jbGFzc19jb25zdGFudCwgY291bnRfY29uc3RhbnRfcG9vbF9ieXRlcywgd3JpdGVfY29uc3RhbnRfcG9vbCwKCWZpbmRfdXRmOF9jb25zdGFudCwgZmluZF9jbGFzc19vcl9zdHJpbmdfY29uc3RhbnQpOiAgTmV3IGZ1bmN0aW9ucy4KCgkqIGpjZi1wYXJzZS5jIChsb2FkX2NsYXNzKTogIERvbid0IHNhdmUvcmVzdG9yZSB0cmVlLWNvbnN0YW50X3Bvb2wuCiAJKGdldF9jb25zdGFudCk6ICBVc2UgY3VycmVudF9qY2YuY3Bvb2wgaW5zdGVhZCBvZiB0cmVlX2NvbnN0YW50X3Bvb2wuCgkoZ2l2ZV9uYW1lX3RvX2NsYXNzLCBnZXRfY2xhc3NfY29uc3RhbnQpOiAgTGlrZXdpc2UuCgkqIGpjZi1wYXJzZS5jLCBqYXZhLXRyZWUuaCAodHJlZV9jb25zdGFudF9wb29sKTogIFJlbW92ZWQuCiAJKGdldF9uYW1lX2FuZF90eXBlX2NvbnN0YW50LCBnZXRfcmVmX2NvbnN0YW50KTogIFJlbW92ZWQuCgkqIHBhcnNlLmggKHBhcnNlcl9jdHh0KTogIFJlbW92ZSBmaWVsZCB0cmVlX2NvbnN0YW50X3Bvb2wuCgkqIHBhcnNlLnk6ICBEb24ndCBzYXZlL3Jlc3RvcmUgdHJlZV9jb25zdGFudF9wb29sLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVXBkYXRlIGZvciBuZXcgYXBwcm9hY2guCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSwgZXhwYW5kX2phdmFfZmllbGRfb3ApOiBMaWtld2lzZS4KCgkqIGxhbmctb3B0aW9ucy5oOiAgQWRkZWQgLWZlbWl0LWNsYXNzLWZpbGUsIC1mZW1pdC1jbGFzcy1maWxlcy4KCSogbGFuZy5jIChmbGFnX2VtaXRfY2xhc3NfZmlsZXMpLCBqYXZhLXRyZWUuaDogIE5ldyBmbGFnLgoJKGxhbmdfZl9vcHRpb25zKTogIEFkZGVkICJlbWl0LWNsYXNzLWZpbGUocykiLgoKCSogZXhwci5jIChidWlsZF9qYXZhX2FycmF5YWNjZXNzKTogIEdlbmVyYXRlIG1vcmUgZWZmaWNpZW50IGFycmF5Cglib3VuZHMgY2hlY2tpbmcsIGJ5IHVzaW5nIHVuc2lnbmVkIGNvbXBhcmUuCgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgUmUtYXJyYW5nZSBlcnJvciBjaGVja3MgdG8gbWFrZSBtb3JlIHJvYnVzdC4KCldlZCBKdW4gMTAgMTc6MzQ6NDIgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5oOiBOZXcgY29tbWVudCBvbiB0aGUgaGFuZGxpbmcgb2YgdW5yZXNvbHZlZCB0eXBlCiAJaWRlbnRpZmllcnMuIEpERVBzIGFyZSBub3cgcGFydCBvZiB0aGUgamRlcF9jb2RlIGVudW0uCgkodHlwZWRlZiBzdHJ1Y3QgamRlcCk6IE5vdyB1c2UgZW51bSBqZGVwX2NvZGUgb3IgaW50LCBkZXBlbmRpbmcgb24KIAlhdmFpbGFiaWxpdHkuIEJvdGggYXJlIG5hcnJvd2VkIGRvd24gdG8gYW4gOCBiaXRzIGJpdGZpZWxkLgoJKENBTExfRVhQUl9QUklNQVJZKTogRml4ZWQgY29tbWVudC4KCldlZCBKdW4gMTAgMTA6NTQ6MzkgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhKTogQWRkZWQgZ2phdmFjIGFuZCBqdmdlbm1haW4uCgkoamF2YS5zdGFydC5lbmNhcCk6IERlcGVuZCBvbiBnamF2YWMuCgkoamF2YS5yZXN0LmVuY2FwKTogRGVwZW5kIG9uIGp2Z2VubWFpbi4KCgkqIE1ha2UtbGFuZy5pbiAoSkFWQV9JTlNUQUxMX05BTUUpOiBOYW1lIGlzIGdqYXZhYywgbm90IGMrKy4KCShKQVZBX0NST1NTX05BTUUpOiBMaWtld2lzZS4KCShqYXZhLmFsbC5idWlsZCk6IERlcGVuZCBvbiBqdmdlbm1haW4gYW5kIGdqYXZhYy4KCShqYXZhLmFsbC5jcm9zcyk6IERlcGVuZCBvbiBqdmdlbm1haW4gYW5kIGdqYXZhYy1jcm9zcy4KCShqdmdlbm1haW4kKGV4ZWV4dCkpOiBOZXcgdGFyZ2V0LgoJKGphdmEuaW5zdGFsbC1jb21tb24pOiBXcm90ZS4KCSogY29uZmlnLWxhbmcuaW4gKGNvbXBpbGVycywgc3RhZ2VzdHVmZik6IEFkZGVkIGdqYXZhYyBhbmQKCWp2Z2VubWFpbi4KCldlZCBKdW4gMTAgMTI6MTk6MDQgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBOZXcgYXJnYy9hcmd2IGludGVyZmFjZS4KClR1ZSBKdW4gIDkgMTg6MTI6NDYgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBDaGFuZ2VMb2c6IEZpeGVkIGVudHJpZXMgbm90IGNvbXBsaWFudCB3aXRoIHRoZSBHbnUgQ29kaW5nIFN0YW5kYXJkLgoJKiBkZWNsLmMgKGJ1aWxkX2RlY2xfbm9fbGF5b3V0KTogTmV3IGZ1bmN0aW9uLgoJKiBleHByLmMgKGphdmFfbGFuZ19leHBhbmRfZXhwcik6IExheW91dCBkZWNsYXJhdGlvbnMgZm91bmQgaW4KIAlibG9ja3MgYmVmb3JlIHRoZXkncmUgcHVzaGVkLgoJKiBqY2YtcGFyc2UuYyAobG9hZF9jbGFzcyk6IFNhdmUgY3VycmVudCBsaW5lIHdoZW4gcGFyc2luZyBjbGFzcwogCWZpbGUuCgkocGFyc2Vfc291cmNlX2ZpbGUpOiBSZWdpc3RlciBjbGFzcyBiZWZvcmUgZXhwYW5kaW5nIHRoZWlyCiAJbWV0aG9kcy4KCSogbGFuZy5jIChwdXRfZGVjbF9ub2RlKTogUHJvZHVjZSBgbnVsbCcgd2hlbiBgdm9pZCAqJyBpcwogCXByb2Nlc3NlZC4KCSogbGV4LmMgKHN0YXRpYyB0cmVlIHdmbF9vcCk6IE5ldyBzdGF0aWMgZ2xvYmFsLCBmb3IgZXJyb3IgcmVwb3J0CiAJb24gY2FzdHMuCgkoamF2YV9pbml0X2xleCk6IHdmbF9vcGVyYXRvciBhbmQgd2ZsX29wIGluaXRpYWxpemVkCiAJaGVyZS4gRmlsZW5hbWUgY2FjaGluZyBhZGRlZCBmb3Igd2ZsX29wLiBSZXR1cm4gd2ZsX29wIHdoZW4gYCgnIGlzCiAJcGFyc2VkLgoJKiBwYXJzZS5oIChidWlsZF91bmFyeW9wLCBidWlsZF9pbmNkZWMsIHBhdGNoX3VuYXJ5b3AsIGJ1aWxkX2Nhc3QsCiAJcGF0Y2hfY2FzdCwgdmFsaWRfcmVmX2Fzc2lnbmNvbnZfY2FzdF9wLCBjYW5fY2FzdF90b19wLAogCWJ1aWxkX3VucmVzb2x2ZWRfYXJyYXlfdHlwZSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgkoYnVpbGRfZGVjbF9ub19sYXlvdXQpOiBOZXcgZXh0ZXJuIGZ1bmN0aW9uIGRlY2xhcmVkLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcpOiBSZXBvcnQgZXJyb3Igb25seSBpZiB0aGUgV0ZMIG9mIHRoZQogCWZhdWx0eSBtb2RpZmllciBleGlzdHMuCgkoVFlQRV9JTlRFUkZBQ0VfUCwgVFlQRV9DTEFTU19QKTogTmV3IG1hY3Jvcy4KCShFUlJPUl9DQVNUX05FRURFRF9UT19JTlRFR1JBTCk6IEVycm9yIG1lc3NhZ2UgdHVuZWQuCgkoVU5BUllfUExVU19FWFBSKTogTmV3IGZha2Ugb3BlcmF0b3IuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogTmV3IGZpZWxkIG9zYl9udW1iZXIuCgkqIHBhcnNlLnkgKHN0YXRpYyB0cmVlIHdmbF9vcGVyYXRvcik6IE5ldyBzdGF0aWMgV0ZMIGZvciBvcGVyYXRvcgogCWJvdW5kIGVycm9yIG1lc3NhZ2VzLgoJKERFQ1JfVEssIElOQ1JfVEspOiBNb3ZlZC4KCShPUF9USyk6IFRhZ2dlZCA8b3BlcmF0b3I+LgoJKGFycmF5X3R5cGU6KTogTm93IGNhbGwgYnVpbGRfdW5yZXNvbHZlZF9hcnJheV90eXBlLgoJKGRpbV9leHByOik6IENvdW50IHRoZSBudW1iZXIgb2YgJ1snIHNlZW4uCgkocG9zdF9pbmNyZW1lbnRfZXhwcmVzc2lvbiwgcG9zdF9kZWNyZW1lbnRfZXhwcmVzc2lvbiwKIAlwcmVfaW5jcmVtZW50X2V4cHJlc3Npb24sIHByZV9kZWNyZW1lbnRfZXhwcmVzc2lvbiwKIAl1bmFyeV9leHByZXNzaW9uX25vdF9wbHVzX21pbnVzLCB1bmFyeV9leHByZXNzaW9uOik6IEFjdGlvbnMgYXJlCiAJbm93IGJ1aWxkaW5nIHRoZSBjb3JyZXNwb25kaW5nIHVuYXJ5IGV4cHJlc3Npb25zLgoJKGNhc3RfZXhwcmVzc2lvbjopOiBBY3Rpb25zIGFyZSBub3cgYnVpbGRpbmcgY2FzdCBleHByZXNzaW9ucy4KCShidWlsZF91bnJlc29sdmVkX2FycmF5X3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY3JlYXRlX2ludGVyZmFjZSk6IFJlc2V0IHRoZSBudW1iZXIgb2YgZGVjbGFyZWQgaW50ZXJmYWNlcy4KCShjcmVhdGVfY2xhc3MpOiBMaWtld2lzZS4KCShtZXRob2RfaGVhZGVyKTogTWV0aG9kcyBkZWNsYXJlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGFuIGludGVyZmFjZQogCWFyZSBub3cgaW1wbGljaXRseSBzZXQgcHVibGljIGFuZCBhYnN0cmFjdC4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogVmFyaWFibGUncyBhbmQgcGFyYW1ldGVyJ3MgdHlwZSBhcmUgcGF0Y2hlZAogCXdpdGggYSBwcm9tb3RlZCB0eXBlLgoJKGRlY2xhcmVfbG9jYWxfdmFyaWFibGVzKTogUmVzb2x2ZWQgbm9uIGJ1aWx0aW4gdHlwZXMgYXJlIHByb21vdGVkCiAJYmVmb3JlIGJlaW5nIHVzZWQgdG8gYnVpbGQgYSB2YXJpYWJsZSBkZWNsLiBSZW1vdmVkIHR5cGUgcGF0Y2gKIAlwb3N0ZWQgb24gdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gc3RhdGVtZW50LgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFVzZSBidWlsZF9kZWNsX25vX2xheW91dCB0byBidWlsZCB0aGUKIAlkZWNsIG9mIGEgcGFyYW1ldGVyIG9mIGluY29tcGxldGUgdHlwZS4KCShqYXZhX3JlZ2lzdGVyX3BhcnNlZF9jbGFzcyk6IFByb2Nlc3MgaW50ZXJmYWNlcyB0b28uIENhbGwKIAlyZXN0X29mX2RlY2xfY29tcGlsYXRpb24gb24gZWFjaCBwcm9jZXNzZWQgY2xhc3MgZGVjbGFyYXRpb25zLgoJKGphdmFfY29tcGxldGVfZXhwYW5kX21ldGhvZHMpOiBEb24ndCBhdHRlbXB0IHRvIGV4cGFuZCB0aGluZ3MgaW4KIAlpbnRlcmZhY2VzLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IFByb2Nlc3MgQ09OVkVSVF9FWFBSLCBldmVuIHRob3VnaCBpdCBhbHdheXMKIAloYXMgYSB0eXBlLiBQcm9wYWdhdGUgZXJyb3JfbWFya19ub2RlIHRvIG5vZGUncyB0eXBlIHRvby4gUHJvbW90ZQogCW1ldGhvZCdzIGNhbGwgYXJndW1lbnQgdHlwZSBhbmQgcmV0dXJuIGVycm9yX21hcmtfbm9kZSBpZgogCWFyZ3VtZW50J3MgY29tcGxldGlvbiBkaWRuJ3Qgd29yay4gTU9ESUZZX0VYUFIgY2FuIGhhdmUgYSBXRkwgYXMgYQogCVJIUy4gRml4ZWQgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBib2d1cyBSSFMgb2YgYSBmaXhlZCB0eXBlLiBOb3cKIAloYW5kbGUgdW5hcnkgb3BlcmF0b3Igbm9kZXMuCgkoYnVpbGRfYXNzaWdubWVudCk6IEFkZGVkIGNvbW1lbnQuCgkocHJpbnRfaW50X25vZGUpOiBOZXcgZnVuY3Rpb24uCgkocGF0Y2hfYXNzaWdubWVudCk6IE5ldyBzZWNvbmQgYXJndW1lbnQuIE5ldyBlcnJvciBoYW5kbGluZy4gVXNlCiAJcHJpbnRfaW50X25vZGUuIEhhbmRsZSByZWZlcmVuY2VzLiBVc2UgY2FuX2Nhc3RfdG9fcCB0byBpc3N1ZQogCWRpZmZlcmVudCBlcnJvciBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUgY29udGV4dCBhbmQgY2hlY2sgdXBvbgogCXRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgUkhTLgoJKGNhbl9jYXN0X3RvX3AsIHZhbGlkX3JlZl9hc3NpZ25jb252X2Nhc3RfcCk6IE5ldyBmdW5jdGlvbnMuCgkob3BlcmF0b3Jfc3RyaW5nKTogSGFuZGxlIG1vcmUgb3BlcmF0b3JzLgoJKHBhdGNoX2Jpbm9wKTogTm8gbG9uZ2VyIHVzZSBhIGZ1bmN0aW9uIHN0YXRpYwogCXdmbF9vcGVyYXRvci4gSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBvbiBzaGlmdCBkaXN0YW5jZS4KCShidWlsZF91bmFyeW9wLCBidWlsZF9pbmNkZWMsIGJ1aWxkX2Nhc3QsIHBhdGNoX3VuYXJ5b3AsCiAJcGF0Y2hfY2FzdCk6IE5ldyBmdW5jdGlvbnMuCgpGcmkgSnVuICA1IDE4OjAzOjA3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSoganZzcGVjLmM6ICBOZXcgZmlsZS4KCSogTWFrZS1sYW5nLmluOiAgTmV3IHJ1bGVzIHRvIGJ1aWxkIGdqYXZhYyBmcm9tIGp2c3BlYy5jIGFuZCAuLi9nY2MuYy4KCgkqIGphdmEtdHJlZS5oIChpZGVudGlmaWVyX3N1YnN0KTogIEFkZCBkZWNsYXJhdGlvbi4KClRodSBKdW4gIDQgMTM6NDQ6MjMgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSoganZnZW5tYWluLmMgKG1haW4pOiBHZW5lcmF0ZSBjYWxsIHRvIEp2UnVuTWFpbi4KCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6IFB1c2ggdmFsdWUgZm9yICJzeW5jX2luZm8iIGZpZWxkLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogUHVzaCAic3luY19pbmZvIiBmaWVsZC4KCldlZCBKdW4gIDMgMjA6Mzk6MTQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogIFNldCBUWVBFX05BTUUgdG8gYWN0dWFsCglKYXZhIChzb3VyY2UpIG5hbWUsIG5vdCBzaWduYXR1cmUuCglTZXQgVFlQRV9BTElHTiB0byAoYXQgbGVhc3QpIHRoYXQgb2YgZWxlbWVudF90eXBlLgoKVHVlIEp1biAgMiAxNToxOToxOSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmM6ICBNb3ZlZCBjbGFzc25hbWUtbWFuZ2xpbmctcmVrYXRlZCBjb2RlIHRvIC4uLgoJKiBtYW5nbGUuYzogIC4uLiB0aGlzIG5ldyBmaWxlLgoJKiBqdmdlbm1haW4uYzogIE5ldyBwcm9ncmFtIChuZWVkcyBtYW5nbGUuYykgdG8gZ2VuZXJhdGUgbWFpbiBwcm9ncmFtLgoJKiBNYWtlZmlsZS5pbjogIFVwZGF0ZSBmb3IgYWJvdmUgY2hhbmdlcy4KCk1vbiBKdW4gIDEgMDk6NTg6MzYgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKHRydXRodmFsdWVfY29udmVyc2lvbik6IENvbnZlcnQgaW50ZWdlciBhbmQgZmxvYXRpbmcKIAlwb2ludCB2YWx1ZSB0byB0aGVpciB0cnV0aCB2YWx1ZS4KCSogbGV4LmMgKGphdmFfbGV4KTogSGFuZGxlIHRoZSBgbnVsbCcgbGl0ZXJhbC4KCSogcGFyc2UuaCAoSlJFRkVSRU5DRV9UWVBFX1AsIERFQ0xfUCk6IE5ldyBtYWNyb3MuCgkoRVJST1JfQ0FOVF9DT05WRVJUX1RPX0JPT0xFQU4sIEVSUk9SX0NBTlRfQ09OVkVSVF9UT19OVU1FUklDLAogCUVSUk9SX0NBU1RfTkVFREVEX1RPX0lOVEVHUkFMLCBFUlJPUl9WQVJJQUJMRV9OT1RfSU5JVElBTElaRUQpOgogCU5ldyBtYWNyb3MuCgoJKiBwYXJzZS55OiBSZW9yZ2FuaXphdGlvbi9kb2N1bWVudGF0aW9uIG9uIHRva2VuIGRlY2xhcmF0aW9uLgoJKGJpbm9wX2xvb2t1cFtdKTogTmV3IGFkZGVkIG5ldyB0cmVlIGNvZGVzLgoJKHJlbGF0aW9uYWxfZXhwcmVzc2lvbik6IEJ1aWxkIGNvcnJlc3BvbmRpbmcgYmluYXJ5IG9wZXJhdG9ycy4KCShlcXVhbGl0eV9leHByZXNzaW9uLCBjb25kaXRpb25hbF9hbmRfZXhwcmVzc2lvbiwKIAljb25kaXRpb25hbF9vcl9leHByZXNzaW9uKTogTGlrZXdpc2UuCgkoamF2YV9jb21wbGV0ZV9jbGFzcyk6IEZpeCBjcmFzaCBpbiBkZWJ1ZyBtZXNzYWdlLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IENoZWNrIGluaXRpYWxpemF0aW9uIG9mIG1ldGhvZCBjYWxsCiAJYXJndW1lbnRzLiBGdXJ0aGVyIGJvZ3VzIG5vZGUgZXZhbHVhdGlvbiB0byBkZXRlY3QgbW9yZSBlcnJvcgogCWR1cmluZyBhc3NpZ25tZW50cy4gSGFuZGxlcyBtb3JlIGJpbmFyeSBvcGVyYXRvcnMuCgkocGF0Y2hfYXNzaWdubWVudCk6IFVzZSBERUNMX1AuCgkoYnVpbGRfYmlub3ApOiBGaXggY3Jhc2ggd2hlbiB1c2luZyBVUlNISUZUX0VYUFIsIGEgSmF2YSBvbmx5IHRyZWUKIAljb2RlLgoJKG9wZXJhdG9yX3N0cmluZyk6IEhhbmRsZSBtb3JlIGNhc2UuIENvbXBhY3RlZCBzb3VyY2UuCgkocGF0Y2hfYmlub3ApOiBDaGFuZ2VkIGZ1bmN0aW9uIGNvbW1lbnQuIENoZWNraW5nIGZvcgogCXVuaW5pdGlhbGl6ZWQgZmlyc3Qgb3BlcmFuZCB0YWtlcyB0aGUgY29tcG91bmQgYXNzaWdubWVudCBpbnRvCiAJYWNjb3VudCBhbmQgdXNlcyBERUNMX1AuIENoZWNraW5nIGZvciB1bmluaXRpYWxpemVkIHNlY29uZCBvcGVyYW5kCiAJZGVsYXllZCB0byByb3V0aW5lJ3MgZW5kLiBVc2UgbWFjcm9zIHRvIGlzc3VlIHR5cGUgYm91bmQgZXJyb3IKIAltZXNzYWdlcyBhbmQgaXNzdWUgbWVzc2FnZXMgb24gYm90aCBvcGVyYW5kcyBpZiB0aGVpciB0eXBlcyBhcmUKIAlkaWZmZXJlbnQuIEZvcmNlIGZpeGVkIHR5cGUgaW50byBub2RlLiBIYW5kbGUgYWxsIGJpbmFyeQogCW9wZXJhdG9ycy4KCldlZCBNYXkgMjcgMTA6MzA6MzEgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqYXZhLXRyZWUuaCAoQ09NUE9VTkRfQVNTSUdOX1AsIElOSVRJQUxJWkVEX1ApOiBOZXcgbWFjcm9zLgoJKiBsZXguYyAoamF2YV9sZXgpOiBVc2UgQlVJTERfT1BFUkFUT1IgYW5kIEJVSUxEX09QRVJBVE9SMiB0bwoJYnVpbGQgb3BlcmF0b3Igbm9kZSBhbmQgcmV0dXJuIHRva2Vucy4KCSogbGV4LmggKEJVSUxEX09QRVJBVE9SLCBCVUlMRF9PUEVSQVRPUjIpOiBOZXcgbWFjcm9zLgoJKiBwYXJzZS5oIChqYXZhX2NvbXBsZXRlX3RyZWUpOiBDaGFuZ2VkIHJldHVybmVkIHR5cGUgaW4gcHJvdG90eXBlLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uLCBidWlsZF9hc3NpZ25tZW50LCBwYXRjaF9hc3NpZ25tZW50LAogCXBhdGNoX2Jpbm9wKTogTmV3IHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkoSkZMT0FUX1RZUEVfUCwgSk5VTUVSSUNfVFlQRV9QLCBKUFJJTUlUSVZFX1RZUEVfUCwgSlNUUklOR19QLAogCUJVSUxEX0VYUFJfV0ZMKTogTmV3IG1hY3Jvcy4KCSogcGFyc2UueSAoZW51bSB0cmVlX2NvZGUgYmlub3BfbG9va3VwW10pOiBOZXcgc3RhdGljIGZvciB0b2tlbiB0bwogCVRSRUVfQ09ERSBsb29rdXAuCgkoJXVuaW9uKTogUGFyc2VyIHVuaW9uIGhhcyBuZXcgc3ViLXN0cnVjdHVyZSBgb3BlcmF0b3InLgoJKEFTU0lHTl9USywgTVVMVF9BU1NJR05fVEssIERJVl9BU1NJR05fVEssIFJFTV9BU1NJR05fVEssCglQTFVTX0FTU0lHTl9USywgTUlOVVNfQVNTSUdOX1RLLCBMU19BU1NJR05fVEssIFNSU19BU1NJR05fVEssCglaUlNfQVNTSUdOX1RLLCBBTkRfQVNTSUdOX1RLLCBYT1JfQVNTSUdOX1RLLCBPUl9BU1NJR05fVEssCglBU1NJR05fQU5ZX1RLKTogVG9rZW5zIHRhZ2dlZCBgb3BlcmF0b3InLgoJKEVRX1RLLCBHVEVfVEssIFpSU19USywgU1JTX1RLLCBHVF9USywgTFRFX1RLLCBMU19USywgQk9PTF9BTkRfVEssCiAJQU5EX1RLLCBCT09MX09SX1RLLCBPUl9USywgSU5DUl9USywgUExVU19USywgREVDUl9USywgTUlOVVNfVEssCiAJTVVMVF9USywgRElWX1RLLCBYT1JfVEssIFJFTV9USywgTkVRX1RLLCBORUdfVEssIFJFTF9RTV9USywKIAlSRUxfQ0xfVEssIE5PVF9USywgTFRfVEspOiBUb2tlbnMgdGFnZ2VkIGBvcGVyYXRvcicuCgkoYXNzaWdubWVudF9vcGVyYXRvcjopOiBSdWxlIHRhZ2dlZCBgb3BlcmF0b3InLgoJKGV4cHJlc3Npb25fc3RhdGVtZW50Oik6IFJlLWluc3RhbGxlZCBkZWZhdWx0IHJ1bGUuCgkobWV0aG9kX2ludm9jYXRpb246KTogU3ViIHJ1bGVzIGNhbGwgYnVpbGRfbWV0aG9kX2ludm9jYXRpb24uCgkocG9zdGZpeF9leHByZXNzaW9uOik6IERvbid0IGF0dGVtcHQgdG8gcmVzb2x2ZSBuYW1lIGhlcmUuIEp1c3QKIAlyZXR1cm4gYW4gSUQuCgkobXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbjopOiBTdWItcnVsZXMgYnVpbGQgY29ycmVzcG9uZGluZyBiaW5vcAogCWV4cHJlc3Npb24gbm9kZS4KCShhZGRpdGl2ZV9leHByZXNzaW9uOiwgc2hpZnRfZXhwcmVzc2lvbjosIGFuZF9leHByZXNzaW9uOiwKIAlleGNsdXNpdmVfb3JfZXhwcmVzc2lvbjosIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uOik6IExpa2V3aXNlLgoJKGFzc2lnbm1lbnQ6KTogU3ViIHJ1bGUgaW52b2tlIGJ1aWxkX2Fzc2lnbm1lbnQuCgkoYXNzaWdubWVudF9vcGVyYXRvcjopOiBEZWZhdWx0IHJ1bGVzIG9uIHN1YiBydWxlcy4KCShmb3JjZV9lcnJvcik6IEFkZGVkIGRvY3VtZW50YXRpb24gb24gdGhpcyB2YXJpYWJsZS4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IEJ1aWxkIGluaXRpYWxpemF0aW9uIGNhbGxpbmcKCWJ1aWxkX2Fzc2lnbm1lbnQuCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kKTogUmVtb3ZlZCB1bnVzZWQgcnR4IGRlY2xhcmF0aW9uLiBNYXJrCiAJYXJndW1lbnRzIGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQuCgkoamF2YV9tZXRob2RfYWRkX3N0bXQpOiBUeXBlIG9mIGJ1aWx0IENPTVBPVU5EX0VYUFIgc2V0IHRvIE5VTEwuCgkoamF2YV9jb21wbGV0ZV9leHBhbmRfbWV0aG9kcyk6IERvbid0IHByb2Nlc3MgbmV4dCBtZXRob2QgaWYKIAljb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBvbmUgdHJpZ2dlcmVkIGVycm9ycy4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBDYWxsIHNvdXJjZV9lbmRfamF2YV9tZXRob2QgaWYgbm8KIAllcnJvciB3ZXJlIGZvdW5kIGR1cmluZyBjb21wbGV0aW9uLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogVXNlIElERU5USUZJRVJfTE9DQUxfVkFMVUUgdG8gcmV0cmlldmUKIAlsb2NhbHMgZGVjbGFyYXRpbG9uLiBIYW5kbGUgbmFtZXMgZm91bmQgd2l0aGluIGEgY2xhc3MuIFJldHVybgogCWVycm9yX21hcmtfbm9kZSB3aGVuIHRoaW5ncyBhcmVuJ3QgZm91bmQuCgkocGF0Y2hfbWV0aG9kX2ludm9jYXRpb25fc3RtdCk6IFJldHVybiBlcnJvcl9tYXJrX25vZGUgb24gZmFpbHVyZXMuCgkocGF0Y2hfaW52b2tlKTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwuIFJldHVybiB0aGUgY29ycmVjdCBub2RlLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IE5vdyByZXR1cm5zIGEgdmFsdWUuIFRoZSBCTE9DSyBzZWN0aW9uIGJpbmRzCiAJbG9jYWwgaWRlbnRpZmllcnMgYW5kIHRoZSB0eXBlIG9mIGEgQkxPQ0sgaXMgbm93IHZvaWQuIEFzc2lnbiB0aGUKIAlyZXN1bHQgb2Ygb3BlcmFuZCBjb21wbGV0aW9uIG9uIENPTVBPVU5EX0VYUFIuIEFzc2lnbiB0aGUKIAllbmNhcHN1bGF0ZWQgbm9kZSBvZiBhIFdGTCB0byB0aGUgcmVzdWx0IG9mIGl0cyBjb21wbGV0aW9uLCBleGNlcHQKIAl3aGVuIHRoZSBub2RlIGlzIGFuIGlkZW50aWZpZXIuIE5vdyBoYW5kbGUgTU9ESUZZX0VYUFIgYW5kIHNldmVyYWwKIAliaW5hcnkgb3BlcmF0b3JzLiBSZXR1cm4gZXJyb3JfbWFya19ub2RlIG9uIGVycm9ycy4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbiwgYnVpbGRfYXNzaWdubWVudCwgcGF0Y2hfYXNzaWdubWVudCwKIAlidWlsZF9iaW5vcCwgb3BlcmF0b3Jfc3RyaW5nLCBwYXRjaF9iaW5vcCk6IE5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChiaW5hcnlfbnVtZXJpY19wcm9tb3Rpb24pOiBOZXcgZnVuY3Rpb24uCgpUaHUgTWF5IDIxIDEyOjAxOjA0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaWRlbnRpZmllcl9zdWJzdCk6ICBOZXcgY29udmVuaWVuY2Ugd3JhcHBlciBmb3IgaWRlbnRfc3Vic3QuCglSZXBsYWNlIG1vc3QgdXNlcyBvZiBpZGVudF9zdWJzdCBieSBpZGVudGlmaWVyX3N1YnN0LgoKCSogY2xhc3MuYyAocHVzaF9jbGFzc19zdGF0aWNfZHVtbXlfZmllbGQpOiAgUmVtb3ZlZCBmdW5jdGlvbi4KCShidWlsZF9jbGFzc19yZWYpOiAgRmluZCBDbGFzcyBvYmplY3QgZGVjbCBieSBsb29raW5nIHVwICJDTkFNRS5jbGFzcyIsCglpbnN0ZWFkIG9mIGxvb2tpbmcgZ290ICJjbGFzcyIgc3RhdGljIGZpZWxkLiAgQ3JlYXRlIHRoYXQgZGVjbCBoZXJlLgoJKGNsYXNzX2lkZW50aWZpZXJfbm9kZSk6ICBSZW1vdmVkOyAgbm8gbG9uZ2VyIG5lZWRlZC4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiAgRG9uJ3QgaW5pdCBjbGFzc19pZGVudGlmaWVyX25vZGUuCgkqIGpjZi1wYXJzZS5jIChqY2ZfcGFyc2UpOiAgRG9uJ3QgY2FsbCBwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZC4KCURvIG5yZXZlcnNlIDAgdGltZXMgKGluc3RlYWQgb2YgdHdpY2UpIGZvciBPYmplY3QgYW5kIENsYXNzLgoJKiBwYXJzZS55IChqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MpOiBObyBwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZC4KCldlZCBNYXkgMjAgMTY6MzU6MDQgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAocGFyc2VfY2xhc3MtZmlsZSk6ICBTZXQgbGlubyB0byBzbWFsbGVzdCBsaW5lIG51bWJlciwKCXdoaWxlIGluaXRpYWxpemluZyBsaW5lbnVtYmVyX2NvdW50IGFuZCBsaW5lbnVtYmVyX3RhYmxlLgoJRG8gaXQgYmVmb3JlIGluaXRfZnVuY3Rpb25fc3RhcnQgKHdoaWNoIGNhbGxzIGVtaXRfbGluZV9ub3RlKS4KCSogZXhwci5jIChleHBhbmRfYnl0ZV9jb2RlKTogIERvbid0IG5lZWQgdG8gY2xlYXIgbGluZW5vIGhlcmUuCgpNb24gTWF5IDE4IDE2OjIzOjMyIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFwcGVuZF9ncHBfbWFuZ2xlZF90eXBlKTogSWYgYHF1YWxpZmljYXRpb25zJyBpcyA+PTksCgl0aGVuIG1hbmdsZSBudW1iZXIgYXMgX05fLgoKCSogY2xhc3MuYyAobWFuZ2xlX2NsYXNzX2ZpZWxkKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2NsYXNzX3JlZik6IFNldCBhc3NlbWJsZXIgbmFtZSBvZiBjbGFzcyByZWZlcmVuY2UgdXNpbmcKCW1hbmdsZV9jbGFzc19maWVsZC4KCShwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZCk6IExpa2V3aXNlLgoKU3VuIE1heSAxNyAxMjo1MjozNSAxOTk4ICBNaWNoYWVsIFRpZW1hbm4gPHRpZW1hbm5AY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFVzZSBUUkVFX1NFVF9DT0RFIGluc3RlYWQKCW9mIGFzc2lnbmluZyB0byBUUkVFX0NPREUuICBUaGUgbGF0dGVyIG1ldGhvZCBleHBsb2l0cyBhIGZlYXR1cmUKCW9mIEdDQyB0aGF0IGlzIG5vdCBBTlNJIGNvbXBsaWFudC4KClRodSBNYXkgMTIgMTM6NDQ6MjcgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hkZWNsX2ZvcmNlX2hlYWQpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGxldmVsKTogUmVtb3ZlZCBjb25kaXRpb25hbCBwcmludGYuCgkoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBEb24ndCBlbnRlciBsb2NhbCB2YXJpYWJsZSBzY29wZSBpZgogCWZ1bmN0aW9uIGlzIGNvbXBpbGVkIGZyb20gc291cmNlIGNvZGUuCgkqIGV4cHIuYzogcGFyc2UuaCBub3cgaW5jbHVkZWQKCShqYXZhX2xhbmdfZXhwYW5kX2V4cHIpOiBOZXcgZnVuY3Rpb24uCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogVXNlIFNPVVJDRV9GUk9OVEVORF9ERUJVRyBpbnN0ZWFkIG9mCiAJcHJpbnRmLiBUZXJtaW5hdGUgYnVmZmVyIHdoZW4gZG9pbmcgZGlyZWN0b3JpZXMuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSk6IENhbGwgbGFuZ19pbml0X3NvdXJjZSBiZWZvcmUKIAlwYXJzaW5nIGFuZCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uLgoJKiBqY2YuaCAoU09VUkNFX0ZST05URU5EX0RFQlVHKTogTWFjcm8gcmVkZWZpbmVkIHRvIGNvbmRpdGlvbmFsbHkKIAl1c2UgcHJpbnRmIGlmIHRoZSBtYWNybyBpcyBkZWZpbmVkLgoJKiBsYW5nLmMgKGxhbmdfaW5pdCk6IEluc3RhbGwgbGFuZ19leHBhbmRfZXhwciBob29rIG9uCiAJamF2YV9sYW5nX2V4cGFuZF9leHByLgoJKGphdmFfZHVtbXlfcHJpbnQpOiBOZXcgZnVuY3Rpb24uCgkobGFuZ19pbml0X3NvdXJjZSk6IE5ldyBmdW5jdGlvbi4KCSogbGV4LmMgKGphdmFfbGV4KTogUmVtZW1iZXIgbG9jYXRpb24gb2YgYW4gb3BlbmluZyBicmFjZSBhdCB0aGUKIAlzZWNvbmQgbmVzdGluZyBsZXZlbC4KCShqYXZhX2lzX2VvbCk6IFVuZ2V0IGNoYXJhY3RlciBzZWVuIGFmdGVyIGEgQ1IgaWYgaXQgaXMgRU9GLgoJKiBwYXJzZS5oOiBOb3cgaW5jbHVkZXMgbGV4LmgKCShTT1VSQ0VfRlJPTlRFTkRfREVCVUcpOiBNYWNybyByZWRlZmluZWQgdG8gY29uZGl0aW9uYWxseSB1c2UKIAlwcmludGYgaWYgdGhlIG1hY3JvIGlzIGRlZmluZWQuCgkoZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kLCBidWlsZF9leHByX2Jsb2NrLCBlbnRlcl9ibG9jaywKIAlleGl0X2Jsb2NrLCBsb29rdXBfbmFtZV9pbl9ibG9ja3MsIG1heWJlX2Fic29yYl9zY29waW5nX2Jsb2Nrcyk6CiAJTmV3IHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCgkocHVzaGRlY2xfZm9yY2VfaGVhZCk6IE5ldyBleHRlcm4gZnVuY3Rpb24gZGVjbGFyYXRpb24uCgkoSU5DT01QTEVURV9UWVBFX1ApOiBOZXcgbWFjcm8uCgkoSkRFUF9QQVJNLCBKREVQX1RZUEUpOiBOZXcgZW50cmllcyBpbiBKREVQcyBlbnVtLgoJKEJMT0NLX0NIQUlOX0RFQ0wsIEJMT0NLX0VYUFJfREVDTFMsIEJMT0NLX0VYUFJfQk9EWSwKIAlCTE9DS19FWFBSX09SSUdJTik6IE5ldyBtYWNyb3MuCgkoREVDTF9TT1VSQ0VfTElORV9NRVJHRSwgREVDTF9TT1VSQ0VfTElORV9GSVJTVCwKIAlERUNMX1NPVVJDRV9MSU5FX0xBU1QpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IFJlbW92ZWQgZmllbGQgY3VycmVudF9tZXRob2RfZGVjbCwgcmVkdW5kYW50CiAJd2l0aCB0aGUgZmllbGQgY3VycmVudF9mdW5jdGlvbl9kZWNsLiBBZGRlZCBmaWVsZHMKIAlmaXJzdF9jY2JfaW5kZW50MSBhbmQgcGVuZGluZ19ibG9jay4KCSogcGFyc2UueSAobWV0aG9kX2JvZHksIGxpdGVyYWwsIElOVF9MSVRfVEssIEZQX0xJVF9USywKIAlCT09MX0xJVF9USywgQ0hBUl9MSVRfVEssIFNUUklOR19MSVRfVEssIE5VTExfVEssIFZPSURfVEspOiBSdWxlcwogCXRhZ2dlZCA8bm9kZT4KCShTT1VSQ0VfRlJPTlRFTkRfREVCVUcpOiBVc2VkIGFzIG1hY3JvIGFjY2VwdGluZyB2YXJhcmdzLgoJKGNvbXBpbGF0aW9uX3VuaXQ6KTogQ29zbWV0aWMgb24gc3ViIHJ1bGUuCgkodHlwZV9kZWNsYXJhdGlvbjopOiBDb3NtZXRpYyBvbiBzdWIgcnVsZXMuIEFkZGVkIGFuIGVycm9yIHJ1bGUuCgkodmFyaWFibGVfaW5pdGlhbGl6ZXI6KTogSW5zdGFsbGVkIGRlZmF1bHQgcnVsZSBvbiBleHByZXNzaW9uOi4KCShtZXRob2RfZGVjbGFyYXRpb246KTogbWV0aG9kX2hlYWRlcjogc3RhcnRzIGEgbmV3CiAJbWV0aG9kLiBtZXRob2RfYm9keTogaW5zdGFsbHMgdGhlIGZ1bmN0aW9uIGJvZHksIGFic29yYnMgYmxvY2tzCiAJZW1pdHRlZCBmb3IgdGVtcG9yYXJ5IHZhcmlhYmxlIHNjb3BpbmdzLCBwb3BzIGZ1bmN0aW9uJ3MgYm9keSBibG9jawogCWFuZCBtZXJnZXMgZnVuY3Rpb24ncyBsYXN0IHN0YXRlbWVudCBsaW5lbm8gaW4gREVDTF9TT1VSQ0VfTElORS4KCShtZXRob2RfYm9keTopOiBJbnN0YWxsZWQgZGVmYXVsdCBydWxlcy4KCShibG9jazopOiBDYWxsIGVudGVyX2Jsb2NrIHdoZW4gYW4gb3BlbmluZyBicmFjZSBpcyBzZWVuLiAgQWJzb3JiCiAJc2NvcGluZyBibG9ja3MgYW5kIGNhbGwgZXhpdF9ibG9jayB3aGVuIGEgY2xvc2luZyBicmFjZSBpcyBzZWVuLgoJKGJsb2NrX3N0YXRlbWVudDopOiBDb3NtZXRpYyBjaGFuZ2VzLgoJKG1ldGhvZF9pbnZvY2F0aW9uOik6IENyZWF0ZSBXRkwgYXJvdW5kIENBTExfRVhQUiBub2RlLgoJKHBhdGNoX3N0YWdlKTogQWRkZWQgY29tbWVudCBhcm91bmQgZGVmaW5pdGlvbi4KCShtZXRob2RfaGVhZGVyKTogVHJ5IHRvIHVzZSBmaXJzdF9jY2JfaW5kZW50MSBhcyB0aGUgZmlyc3QgbGluZSBvZgogCXRoZSBtZXRob2QsIHNvIEJQIGRlYnVnIGluZm8gYXJlIGVtaXR0ZWQgYXQgdGhlIGZpcnN0IG9wZW5pbmcKIAlicmFjZSBvZiB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBoYXMgbm8gYm9keSwgdXNlIHRoZQogCWxvY2F0aW9uIG9mIHRoZSBmdW5jdGlvbidzIG5hbWUuIE92ZXJyaWRlIGN1cnJlbnRseSBkZWZpbmVkIG1ldGhvZAogCW5hbWUgd2l0aCB0aGUgbWF0Y2hpbmcgV0ZMIHNvIHdlIGNhbiBwb2ludCByZWRlZmluaXRpb24gZXJyb3JzCiAJdXNpbmcgdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBmdW5jdGlvbidzIG5hbWUgd2FzIGRlY2xhcmVkLgoJKGNoZWNrX2Fic3RyYWN0X21ldGhvZF9oZWFkZXIpOiBJbnRlcnByZXRzIERFQ0xfTkFNRSBhcyBhbgogCWlkZW50aWZpZXIgb3IgYXMgYSBXRkwsIGFjY29yZGluZ2x5LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBOZXcgY2FzZXMgZm9yIEpERVBfVFlQRSBhbmQgSkRFUF9QQVJNLgoJKGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24pOiBVc2UgREVDTF9OQU1FIGFzIGEgV0ZMLiBFeHRyYWN0CiAJbG9jYXRpb24gYW5kIG5hbWUgaW5mb3JtYXRpb24gb3V0IG9mIGl0IGFuZCByZWluc3RhbGwgREVDTF9OQU1FIHRvCiAJaXRzIG9yaWdpbmFsIGlkZW50aWZpZXIgbm9kZSB2YWx1ZS4KCShsb29rdXBfY2wpOiBVc2UgREVDTF9TT1VSQ0VfTElORV9GSVJTVCAoZmlyc3QgbGluZSBvZiB0aGUKIAlmdW5jdGlvbidzIHNvdXJjZSBjb2RlKS4KCShyZWFkX2ltcG9ydF9kaXIpOiBUZXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBmaW5kX2NsYXNzIGFuZCBpc3N1ZQogCWEgZmF0YWwgYWNjb3JkaW5nbHkuCgkoZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMpOiBQdXNoIGEgbmV3IGJsb2NrIGZvciB0aGUgc2NvcGUgb2YgdGhlCiAJbmV3IHZhcmlhYmxlKHMpIGlmIGNvZGUgaGFzIGJlZW4gYWxyZWFkeSBnZW5lcmF0ZWQgYXQgdGhhdCBuZXN0aW5nCiAJbGV2ZWwuIFBpbnBvaW50IHJlZGVmaW5pdGlvbiBlcnJvcnMgdXNpbmcgdGhlIHZhcmlhYmxlIGlkCiAJV0ZMcy4gR2VuZXJhdGUgaW5pdGlhbGl6YXRpb24gY29kZSBpZiBuZWNlc3NhcnkuIElmIHRoZSB2YXJpYWJsZQogCXR5cGUgaXMgaW5jb21wbGV0ZSwgcmVnaXN0ZXIgYSBwYXRjaCBvbiBpdHMgZGVjbC4KCShzb3VyY2Vfc3RhcnRfamF2YV9tZXRob2QpOiBSZXdyaXR0ZW4uIERlZmluZSBhIG5ldyBibG9jayBmb3IgdGhlCiAJZnVuY3Rpb24ncyBwYXJhbWV0ZXJzLiBCdWlsZCBwYXJhbWV0ZXIgZGVjbCBvdXQgb2YgZnVuY3Rpb24ncwogCWFyZ3VtZW50cyBhbmQgcmVnaXN0ZXIgdGhlbSBmb3IgYSBwYXRjaCBpZiB0aGVpciB0eXBlcyBhcmUKIAlpbmNvbXBsZXRlLgoJKGV4cGFuZF9zdGFydF9qYXZhX21ldGhvZCk6IEluY2x1ZGVzIHRoZSBwYXJ0IG9mCiAJc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kIHRoYXQgd2FzIHB1c2hpbmcgdGhlIHBhcmFtZXRlciBkZWNscyBhbmQKIAljb21wbGV0aW5nIHRoZSBtZXRob2Qgc3RhcnQgY29kZS4KCShzb3VyY2VfZW5kX2phdmFfbWV0aG9kKTogUmVtb3ZlZCBjYWxsIHRoZSBleHBhbmRfZW5kX2JpbmRpbmdzIGFuZAogCXBvcGxldmVsIChhbHJlYWR5IHRha2VuIGNhcmUgb2YpLiBSZWluc3RhbGwgZnVuY3Rpb24ncyBhcmd1bWVudHMKIAlhbmQgZ2V0IGZ1bmN0aW9uJ3MgbGFzdCBsaW5lIG9mIGNvZGUgYmVmb3JlIGNhbGxpbmcKIAlleHBhbmRfZnVuY3Rpb25fZW5kLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogTmV3IGNvbW1lbnQgYmVmb3JlIHRoZSBmdW5jdGlvbidzCiAJY29kZS4gQ29tcGxlbWVudCB0aGUgc2Vjb25kIG9wZXJhbmQgb2YgdGhlIGN1cnJlbnQgQ09NUE9VTkRfRVhQUgogCWlmIG5lY2Vzc2FyeS4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzKTogRG9uJ3QgZ2VuZXJhdGUgZGVidWcgaW5mbyBvbiBsaW5lCiAJemVybyB3aGVuIGV4cGFuZGluZyBhIGdlbmVyYXRlZCBjb25zdHJ1Y3Rvci4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QpOiBTZXQgc3RhcnQgYW5kIGVuZCBsaW5lIG51bWJlcnMgZm9yCiAJYSBhcnRpZmljaWFsbHkgZ2VuZXJhdGVkIGNvbnN0cnVjdG9yIHRvIG9uZSBhbmQgbWFudWFsbHkgY2FsbAogCWVudGVyX2Jsb2NrIGFuZCBleGl0X2Jsb2NrIHdoZW4gZGVmaW5pbmcgaXQuIEZvciBhbGwgbWV0aG9kczoKIAlleHBhbmQgZnVuY3Rpb24ncyBzdGFydCBjYWxsaW5nIHRoZSBuZXcgZXhwYW5kX3N0YXJ0X2phdmFfbWV0aG9kCiAJYW5kIGludm9rZSBqYXZhX2NvbXBsZXRlX3RyZWUgb24gdGhlIGVmZmVjdGl2ZSBtZXRob2QncyBib2R5LCBpZgogCWFueS4KCShyZXNvbHZlX2V4cHJlc3Npb25fbmFtZSk6IE5vdyB1c2UgbG9va3VwX25hbWVfaW5fYmxvY2tzIHRvIHNlYXJjaAogCWxvY2FsIHZhcmlhYmxlIGRlY2xzIGFuZCBwcmludCBvdXQgYW4gZXJyb3Igd2hlbiB2YXJpYWJsZXMgYXJlCiAJdW5kZWZpbmVkLgoJKHBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiBJbnNlcnRlZCBjb21tZW50IGJlZm9yZSB0aGUKIAlmdW5jdGlvbidzIGNvZGUuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBDaGFpbiBtZXRob2QncyBhcmd1bWVudHMgdXNpbmcgY2hhaW5vbgogCXdpdGggdGhlIGN1cnJlbnQgYXJnIGxpc3QgYXMgYSBzZWNvbmQgYXJndW1lbnQuIEluc2VydGVkIG1pc3NpbmcKIAlJREVOVElGSUVSX1BPSU5URVIgd2hlbiByZXBvcnRpbmcgYW4gZXJyb3Igb24gbWV0aG9kcyBub3QgZm91bmQuCgkocmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0KTogRG9uJ3QgcmV0YWluIGNvbnN0cnVjdG9ycy4KCShwYXRjaF9hcmd1bWVudHMpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGphdmFfY29tcGxldGVfdHJlZSk6IEluc2VydGVkIGNvbW1lbnQgYmVmb3JlIHRoZSBmdW5jdGlvbidzCiAJY29kZS4gTmV3IGNhc2UgZm9yIEJMT0NLcy4gTW92ZWQgdGhlIFdGTCBjYXNlIGEgYml0CiAJZnVydGhlci4gQ29tcGxldGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCiAJKGJ1aWxkX2V4cHJfYmxvY2ssIGVudGVyX2Jsb2NrLCBleGl0X2Jsb2NrLCBsb29rdXBfbmFtZV9pbl9ibG9ja3MsCiAJbWF5YmVfYWJzb3JiX3Njb3BpbmdfYmxvY2tzKTogTmV3IGZ1bmN0aW9ucy4KCk1vbiBBcHIgMjcgMTA6NTA6MDUgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IFJlc2V0IGpjZi0+amF2YV9zb3VyY2UgYWZ0ZXIgSkNGX1pFUk8sIGlmCiAJcHJldmlvdXNseSBzZXQuCgkqIGpjZi1wYXJzZS5jIChwYXJzZV9zb3VyY2VfZmlsZSwgamF2YV9lcnJvcl9jb3VudCk6IE5ldyBmb3J3YXJkCiAJYW5kIGV4dGVybiBkZWNsYXJhdGlvbnMuCgkoamF2YV9wYXJzZV9hYm9ydF9vbl9lcnJvcik6IE1hY3JvIG1vdmVkLgoJKGpjZl9wYXJzZV9zb3VyY2UpOiBmYXRhbCBjYWxsZWQgaWYgZm9wZW4gZmFpbHMuIE5vdyBjYWxscwogCXBhcnNlX3NvdXJjZV9maWxlLgoJKHBhcnNlX3NvdXJjZV9maWxlKTogTmV3IHBhcnNlX29ubHkgcGFyYW1ldGVyLiBSZWZsZWN0cyB0aGUKIAllbGltaW5hdGlvbiBvZiB0aGUgc2Vjb25kIHBhc3MuCgkoeXlwYXJzZSk6IHBhcnNlX3NvdXJjZV9maWxlIGNhbGxlZCB3aXRoIGFyZ3VtZW50IHNldCB0byAwLgoJKiBqY2YuaCAoSkNGX1pFUk8pOiBTZXRzIGphdmFfc291cmNlIHRvIHplcm8uCgkqIGxleC5jIChqYXZhX2luaXRfbGV4KTogcGFzcyBhcmd1bWVudCBpcyBnb25lLiBGdW5jdGlvbiBtb2RpZmllZAogCXRvIGJlIGNhbGxlZCBvbmNlIGR1cmluZyB0aGUgYW5hbHlzaXMgb2YgYSBmaWxlLgoJKGphdmFfdW5nZXRfdW5pY29kZSk6IEZpeGVkIHR5cG8gaW4gZmF0YWwgbWVzc2FnZS4KCShqYXZhX2dldF9saW5lX2NvbCk6IExpa2V3aXNlLgoJKGphdmFfbHZhbCk6IExpa2V3aXNlLiBTdHJpbmcgbGl0ZXJhbHMgbm8gbG9uZ2VyIGJ1aWx0IGR1cmluZwogCXNlY29uZCBwYXNzLgoJKiBsZXguaCAoSkFWQV9DT0xVTU5fREVMVEEpOiBUYWtlIHRoZSB0YWJ1bGF0aW9uIGNoYXJhY3RlciBpbnRvCiAJYWNjb3VudC4KCSogcGFyc2UuaCAoTU9ESUZJRVJfV0ZMKTogTmV3IG1hY3JvLgoJKHBhcnNlX2NoZWNrX3N1cGVyLCBwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogTm93IHJldHVybiBpbnQuCgkocGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbSwgbm90X2J1aWx0aW5fcCwKIAljb21wbGV0ZV9tZXRob2RfZGVjbCk6IERlY2xhcmF0aW9ucyByZW1vdmVkLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQsIGJ1aWxkX2ludm9rZSk6IFJlbmFtZWQgdXNpbmcgdGhlCiAJYHBhdGNoJyBpbnN0ZWFkIG9mIGBidWlsZCcKCShyZWdpc3Rlci1pbmNvbXBsZXRlX3R5cGUsIG9idGFpbl9pbmNvbXBsZXRlX3R5cGUsCiAJamF2YV9jb21wbGV0ZV90cmVlLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QsCiAJdW5yZXNvbHZlZF90eXBlX3AsIGNyZWF0ZV9qZGVwX2xpc3QpOiBOZXcgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKElDX1RZUEUsIElDX0RFUEVORCwgREVQRU5EX0RFQ0wsIERFUEVORF9XRkwsIEJFR0lOX09OTFlfUEFTUywKIAlFTkRfT05MWV9QQVNTLCBFTFNFX09OTFlfUEFTUyk6IE1hY3JvIGRlbGV0ZWQuCgkoamRlcCk6IE5ldyB0eXBlZGVmIG9uIG5ldyBzdHJ1Y3QgX2pkZXAuCgkoSkRFUF9ERUNMLCBKREVQX0RFQ0xfV0ZMLCBKREVQX0tJTkQsIEpERVBfU09MViwgSkRFUF9XRkwsCiAJSkRFUF9NSVNDLCBKREVQX0FQUExZX1BBVENILCBKREVQX0dFVF9QQVRDSCwgSkRFUF9DSEFJTiwKIAlKREVQX1RPX1JFVk9MVkUsIEpERVBfUkVTT0xWRURfREVDTCwgSkRFUF9SRVNPTFZFRCwKIAlKREVQX1JFU09MVkVEX1ApOiBOZXcgbWFjcm9zLgoJKEpERVBfTk9fUEFUQ0gsIEpERVBfU1VQRVIsIEpERVBfRklFTEQsIEpERVBfTUVUSE9ELAogCUpERVBfTUVUSE9EX1JFVFVSTiwgSkRFUF9NRVRIT0RfRU5ELCBKREVQX0lOVEVSRkFDRSwKIAlKREVQX1ZBUklBQkxFKTogTmV3IGVudW0gdmFsdWVzIGFuZCBqZGVwIGtpbmRzLgoJKGpkZXBsaXN0KTogTmV3IHR5cGVkZWYgb24gc3RydWN0IF9qZGVwbGlzdC4KCShDTEFTU0RfRklSU1QsIENMQVNTRF9MQVNULCBDTEFTU0RfQ0hBSU4sIEpERVBfSU5TRVJUKTogTmV3CiAJbWFjcm9zLgoJKENBTExfRVhQUl9QUklNQVJZKTogTmV3IG1hY3JvLgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IEZpZWxkcyBqYXZhX3Bhc3MsIGN1cnJlbnRfbWV0aG9kX2RlY2wsCiAJbWV0aG9kX2RlY2xfbGlzdCBkZWxldGVkLiBOZXcgZmllbGQgamRlcGxpc3QuCgkoSU5DT01QTEVURV9QKTogTWFjcm8gZGVsZXRlZC4KCSogcGFyc2UueSAoc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgcGFzcyBzd2l0Y2guCgkodHlwZV9pbXBvcnRfb25fZGVtYW5kX2RlY2xhcmF0aW9uKTogTGlrZXdpc2UuCgkoZmllbGRfZGVjbGFyYXRpb246KTogUmVtb3ZlZCBwYXNzIHN3aXRjaCBvbiBhbGwgc3ViIHJ1bGVzLgoJKGNsYXNzX2RlY2xhcmF0aW9uOik6IENhbGwgdGhlIGNvbXBsZXRlX2NsYXNzX2RlY2wgcmVtb3ZlZCBvbgogCWNsYXNzX2JvZHkgcnVsZXMuCgkobWV0aG9kX2RlY2xhcmF0aW9uOik6IFJlbW92ZWQgc2Vjb25kIHBhc3Mgc3dpdGNoLiBObyBsb25nZXIgY2hhaW4KIAltZXRob2RzIGRlY2wgd2hlbiBtZXRob2RfaGVhZGVyIHJlZHVjZWQuCgkobWV0aG9kX2hlYWRlcjopOiBTdWIgcnVsZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiBwYXNzIHN3aXRjaC4KCShtZXRob2RfZGVjbGFyYXRvcjopOiBMaWtld2lzZS4KCShtZXRob2RfYm9keTopOiBMaWtld2lzZS4KCShhYnN0cmFjdF9tZXRob2RfZGVjbGFyYXRpb246KTogTGlrZXdpc2UuCgkoYmxvY2tfc3RhdGVtZW50Oik6IExpa2V3aXNlLgoJKGxvY2FsX3ZhcmlhYmxlX2RlY2xhcmF0aW9uOik6IExpa2V3aXNlLgoJKGFyZ3VtZW50X2xpc3Q6KTogTGlrZXdpc2UuCgkobWV0aG9kX2ludm9jYXRpb246KTogTGlrZXdpc2UuIENhbGwgdG8JYnVpbGRfbWV0aG9kX2ludm9jYXRpb25fc3RtdAoJcmVtb3ZlZC4gUGFydGlhbCBDTEFTU19FWFBSIHRyZWUgbm9kZSBidWlsdCBpbnN0ZWFkLgoJKHBvc3RmaXhfZXhwcmVzc2lvbjopOiBSZW1vdmVkIHBhc3Mgc3dpdGNoIG9uIGFsbCBzdWIgcnVsZXMuCgkoamF2YV9wb3BfcGFyc2VyX2NvbnRleHQpOiBGcmVlIGNsYXNzZF9saXN0IGNvbnRlbnQuCgkoeXllcnJvcik6IENhbGwgb2JzdHJhY2tfZ3JvdzAgdG8gZmluYWxpemUgZXJyb3IgbWVzc2FnZS4KCShjaGVja19jbGFzc19pbnRlcmZhY2VfY3JlYXRpb24pOiBDb21tZW50IG1vZGlmaWVkIHRvIHJlZmxlY3QgbmV3CiAJcmV0dXJuZWQgdmFsdWUgbWVhbmluZy4gUmVtb3ZlZCBzZWNvbmQgcGFzcyBzd2l0Y2guIFJldHVybiAxIGlmIGFuCiAJZXJyb3Igd2FzIGZvdW5kLCAwIG90aGVyd2lzZS4gQWRqdXN0IHBvaW50ZXIgb24gZmlsZW5hbWUgaWYgYQogCWxlYWRpbmcgcGF0aCBzZXBhcmF0b3Igd2FzIGZvdW5kLgoJKG1heWJlX2NyZWF0ZV9jbGFzc19pbnRlcmZhY2VfZGVjbCk6IFJlbW92ZWQgZmlyc3QgcGFzcyBzd2l0Y2gKIAl3aGVuIGxpbmtpbmcgdGhlIGNsYXNzIGRlY2wgdG8gdGhlIGNsYXNzX2xpc3QuIEluc3RhbGwgYSBuZXcKIAlqZGVwX2xpc3QgZm9yIHRoZSBjbGFzcy4KCShhZGRfc3VwZXJpbnRlcmZhY2VzKTogTGlzdCBvZiB1bnJlc29sdmVkIGludGVyZmFjZXMgaXMKIAlnb25lLiBVbnJlc29sdmVkIGludGVyZmFjZXMgYXJlIGRpcmVjdGx5IGFkZGVkIHRvIHRoZSBjdXJyZW50CiAJZGVwZW5kZW5jaWVzIGxpc3QuCgkoY3JlYXRlX2ludGVyZmFjZSk6IFNlY29uZCBwYXNzIHNob3J0Y3V0IHJlbW92ZWQuCgljdHB4LT5tb2RpZmllcl9jdHggYWNjZXNzIHRocm91Z2ggTU9ESUZJRVJfV0ZMLgoJKGNyZWF0ZV9jbGFzcyk6IFNlY29uZCBwYXNzIHNob3J0Y3V0IHJlbW92ZWQuIENhbGwgdG8KIAlyZWdpc3Rlcl9pbmNvbXBsZXRlX3R5cGUgcmVwbGFjZXMgdGhlIGNhbGwgdG8KIAlwYXJzZXJfY2hhaW5faW5jb21wbGV0ZV9pdGVtLgoJKGNvbXBsZXRlX2NsYXNzX2RlY2wpOiBGdW5jdGlvbiByZW1vdmVkLgoJKGR1cGxpY2F0ZV9kZWNsYXJhdGlvbl9lcnJvcik6IE5ldyB3YXkgb2YgcmV0cmlldmluZyByZWRlY2xhcmVkCiAJaXRlbSB0eXBlLgoJKHJlZ2lzdGVyX2ZpZWxkcyk6IENhbGwgdG8gbG9va3VwX21vZGlmaWVyX2NsIHJlcGxhY2VkIGJ5CiAJTU9ESUZJRVJfV0ZMLiBOZXcgd2F5IG9mIGhhbmRsaW5nIHVucmVzb2x2ZWQgdHlwZSwgdXNpbmcKIAl1bnJlc29sdmVkX3R5cGVfcCBhbmQgb2J0YWluX2luY29tcGxldGVfdHlwZS4KCXJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSByZXBsYWNlcyBjYWxsIHRvIHBhcnNlcl9jaGFpbl9pbmNvbXBsZXRlX2l0ZW0uCgkocGF0Y2hfc3RhZ2UpOiBOZXcgc3RhdGljIGdsb2JhbCB2YXJpYWJsZS4KCShtZXRob2RfaGVhZGVyKTogTmV3IHdheSBvZiBoYW5kbGluZyB1bnJlc29sdmVkIHR5cGUsIHVzaW5nCiAJdW5yZXNvbHZlZF90eXBlX3AgYW5kIG9idGFpbl9pbmNvbXBsZXRlX3R5cGUuIHBhdGNoX3N0YWdlIHVzZWQgdG8KIAlpbmRpY2F0ZXMgdGhhdCB0aGUgbWV0aG9kIGRlY2wgbmVlZHMgdG8gYmUgcGF0Y2hlZC4KCShjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyKTogQ2FsbCB0byBsb29rdXBfbW9kaWZpZXJfY2wKIAlyZXBsYWNlZCBieSBNT0RJRklFUl9XRkwuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBJbmNvbXBsZXRlIGFyZ3VtZW50IHR5cGUgYXJlIHJlZ2lzdGVyZWQKIAljYWxsaW5nIHJlZ2lzdGVyX2luY29tcGxldGVfdHlwZS4gUGF0Y2ggb24gdGhlIGRlY2xhcmVkIG1ldGhvZCBpcwogCWlzc3VlZCBpbiB0aGF0IGNhc2UuCgkodW5yZXNvbHZlZF90eXBlX3ApOiBOZXcgZnVuY3Rpb24uCgkocGFyc2VyX2NoZWNrX3N1cGVyX2ludGVyZmFjZSk6IE5ldyBjb21tZW50IHRvIHJlZmxlY3QgZnVuY3Rpb24ncwogCW1vZGlmaWVkIHJldHVybmVkIHR5cGUgKGludCkuIEZ1bmN0aW9uIGFuZCBoYXMgYSBuZXcgYXJndW1lbnQKIAl0aGlzX3dmbC4gQ2FsbCB0byBwYXJzZV9lcnJvcl9jb250ZXh0IHVzZXMgdGhpc193ZmwgaW5zdGVhZCBvZgogCXJlbHlpbmcgb24gbG9va3VwX2NsLgoJKHBhcnNlcl9jaGVja19zdXBlcik6IENvbW1lbnQgcmVmbGVjdHMgZnVuY3Rpb24ncyBuZXcgcmV0dXJuZWQKIAl0eXBlIChpbnQpLiBGdW5jdGlvbiByZXR1cm5zIG5vbiB6ZXJvIHZhbHVlIG9uIGVycm9yLgoJKGNyZWF0ZV9qZGVwX2xpc3QsIHJldmVyc2VfamRlcF9saXN0LCBvYnRhaW5faW5jb21wbGV0ZV90eXBlLAogCXJlZ2lzdGVyX2luY29tcGxldGVfdHlwZSwgamRlcF9yZXNvbHZlX2NsYXNzKTogTmV3IGZ1bmN0aW9ucyB0bwogCWhhbmRsZSBpbmNvbXBsZXRlIHR5cGVzIGluIGRlY2xhcmF0aW9ucy4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogUmV3cml0dGVuIHRvIHdvcmsgd2l0aCB0aGUgbmV3IGluY29tcGxldGUKIAl0eXBlIGhhbmRsaW5nIHNjaGVtZS4KCShjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzKTogTGlrZXdpc2UuCgkoY29tcGxldGVfbWV0aG9kX2RlY2wpOiBSZW1vdmVkOiBpdCBqb2JzIGlzIG5vdyBoYW5kbGVkIGJ5CiAJamF2YV9jb21wbGV0ZV9jbGFzcy4KCShkb19yZXNvbHZlX2NsYXNzKTogQ2xhc3MgbG9hZGVkIGluIG5vdCBhbHJlYWR5IGxvYWRlZCBhbmQgbm90CiAJZm91bmQgaW4gSmF2YSBzb3VyY2UgY29kZS4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcywgamF2YV9jaGVja19hYnN0cmFjdF9tZXRob2RzKTogRG9uJ3QKIAljYWxsIGNvbXBsZXRlX21ldGhvZF9kZWNsIGFueW1vcmUuCgkobG9va3VwX21vZGlmaWVyX2NsLCBub3RfYnVpbHRpbl9wKTogRnVuY3Rpb25zIGRlbGV0ZWQuCgkocmVhZF9pbXBvcnRfZGlyKTogR290IHJpZCBvZiB0aGUgcGFzcyBudW1iZXIgZGVwZW5kZW5jeS4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IE5ldyBoYW5kbGluZyBvZiB1bnJlc29sdmVkIHR5cGVzIChwYXRjaAogCWlzc3VlZCkuCgkoc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kKTogTmV3IHBhcmFtZXRlciBsZXZlbC4gRnVuY3Rpb24gY2FsbGVkCiAJd2l0aCBsZXZlbCBzZXQgdG8gMSB3aGVuIGFyZ3VtZW50IHR5cGVzIGFyZSBwb3RlbnRpYWxseQogCXVucmVzb2x2ZWQuICBDYWxsZWQgdG8gY29tcGxldGUgdGhlIGpvYiB3aXRoIGxldmVsIHNldCB0byAyIG9uY2UKIAl0eXBlcyBhcmUgY29tcGxldGUuCgkoc291cmNlX2VuZF9qYXZhX21ldGhvZCk6IENhbGwgdG8gcGVybWFuZW50X2FsbG9jYXRpb24KIAlyZW1vdmVkLiBXYWl0aW5nIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbW9yZSBzdWl0YWJsZSBvYnN0YWNrCiAJbWFuYWdlbWVudC4KCShqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2RzLCBqYXZhX2NvbXBsZXRlX2V4cGFuZF9tZXRob2QsCiAJamF2YV9leHBhbmRfZmluYWxzKTogTmV3IGZ1bmN0aW9ucy4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogUmVuYW1lZAogCXBhdGNoX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQuIEV4dHJhY3RzIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbgogCSh3ZmwpIGFuZCBhcmd1bWVudHMgKGFyZ3MpIGZyb20gQ0FMTF9FWFBSIHRyZWUgb3BlcmFuZHMuCgkoYnVpbGRfaW52b2tlKTogUmVuYW1lZCBwYXRjaF9pbnZva2UuIEZpeGVkIHR5cG8gaW4gZmF0YWwKIAljYWxsLiBQYXRjaCB0aGUgZnVuY3Rpb24gYW5kIGFyZ3VtZW50IG9wZXJhbmQgb2YgdGhlIENBTExfRVhQUgogCXRyZWUgYXJndW1lbnQuCgkocGF0Y2hfYXJndW1lbnQsIGphdmFfY29tcGxldGVfdHJlZSk6IE5ldyBmdW5jdGlvbnMuCgpNb24gQXByIDIwIDE4OjI2OjU3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCVJlY292ZXIgZnJvbSBtaXNzaW5nIGZpZWxkcyBhbmQgbWV0aG9kcyAoaS5lLiBlcnJvciBpbnN0ZWFkIG9mIGZhdGFsKS4KCSogZGVjbC5jLCBqYXZhLXRyZWUuaCAoVFlQRV9pZGVudGlmaWVyX25vZGUpOiAgTmV3IGdsb2JhbCBjb25zdGFudC4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogIFJlY292ZXIgZnJvbSBtaXNzaW5nIG1ldGhvZC4KCShleHBhbmRfamF2YV9maWVsZF9vcCk6ICBSZWNvdmVyIGZyb20gbWlzc2luZyBmaWVsZC4KCUlubGluZSByZWZlcmVuY2VzIHRvIGphdmEubGFuZy57SW50ZWdlcixDaGFyLC4uLn0uVFlQRS4KCSogdHlwZWNrLmMgKGdldF90eXBlX2Zyb21fc2lnbmF0dXJlKSwgamF2YS10cmVlLmg6ICBOZXcgZnVuY3Rpb24uCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiAgVXNlIGdldF90eXBlX2Zyb21fc2lnbmF0dXJlLgoJKGJ1aWxkX2NsYXNzX3JlZik6ICBIYW5kbGUgYSBjbGFzcyB0aGF0IHdhcyBub3QgZm91bmQuCgkqIHR5cGVjay5jIChjb252ZXJ0KTogIEhhbmRsZSBjb252ZXJzaW9uIHRvIHBvaW50ZXJzIChmb3IgY29udmVuaWVuY2UpLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVXNlIGdldF90eXBlX2Zyb21fc2lnbmF0dXJlCglpbnN0ZWFkIG9mIGxvb2t1cF9maWVsZCB0byBoYW5kbGUgbWlzc2luZyBmaWVsZHMuCgoJKiBqY2YtcGFyc2UuYyAocHJvY2Vzc196aXBfZGlyKTogIFNldCBqYXZhX3NvdXJjZS4KCjE5OTgtMDQtMjAgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBqY2YtcGFyc2UuYyAoc2V0X3NvdXJjZV9maWxlbmFtZSk6IFVzZSBUWVBFX05BTUUsIG5vdCBERUNMX05BTUUuCgpUdWUgQXByIDE0IDE1OjU5OjU0IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogamNmLXBhcnNlLmMgKGxvYWRfY2xhc3MpOiBEb24ndCBjaGFuZ2UgaW5wdXRfZmlsZW5hbWUgYmVmb3JlCiAJY2FsbGluZyBqY2ZfcGFyc2Vfc291cmNlIChidXQgc3RpbGwgZG8gaXQgYmVmb3JlIGNhbGxpbmcKIAlqY2ZfcGFyc2UpLgoJKGpjZl9wYXJzZV9zb3VyY2UpOiBBc3NpZ24gaW5wdXRfZmlsZW5hbWUgYWZ0ZXIgaGF2aW5nIHNhdmVkIHRoZQogCXBhcnNlciBjb250ZXh0LgoJKiBsZXguYyAoamF2YV9pbml0X2xleCk6IENoYWluIGEgV0ZMIG5vZGUgdG8gdGhlIGltcG9ydCBvbiBkZW1hbmQKIAlsaXN0LiBjdHhwLT5tb2RpZmllcl9jdHggemVyb2VkIGFjY29yZGluZyB0byBpdHMgbmV3CiAJZGVmaW5pdGlvbi4gY3R4cC0+ZmlsZW5hbWUgaW5pdGlhbGl6ZWQuIFJlbW92ZWQKCUpBVkFfTU9ESUZJRVJfQ1RYX1VOTUFSSy4KCShqYXZhX3VuZ2V0X3VuaWNvZGUpOiBVcGRhdGUgdGhlIGNoYXJhY3RlciBiYXNlZCBjb2x1bW4gcG9zaXRpb24uCgkoamF2YV9hbGxvY2F0ZV9uZXdfbGluZSk6IHJlZl9jb3VudCBub3QgdXNlZCBhbnltb3JlLiBBbHdheXMgZnJlZQogCWN0eHAtPnBfbGluZS4gSW5pdGlhbGl6ZSBjX2xpbmUtPmNoYXJfY29sIHRvIDAuCgkoamF2YV9nZXRfdW5pY29kZSk6IFVwZGF0ZSB0aGUgY2hhcmFjdGVyIGJhc2VkIGNvbHVtbiBwb3NpdGlvbi4KCShqYXZhX2xleCk6IFVzZSBjdHhwLT5lbGMgdG8gc3RvcmUgY3VycmVudCBwb3NpdGlvbiBpbiBzb3VyY2UKIAlmaWxlLCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJzZWQgdG9rZW4uIFNldCBtb2RpZmllcl9jdHggZW50cnkKIAljb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJzZSBtb2RpZmllciB0byBhIFdGTCBub2RlLiBSZXR1cm4gYSBXRkwKIAlub2RlIHdoZW4gYW4gaWRlbnRpZmllciBpcyBwYXJzZWQuCgkoamF2YV9sZXhfZXJyb3IpOiBOb3cgdXNlcyBjdHhwLT5lbGMgdG8gc3RvcmUgY3VycmVudCBwb3NpdGlvbiBpbgogCXNvdXJjZS4KCShidWlsZF93Zmxfbm9kZSwgamF2YV9pc19lb2wsIGphdmFfZ2V0X2xpbmVfY29sKTogTmV3IGZ1bmN0aW9ucy4KCSogbGV4LmggKGJ1aWxkX3dmbF9ub2RlKTogTmV3IGZ1bmN0aW9uIGRlZmluaXRpb25zLgoJKHN0cnVjdCBqYXZhX2xpbmUpOiByZWZfY291bnQgYW5kIG5leHQgZmllbGRzIGFyZSBnb25lLiBOZXcgZmllbGQKIAljaGFyX2NvbC4KCShKQVZBX0xJTkVfQ0hFQ0ssIEpBVkFfTElORV9NQVJLLCBKQVZBX0xJTkVfQ0hBSU4sCiAJSkFWQV9MSU5FX1VOTUFSSywgSURfTkFNRSwgSURfQ0wpOiBNYWNybyBkZWZpbml0aW9ucyBkZWxldGVkLgoJKEpBVkFfQ09MVU1OX0RFTFRBKTogTmV3IG1hY3JvLgoJKGphdmFfbGMpOiBOZXcgdHlwZWRlZiBvbiBuZXcgc3RydWN0IF9qYXZhX2xjLgoJKiBwYXJzZS5oIChsb29rdXBfY2wsIGxvb2t1cF9tb2RpZmllcl9jbCk6IENoYW5nZWQgcmV0dXJuZWQgdHlwZXMuCgkocGFyc2VfZXJyb3JfY29udGV4dCwgcGFyc2Vfd2FybmluZ19jb250ZXh0KTogQ2hhbmdlZCBwcm90b3R5cGVzLgoJKGphdmFfZ2V0X2xpbmVfY29sKTogQWRkZWQgYXMgYW4gYXZhaWxhYmxlIGdsb2JhbCBmdW5jdGlvbi4KCShKQVZBX01PRElGSUVSX0NUWF9VTk1BUkspOiBNYWNybyByZW1vdmVkLgoJKElDX0RFQ0wpOiBSZXBsYWNlZCBieSBtYWNybyBJQ19UWVBFCgkoREVQRU5EX1dGTCk6IE5ldyBtYWNyby4KCShUSElTX01PRElGSUVSX09OTFkpOiBOb3cgd29ya3Mgd2l0aCBXRkwgYW5kIG9ubHkgcmVtZW1iZXJzIHRoZSBmaXJzdAoJd3JvbmcgbW9kaWZpZXIuCgkoZXhpdF9qYXZhX2NvbXBsZXRlX2NsYXNzKTogUmVtb3ZlZCBhIGNvbW1lbnRlZCBvdXQgc3RhdGVtZW50LgoJKHN0cnVjdCBwYXJzZXJfY3R4dCk6IEFkZGVkIGNvbW1lbnRzIG9uIGZpZWxkcy4gbW9kaWZpZXJfY3R4IGlzCiAJbm93IGFuIGFycmF5IG9mIHRyZWUgbm9kZXMuIERlbGV0ZWQgZmllbGRzIGxpbmVfbGlzdCBhbmQKIAllX2xpbmUuIE5ldyBmaWVsZCBlbGMsIHRvIHJlcGxhY2UgZV9saW5lLgoJKiBwYXJzZS55IChhcnJheV90eXBlOik6IEJ1aWxkIFdGTCBub2RlLgoJKHF1YWxpZmllZF9uYW1lOik6IEJ1aWxkIGEgc2luZ2xlIFdGTCBub2RlIG91dCBvZiB0d28uIFJldGFpbgogCXRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgcmVzdWx0aW5nIG5vZGUuCgkocGFja2FnZV9kZWNsYXJhdGlvbjopOiBVc2UgcGFja2FnZSBuYW1lIGFzIGEgV0ZMIG5vZGUKCShzaW5nbGVfdHlwZV9pbXBvcnRfZGVjbGFyYXRpb246KTogVXNlIGltcG9ydGVkIG5hbWUgYXMgYSBXRkwgbm9kZS4KCSh0eXBlX2ltcG9ydF9vbl9kZW1hbmRfZGVjbGFyYXRpb246KTogVXNlIHJvb3Qgb2YgdGhlIGltcG9ydGVkCiAJcGFja2FnZXMgYXMgYSBXRkwgbm9kZS4KCShmaWVsZF9kZWNsYXJhdGlvbjopOiBSZW1vdmVkIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBjbC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogRG9uJ3QgY2FsbCBKQVZBX01PRElGSUVSX0NUWF9VTk1BUksuCgkoeXllcnJvcik6IE5ldyBzdGF0aWMgZWxjLiBSZW1vdmVkIHN0YXRpYyBlcnJvcl9saW5lLCBlcnJvcl9wb3MuCiAgCU5ldyBsb2NhbCBjb2RlX2Zyb21fc291cmNlLiBTYXZlIGN0eHAtPmVsYyBpbnRvIGVsYyBhdCB0aGUgZmlyc3QKIAlwYXNzLiBDYWxsIGphdmFfZ2V0X2xpbmVfY29sIHRvIGdldCBhIHN0cmluZyBvZiB0aGUgbGluZSB3aGVyZQogCXRoZSBlcnJvciBvY2N1cmVkLgoJKGRlYnVnX2xpbmUpOiBSZW1vdmVkIHN0YXRpYyBmdW5jdGlvbi4KCShwYXJzZV9lcnJvcl9jb250ZXh0LCBwYXJzZV93YXJuaW5nX2NvbnRleHQpOiBQYXJhbWV0ZXIgY2wgaXMgbm93CiAJYSBXRkwgbm9kZS4gVXNlIGl0cyB2YWx1ZSB0byBpbml0aWFsaXplIGN0eHAtPmVsYy4KCShyZWRlZmluaXRpb25fZXJyb3IpOiBQYXJhbWV0ZXIgY2wgaXMgbm93IGEgV0ZMIG5vZGUuCgkocGFyc2VfYWRkX2ludGVyZmFjZSk6IE5ldyBwYXJhbWV0ZXIgd2ZsLiBObyBsb25nZXIgY2FsbAogCWxvb2t1cF9jbCwgdXNlIHdmbCBpbnN0ZWFkLgoJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IFBhcmFtZXRlciBjbCBpcyBub3cgYSBXRkwgbm9kZS4KCShtYXliZV9jcmVhdGVfY2xhc3NfaW50ZXJmYWNlX2RlY2wpOiBMaWtld2lzZS4KCShhZGRfc3VwZXJpbnRlcmZhY2VzKTogTmV3IGZ1bmN0aW9uLgoJKGNyZWF0ZV9pbnRlcmZhY2UpOiBSZW1vdmVkIGxvY2FsIGNsLCBub2RlLCBzdXBlcl9kZWNsLAogCXN1cGVyX2RlY2xfdHlwZS4gIEZ1bmN0aW9uIG5vdyB1c2VzIGlkIGFzIGEgV0ZMIG5vZGUuIEJldHRlcgogCXdhcm5pbmcvZXJyb3IgcmVwb3J0IG9uIG9ic29sZXRlIG9yIGZvcmJpZGRlbiBtaXggb2YKIAltb2RpZmllcnMuIE5vdyBjYWxscyBhZGRfc3VwZXJpbnRlcmZhY2VzIHRvIHJlZ2lzdGVyIGludGVyZmFjZXMuCgkoY3JlYXRlX2NsYXNzKTogUmVtb3ZlZCBsb2NhbCBjbCwgbm9kZS4gTG9jYWwgdmFyaWFibGUgaWQgaXMgdXNlZAogCWFzIGEgV0ZMIG5vZGUuIEJldHRlciBlcnJvciByZXBvcnQgb24gZm9yYmlkZGVuIG1vZGlmaWVyCiAJbWl4LiBVc2VzIGFkZF9zdXBlcmludGVyZmFjZXMgdG8gcmVnaXN0ZXIgaW50ZXJmYWNlcy4KCShmaW5kX2ZpZWxkKTogQXJndW1lbnQgY2wgaXMgbm93IGEgV0ZMIG5vZGUuIE5vdyBzdG9yZSB0aGUgV0ZMCiAJbm9kZSBvZiBhIGZpZWxkcyB0aGF0IG5lZWRzIHRvIGJlIGNoZWNrZWQgZm9yIHRoZWlyCiAJaW5pdGlhbGl6YXRpb24uCgkobWV0aG9kX2hlYWRlcik6IExvY2FsIHZhcmlhYmxlIG5vZGUgbm9uIGxvbmdlciB1c2VkLiBMb2NhbAogCXZhcmlhYmxlIGlkIHJlcGxhY2VzIGNsLgoJKGNoZWNrX21vZGlmaWVyc19jb25zaXN0ZW5jeSk6IExvY2FsIHZhcmlhYmxlIGNsIGlzIG5vdyBhIFdGTAogCW5vZGUuCgkobWV0aG9kX2RlY2xhcmF0b3IpOiBMb2NhbCB2YXJpYWJsZSBjbCByZXBsYWNlZCBieSBwYXJhbWV0ZXIgaWQuCgkocGFyc2VyX3F1YWxpZmllZF9uYW1lKTogTm93IHVzZXMgcGFyYW1ldGVyIG5hbWUgYXMgYSBXRkwgbm9kZS4KCShwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlKTogTmV3IHBhcmFtZXRlciB3ZmwsIGZvciBhY2hpZXZlCiAJZ3JlYXRlciBhY2N1cmFjeSBkdXJpbmcgZXJyb3IgcmVwb3J0cy4KCShwYXJzZXJfY2hhaW5faW5jb21wbGV0ZV9pdGVtKTogTmV3IHBhcmFtZXRlciBuYW1lZCBsb2NhdGlvbi4gVXNlZCwKIAlhbG9uZyB0aGUgZGVjbCwgdG8gY29uc3RydWN0IHRoZSBpbmNvbXBsZXRlIGl0ZW0gbm9kZS4KCShqYXZhX2NvbXBsZXRlX2NsYXNzKTogcmVzb2x2ZV9jbGFzcyBub3cgdXNlcyBXRkwgbm9kZSBleHRyYWN0ZWQKIAlmcm9tIHRoZSBpbmNvbXBsZXRlIGl0ZW0gbm9kZS4gTWFjcm8gSUNfVFlQRSByZXBsYWNlcyBUUkVFX1BVUlBPU0UKCXdoZXJlIGFwcHJvcHJpYXRlLgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsKTogVW5yZXNvbHZlZCBmdW5jdGlvbidzIGFyZ3VtZW50IHR5cGVzIGFyZSBXRkwuCgkocmVzb2x2ZV9jbGFzcyk6IFBhcmFtZXRlciBjbCBpcyBub3cgYSBXRkwgbm9kZS4KCShyZXNvbHZlX2FuZF9sYXlvdXQpOiBMaWtld2lzZS4KCShkb19yZXNvbHZlX2NsYXNzKTogTGlrZXdpc2UuIFRyeSBmaXJzdCB0byB1c2UgY2wgYW5kIHRoZW4gZG8gdGhlCiAJbG9va3VwIG9uIHRoZSBkZWNsIHdoZW4gY2FsbGluZyBjaGVja19wa2dfY2xhc3NfYWNjZXNzLgoJKGNvbXBsZXRlX2NsYXNzX3JlcG9ydF9lcnJvcnMpOiBVc2UgSUNfVFlQRSBpbiBwbGFjZSBvZgogCVRSRUVfUFVSUE9TRSB3aGVyZSBhcHByb3ByaWF0ZS4gVXNlIERFUEVORF9XRkwgb24gZGVwZW5kZW5jeQogCWluc3RlYWQgb2YgZG9pbmcgYSBsb29rdXAgb3ZlciB0aGUgZGVjbC4KCShqYXZhX2NoZWNrX2ZpbmFsKTogVXNlIFdGTCBpbmZvIGZyb20gZmllbGQgdHJlZSBsaXN0LgoJKGxvb2t1cF9jbCk6IFJld3JpdHRlbiBhbmQgcmV0dXJucyBhIHN0YXRpY2FsbHkgZGVmaW5lZCBXRkwgbm9kZS4KCShsb29rdXBfbW9kaWZpZXJfY2wpOiBOb3cgdXNlcyBpbmZvcm1hdGlvbiBmcm9tIFdGTCBub2Rlcy4KCShwcm9jZXNzX2ltcG9ydHMpOiBMaWtld2lzZS4KCShyZWFkX2ltcG9ydF9kaXIpOiBuYW1lIGFuZCBjbCBhcmd1bWVudHMgcmVwbGFjZWQgYnkgYSBzaW5nbGUgV0ZMCiAJbm9kZS4gRnVuY3Rpb24gbW9kaWZpZWQgYWNjb3JkaW5nbHkuCgkoZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6IE5vdyB1c2VzIFdGTCBub2RlLgoJKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MpOiBjbCBhcmd1bWVudCBpcyBub3cgYSBXRkwgbm9kZS4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IEZpeGVkIHRvIHVzZSBXRkwgbm9kZXMuCgkocmVzb2x2ZV9leHByZXNzaW9uX25hbWUpOiBMaWtld2lzZS4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogbmFtZV9jb21ibyBhcmd1bWVudCByZW5hbWVkCiAJd2ZsLiBGdW5jdGlvbiBtb2RpZmllZCB0byB1c2UgV0ZMIG5vZGVzLgoJKGJ1aWxkX2ludm9rZSk6IGNsIHVzZWQgYXMgYSBXRkwgbm9kZSB3aGVuIGNhbGxpbmcgYnVpbGRfZXhwcl93ZmwuCgkobG9va3VwX21ldGhvZF9pbnZva2UpOiBjbCBpcyBub3cgYSBXRkwgbm9kZS4gQWRkZWQgbWlzc2luZwogCUlERU5USUZJRVJfUE9JTlRFUiB0byBjbGFzcyB0eXBlIGRlY2wgbmFtZS4KClR1ZSBBcHIgMTQgMTU6MjM6MjkgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChpbml0X3BhcnNlKTogTm93IHJldHVybnMgY2hhciogY29udGFpbmluZyB0aGUgZmlsZW5hbWUuCgpGcmkgQXByIDEwIDExOjM2OjA0IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogIE1hbmdsZSByZXBlYXRlZCBhcmcgdHlwZXMgdG8gbWF0Y2ggY2MxcGx1cy4KCgkqIGRlY2wuYywgamF2YS10cmVlLmggKGludGVnZXJfZm91cl9ub2RlKTogIE5ldyBJTlRFR0VSX0NTVCBub2RlLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEpOiAgSWYgZmxhZ19hc3N1bWVfY29tcGlsZWQsIGluaXRpYWwgY2xhc3MKCXN0YXRlIGlzIENTVEFURV9QUkVQQVJFRDsgbWFrZSBzdXBlcmNsYXNzIGFuZCBpbnRlcmZhY2VzIGRpcmVjdAoJcmVmZXJlbmNlcywgcmF0aGVyIHRoYW4gY29uc3RhbnQgcG9vbCBpbmRleGVzLgoKVGh1IEFwciAgOSAxNjoxMDo1NiAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHBhcnNlci55OiBJbmNsdWRlIGZsYWdzLmguIFJlbW92ZWQgZGVidWcgdmFyaWFibGUgcGwuCgkobWV0aG9kX2RlY2xhcmF0aW9uOik6IFVzZXMgY3R4cC0+cGFyc2VyX2NjYl9pbmRlbnQgaW5zdGVhZCBvZiBwbC4KCShibG9jazopOiBMaWtld2lzZS4KCShsYWJlbGVkX3N0YXRlbWVudF9uc2k6KTogR2VuZXJhdGUgZGVidWcgaW5mbyB3aGVuIHJlZHVjaW5nCiAJZXhwcmVzc2lvbl9zdGF0ZW1lbnQ6LgoJKGNoZWNrX3BrZ19jbGFzc19hY2Nlc3MpOiBnZXRfYWNjZXNzX2ZsYWdzX2Zyb21fZGVjbCBpbnZva2F0aW9uCiAJZml4ZWQgZm9yIG5ldyBDTEFTU18qIGZsYWdzIGxvY2F0aW9uLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBTYXZlL3Jlc3RvcmUgcGFyc2VyIGNvbnRleHQgd2hlbgogCWVudGVyaW5nL2xlYXZpbmcgdGhpcyByb3V0aW5lLiBSZXN0b3JlIGxpbmVubyB0byBpdHMgcmlnaHQgdmFsdWUKIAliZWZvcmUgY2FsbGluZyBleHBhbmRfZW5kX2JpbmRpbmdzLgoJKGJ1aWxkX21ldGhvZF9pbnZvY2F0aW9uX3N0bXQpOiBidWlsZF9pbnZva2UgY2FsbGVkIHdpdGggdGhlCiAJY3VycmVudCBsaW5lIGluZm9ybWF0aW9uLgoJKGJ1aWxkX2ludm9rZSk6IE5ldyBhcmd1bWVudCBjbC4gV3JhcCB0aGUgZnVuY3Rpb24gY2FsbCBhcm91bmQgYQogCXdmbCBub2RlLgoJKHJlZmluZV9hY2Nlc3NpYmxlX21ldGhvZHNfbGlzdCk6IENoYW5nZWQgY29tbWVudCwgcmVtb3ZlZAogCXVubmVjZXNzYXJ5IGNvZGUuCgkqIHBhcnNlLmg6IEZpeGVkIHR5cG8gaW4gY29tbWVudHMuCgkoQ0xBU1NfT1JfSU5URVJGQUNFKTogSGFuZGxlIHRoZSBuZXcgQ0xBU1NfKiBmbGFncyBsb2NhdGlvbi4KCShKQVZBX01BWUJFX0dFTkVSQVRFX0RFQlVHX0lORk8pOiBOZXcgbWFjcm8uCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogTmV3IGZpZWxkcyBjY2JfaW5kZW50LCBsYXN0X2NjYl9pbmRlbnQxLAogCXBhcnNlcl9jY2JfaW5kZW50LgoJKiBsZXguYyAoamF2YV9sZXgpOiBSZWNvcmQgdGhlIGxhc3QgY2xvc2luZyBjdXJseSBicmFja2V0IG9mIGEKIAlmdW5jdGlvbi4KCSogamNmLXBhcnNlLmMgKGpjZl9wYXJzZV9zb3VyY2UpOiBOb3cgY2FsbHMKIAlqYXZhX2NoZWNrX21ldGhvZHMuIENsYXJpZmllZCBjb21tZW50LCBmaXhlZCB0eXBvLgoKMTk5OC0wNC0wOSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy5jIChpbml0X3BhcnNlKTogRXhwb3NlIGZvciBub24gVVNFX0NQUExJQiBidWlsZHMuCgkoZmluaXNoX3BhcnNlKTogRXhwb3NlIGZvciBub24gVVNFX0NQUExJQiBidWlsZHMuCgpXZWQgQXByICA4IDEzOjA2OjIzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxhbmcuYyAobGFuZ19wcmludF94bm9kZSk6IE5ldyBmdW5jdGlvbi4KCkZyaSBBcHIgIDMgMTM6MjI6NDEgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNsYXNzX2R0YWJsZV9kZWNsKSwgamF2YS10cmVlLmg6ICBOZXcgdHJlZSBub2RlLgoJKiBjbGFzcy5jIChnZXRfZGlzcGF0Y2hfdmVjdG9yLCBnZXRfZGlzcGF0Y2hfdGFibGUpOiAgTmV3IGZ1bmN0aW9ucwoJdXNlZCB0byBidWlsZCBhIGNsYXNzJ3MgZGlzcGF0Y2ggdGFibGUuCgkobWFrZV9jbGFzc19kYXRhKTogIEdlbmVyYXRlIGRpc3BhdGNoIHRhYmxlIGlmIGZsYWdfYXNzdW1lX2NvbXBpbGVkLgoJU2V0IGR0YWJsZSBvZiBjbGFzcyBvYmplY3QgdG8gYWRkcmVzcyBvZiBjbGFzc19kdGFibGVfZGVjbC4KCgkqIGRlY2wuYyAoaW50X2RlY2xfcHJvY2Vzc2luZyk6ICBNYWtlIHNvZnRfYmFkYXJyYXlpbmRleF9ub2RlCgliZSB2b2xhdGlsZSBhbmQgaGF2ZSBzaWRlIGVmZmVjdHMgLSBnZW5lcmF0ZXMgYmV0dGVyIGNvZGUuCgoJKiBjbGFzcy5jLCBleHByLmMsIHBhcnNlLnk6ICBDTEFTU19JTlRFUkZBQ0UsIENMQVNTX0ZJTkFMLCBldGM6CglUaGVzZSBmbGFncyB3ZXJlIGRlZmluZWQgZm9yIFRZUEVfREVDTHMsIGJ1dCB1c2VkIG9uIFJFQ09SRF9UWVBFcy4KCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6ICBJZiBjbGFzcyBpcyBmaW5hbCwgbWV0aG9kIGlzCgllZmZlY3RpdmVseSBmaW5hbCwgc28gY2FuIGNhbGwgaXQgZGlyZWN0bHkuCgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9OVklSVFVBTFMsIFRZUEVfVlRBQkxFKTogIE5ldyBtYWNyb3MuCgoJKiBNYWtlZmlsZS5pbiwgTWFrZS1sYW5nLmluOiAgQWRkIG1pc3NpbmcgJChleGVleHQpcy4KClRodSBNYXIgMTkgMTY6NTk6MTYgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10KTogUmVtb3ZlZCBleHRyYSBhcmd1bWVudAogCXRvIGJ1aWxkX2ludm9rZS4KCk1vbiBNYXIgMTYgMTc6MjU6MTkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGR0YWJsZV9pbmRlbnQpOiBOb3cgc3RhdGljIGdsb2JhbC4KCShleHBhbmRfaW52b2tlKTogTm93IGNhbGwgaW52b2tlX2J1aWxkX2R0YWJsZSBhbmQKIAlidWlsZF9pbnZva2V2aXJ0dWFsLgoJKGludm9rZV9idWlsZF9kdGFibGUsIGJ1aWxkX2ludm9rZXZpcnR1YWwpOiBOZXcgZnVuY3Rpb25zLgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzcyk6IERlZmVyIGlzc3VpbmcgYSB3YXJuaW5nIGJ5IHNldHRpbmcKIAlqY2YtPm91dG9mc3luY2ggdG8gMS4KCSogamNmLXBhcnNlLmMgKGpjZl9vdXRfb2Zfc3luY2gpOiBOZXcgZnVuY3Rpb24uCgkobG9hZF9jbGFzcyk6IFRlc3QgdGhpc19qY2Yub3V0b2ZzeW5jaCBmbGFnIGFuZCBjYWxsCiAJamNmX291dF9vZl9zeW5jaCBhY2NvcmRpbmdseS4KCSogamNmLmg6ICh0eXBlZGVmIHN0cnVjdCBKQ0YpOiBOZXcgZmxhZyBvdXRvZnN5bmNoLiBGaXhlZCB0eXBvIGluCiAJY29tbWVudCBpbmRlbnRhdGlvbi4KCSogbGV4LmMgKGphdmFfZ2V0X3VuaWNvZGUpOiBGaXhlZCBjb2RlIGluZGVudGF0aW9uLgoJKGphdmFfbGV4KTogQ3JlYXRlIHN0cmluZyBsaXRlcmFsLiBGaXhlZCB0eXBvLiBSZW1vdmVkIHNldmVyYWwKIAlwcmVtYXR1cmUgb2JzdGFja19mcmVlLgoJKiBwYXJzZS5oOiBOZXcgZW51bXMgZm9yIG5hbWUgcmVzb2x1dGlvbiBhbmQgaW52b2NhdGlvbiBtb2RlLgoJKHN0cnVjdCBxdWFsaWZpY2F0aW9uKTogTmV3IGRhdGEgc3RydWN0dXJlLgoJKFJFU09MVkVfQ0hBSU5fUkVNQUlOREVSLCBCVUlMRF9QVFJfRlJPTV9OQU1FKTogTmV3IG1hY3Jvcy4KCShkb19yZXNvbHZlX2NsYXNzLCBidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10LAogCWJyZWFrZG93bl9xdWFsaWZpZWQsIHF1YWxpZnlfYW1iaWd1b3VzX25hbWUsIHJlc29sdmVfYW5kX2xheW91dCwKIAlkZWJ1Z19saW5lLCBpZGVudGljYWxfc3VicGF0aF9wLCBpbnZvY2F0aW9uX21vZGUsCiAJcmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0LCBidWlsZF9pbnZva2UsCiAJbG9va3VwX21ldGhvZF9pbnZva2UpOiBOZXcgZnVuY3Rpb25zIGRlY2xhcmVkLgoJKGJ1aWxkX2ludm9rZXZpcnR1YWwsIGludm9rZV9idWlsZF9kdGFibGUsIG1hdGNoX2phdmFfbWV0aG9kLAogCWJ1aWxkX2ZpZWxkX3JlZiwgamNmX291dF9vZl9zeW5jaCk6IE5ldyByZWZlcmVuY2VzIHRvIGV4dGVybmFsCiAJZnVuY3Rpb25zLgoJKHN0cnVjdCBwYXJzZV9jdHh0KTogUmVtb3ZlZCBhcnRpZmljaWFsX2NvbnN0cnVjdG9yIGZpZWxkLgoJKiBwYXJzZS55OiAoYXJyYXlfdHlwZTopOiBUeXBlIGRlZmluZWQgZm9yIHRoaXMgcnVsZS4KCShjbGFzc190eXBlOik6IEluc3RhbGxlZCBkZWZhdWx0IHJ1bGUgZm9yIGludGVyZmFjZV90eXBlOi4KCShhcnJheV90eXBlOik6IE5vdyBidWlsZCBKYXZhIGFycmF5IHR5cGUuCgkocXVhbGlmaWVkX25hbWU6KTogTm93IHVzZSBvYnN0YWNrX2dyb3cwLgoJKG1ldGhvZF9kZWNsYXJhdGlvbjopOiBTa2lwIHRoZSBhcnRpZmljaWFsIGNvbnN0cnVjdG9yIGFkZGVkIHRvCiAJdGhlIGxpc3QsIGlmIGFueS4KCShhYnN0cmFjdF9tZXRob2RfZGVjbGFyYXRpb246KTogRXhlY3V0ZSB0aGUgY29kZSBvbmx5IGR1cmluZyBwYXNzIDEuCgkoYmxvY2s6KTogSW5zdGFsbGVkIGRlZmF1bHQgcnVsZSBpbiBibG9ja19zdGF0ZW1lbnRzOi4KCShibG9ja19zdGF0ZW1lbnQ6KTogQWRkIHRoZSBzdGF0ZW1lbnQgdG8gdGhlIG1ldGhvZCBkdXJpbmcgcGFzcyAyLgoJKHN0YXRlbWVudF9leHByZXNzaW9uKTogSW5zdGFsbGVkIGRlZmF1bHQgcnVsZSBmb3IKIAltZXRob2RfaW52b2NhdGlvbjouCgkoYXJndW1lbnRfbGlzdDopOiBBZGRlZCBjb2RlIHRvIGJ1aWxkIHRoZSBhcmd1bWVudCBsaXN0LgogCShtZXRob2RfaW52b2NhdGlvbjopOiBBZGRlZCBjYWxsIHRvIGNyZWF0ZSB0aGUgbWV0aG9kIGludm9jYXRpb24KIAlub2RlLgoJKHl5ZXJyb3IpOiBOb3cgdXNlIG9ic3RhY2tfZ3JvdzAuIFJlbW92ZWQgYm9ndXMgb2JzdGFja19mcmVlLgoJKGRlYnVnX2xpbmUpOiBOZXcgZnVuY3Rpb24gZm9yIGRlYnVnLgoJKGNvbXBsZXRlX2NsYXNzX2RlY2wpOiBObyBsb25nZXIgZG8gc29tZXRoaW5nIGR1cmluZyBwYXNzIDEuCgkobWV0aG9kX2hlYWRlcik6IFVzZSBCVUlMRF9QVFJfRlJPTV9OQU1FLgoJKHBhcnNlcl9xdWFsaWZpZWRfY2xhc3NuYW1lKTogVXNlIG9ic3RhY2tfZ3JvdzAuIFJlbW92ZWQgYm9ndXMKIAlvYnN0YWNrX2ZyZWUuCgkocGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbSk6IFVzZSBCVUlMRF9QVFJfRlJPTV9OQU1FLiBNb2RpZmllZAogCWZ1bmN0aW9uJ3MgbWFpbiBjb21tZW50LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBTZXQgQ0xBU1NfTE9BREVEX1Agb24gYWxsIGZpeGVkIGluY29tcGxldGUKIAljbGFzc2VzLgoJKGNvbXBsZXRlX21ldGhvZF9kZWNsKTogVXNlIEJVSUxEX1BUUl9GUk9NX05BTUUgYW5kIHByb21vdGUgdHlwZXMuCgkocmVzb2x2ZV9jbGFzcyk6IE5vdyB3b3JrcyB3aXRoIGFycmF5cy4KCShkb19yZXNvbHZlX2NsYXNzLCByZXNvbHZlX2FuZF9sYXlvdXQpOiBOZXcgZnVuY3Rpb25zLgoJKGphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzKTogUmV2ZXJzZSBtZXRob2QgbGlzdCBiZWZvcmUgYW5kIGFmdGVyCiAJaGF2aW5nIHByb2Nlc3NlZCBpdC4gTm8gbG9uZ2VyIHNldCBjdHhwLT5hcnRpZmljaWFsX2NvbnN0cnVjdG9yLgoJKHJlYWRfaW1wb3J0X2Rpcik6IFRlc3QgamNmLT5vdXRvZnN5bmNoIGFuZCBjYWxsIGpjZl9vdXRfb2Zfc3luY2gKIAlhY2NvcmRpbmdseS4gRml4ZWQgdHlwbyBpbiBpc3N1ZWQgZXJyb3IgbWVzc2FnZS4gTm93IHVzZQogCW9ic3RhY2tfZ3JvdzAuCgkoZmluZF9pbl9pbXBvcnRzX29uX2RlbWFuZCk6IE5vdyB1c2Ugb2JzdGFja19ncm93MC4KCShkZWNsYXJlX2xvY2FsX3ZhcmlhYmxlcyk6IFVzZSBCVUlMRF9QVFJfRlJPTV9OQU1FLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QpOiBDYWxsIGV4cGFuZF9leHByX3N0bXQgaW5zdGVhZCBvZgogCWV4cGFuZF9leHByLiBDYWxscyBpdCBiZWZvcmUgY2FsbGluZyBleHBhbmRfZnVuY3Rpb25fZW5kLgoJKGphdmFfbWV0aG9kX2FkZF9zdG10KTogRG8gbm90aGluZyBpZiBlcnJvcnMgd2VyZSBmb3VuZCBkdXJpbmcKIAlwYXJzaW5nLgoJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcyk6IFNldCBDTEFTU19MT0FERURfUCBhbmQgZml4ZWQgdHlwby4KCShidWlsZF9tZXRob2RfaW52b2NhdGlvbl9zdG10LCBidWlsZF9pbnZva2UsIGludm9jYXRpb25fbW9kZSwKIAlsb29rdXBfbWV0aG9kX2ludm9rZSwgcmVmaW5lX2FjY2Vzc2libGVfbWV0aG9kc19saXN0LAogCXF1YWxpZnlfYW1iaWd1b3VzX25hbWUsIGJyZWFrZG93bl9xdWFsaWZpZWQsIGlkZW50aWNhbF9zdWJwYXRoX3ApOgogCU5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX3NpZ25hdHVyZSk6IFByb3Blcmx5IGVuZCBtZXRob2Qgc2lnbmF0dXJlCiAJaWYgcmV0dXJuIHR5cGUgc2tpcHBlZC4KCShtYXRjaF9qYXZhX21ldGhvZCk6IE5ldyBmdW5jdGlvbi4KCk1vbiBNYXIgMTYgMTA6NDA6NDcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzc2ZpbGUpOiAgSWYgVVNFX0pDRl9TVERJTywgZm9wZW4gaW4gYmluYXJ5IG1vZGUuCgpXZWQgRmViIDI1IDA4OjU1OjQ5IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChidWlsZF9pbnZva2Vfbm9uX2ludGVyZmFjZSk6IE5ldyBmdW5jdGlvbi4KCShtZXRob2RzX2lkZW50LCBuY29kZV9pZGVudCk6IE5vdyBzdGF0aWMgZ2xvYmFscy4KCShleHBhbmRfaW52b2tlKTogVXNlIGJ1aWxkX2ludm9rZV9ub25faW50ZXJmYWNlLgoJKiBqYXZhLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbCk6IE5ldyBmaWVsZCBmdW5jdGlvbl9kZWNsX2JvZHkuCgkoREVDTF9GVU5DVElPTl9CT0RZKTogTmV3IG1hY3JvLgoJKiBqY2YtcGFyc2UuYyAoamNmX3BhcnNlX3NvdXJjZSk6IERlZXBlciBjaGVjayBiZWZvcmUgc2V0dGluZwogCUNMQVNTX0ZST01fU09VUkNFX1AuCgkocGFyc2Vfc291cmNlX2ZpbGUpOiBGaXhlZCB0eXBvcy4gQ2FsbCBqYXZhX2xheW91dF9wYXJzZWRfY2xhc3MKCWJlZm9yZSBzdGFydGluZyBwYXNzIDIuIENhbGwgdG8gamF2YV9nZW5lcmF0ZV9wYXJzZWRfY2xhc3MgcmVwbGFjZWQKCWJ5IGphdmFfcmVnaXN0ZXJfcGFyc2VkX2NsYXNzLgoJKiBsZXguYzogRml4ZWQgdHlwbyBpbiBoZWFkZXIuIFNvbWUgbGluZSB3aWR0aCByZWxhdGVkIGZvcm1hdGluZy4KCSogbGV4Lmg6IFNvbWUgbGluZSB3aWR0aCByZWxhdGVkIGZvcm1hdGluZy4KCSogcGFyc2UuaCAoc291cmNlX2VuZF9qYXZhX21ldGhvZCwgcmVzb2x2ZV9leHByZXNzaW9uX25hbWUsCiAJY29tcGxldGVfY2xhc3NfZGVjbCwgbWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsLAogCWNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbik6IE5ldyBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgoJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcywgamF2YV9tZXRob2RfYWRkX3N0bXQpOiBOZXcgZnVuY3Rpb24KIAlkZWNsYXJhdGlvbnMuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogRmllbGQgbWFya19jbGFzc19nZW5lcmF0ZSByZW1vdmVkLiBOZXcKIAlmaWVsZHMgY2xhc3NfbGlzdCBhbmQgYXJ0aWZpY2lhbF9jb25zdHJ1Y3Rvci4KCSogcGFyc2UueTogRml4ZWQgdHlwbyBpbiBoZWFkZXIuCgkoY2xhc3NfZGVjbGFyYXRpb246KTogQ2FsbCBjb21wbGV0ZV9jbGFzc19kZWNsIHdoZW4gY2xhc3MgYm9keQogCXBhcnNlZC4KCShtZXRob2RfZGVjbGFyYXRpb246KTogQ2FsbCBzb3VyY2VfZW5kX2phdmFfbWV0aG9kIGluIHBhc3MgMiB3aGVuCgl0aGUgbWV0aG9kIGJvZHkgaXMgZGVmaW5lZC4KCShwb3N0Zml4X2V4cHJlc3Npb246KTogRG8gZXhwcmVzc2lvbiBuYW1lIHJlc29sdXRpb24gb24gc3ViLXJ1bGUKIAluYW1lIGR1cmluZyBwYXNzIDIuCgkoY3JlYXRlX2NsYXNzLCBjcmVhdGVfaW50ZXJmYWNlKTogTWVyZ2VkIGNvbW1vbiBwaWVjZXMuCiAJKGNoZWNrX2NsYXNzX2ludGVyZmFjZV9jcmVhdGlvbiwgbWF5YmVfY3JlYXRlX2NsYXNzX2ludGVyZmFjZV9kZWNsKToKCU5ldyBmdW5jdGlvbnMuCgkoY29tcGxldGVfY2xhc3NfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShyZWdpc3Rlcl9maWVsZHMpOiBGaXhlZCBsaW5lIHdpZHRoIHJlbGF0ZWQgdHlwby4KCShtZXRob2RfaGVhZGVyKTogQ29ycmVjdGx5IHNraXAgZmlyc3QgYXJndW1lbnQgd2hlbiBmaXhpbmcKIAlhcmd1bWVudCBsaW5lLiBDaGFuZ2VkIHRoZSBsb29wLgoJKGphdmFfY2hlY2tfY2lyY3VsYXJfcmVmZXJlbmNlKTogTm93IHVzZSBjdHhwLT5jbGFzc19saXN0LgoJKGphdmFfY29tcGxldGVfY2xhc3MpOiBSZW1vdmVkIHN0YXJ0L3N0b3AgbWFya2luZy4KCShqYXZhX2NoZWNrX3JlZ3VsYXJfbWV0aG9kcyk6IE5vdyB0YWtlcyBhIGNsYXNzIGRlY2wgYXMgYW4KIAlhcmd1bWVudC4gIEFkZCBkZWZhdWx0IGNvbnN0cnVjdG9yIGlmIG5vbmUgd2VyZSBlbmNvdW50ZXJlZC4KCShqYXZhX2NoZWNrX21ldGhvZHMpOiBOb3cgdXNlIGN0eHAtPmNsYXNzX2xpc3QuIENoYW5nZWQgY2FsbCB0bwogCWphdmFfY2hlY2tfcmVndWxhcl9tZXRob2RzLgoJKHNvdXJjZV9zdGFydF9qYXZhX21ldGhvZCk6IFNldCBERUNMX0FSR19UWVBFIGZvciBlYWNoIGZ1bmN0aW9uCiAJYXJndW1lbnRzLgoJKHNvdXJjZV9lbmRfamF2YV9tZXRob2QsIGphdmFfbWV0aG9kX2FkZF9zdG10KTogTmV3IGZ1bmN0aW9ucy4KCShqYXZhX2dlbmVyYXRlX3BhcnNlZF9jbGFzcyk6IE5vIGxvbmdlciBleGlzdHMuCiAJKGphdmFfbGF5b3V0X3BhcnNlZF9jbGFzcywgamF2YV9yZWdpc3Rlcl9wYXJzZWRfY2xhc3MpOiBOZXcgZnVuY3Rpb25zLgoJKHJlc29sdmVfZXhwcmVzc2lvbl9uYW1lKTogTmV3IGZ1bmN0aW9uLgoKVGh1IEZlYiAxMiAxMTo1NDoyOCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1wYXJzZS5jOiAocGFyc2Vfc291cmNlX2ZpbGUpOiBDaGVjayBvbiBlcnJvcnMgYWZ0ZXIgaW5pdCBsZXguCgkqIGxleC5jOiAoamF2YV9pbml0X2xleCk6IERlZmVyIGN0eHAtPmphdmFfcGFzcyBpbml0aWFsaXphdGlvbgogCXVudGlsIHBhc3MgaW5pdGlhbGl6YXRpb25zIGFyZSBkb25lLiBDYWxsIHJlYWRfaW1wb3J0X2RpciB3aXRoCiAJcGFzcyBzZXQgdG8gMC4KCSogcGFyc2UuaDogKGxvb2t1cF9tb2RpZmllcl9jbCk6IE5ldyBmdW5jdGlvbiBkZWNsYXJlZC4KCShJTlRFUkZBQ0VfRklFTERfTU9ESUZJRVJTKTogTmV3IG1hY3JvLgoJKE9CU09MRVRFX01PRElGSUVSX1dBUk5JTkcpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnk6IChyZWdpc3Rlcl9maWVsZHMpOiBDbGFzcyB0eXBlIGFuZCBjdXJyZW50IGZpZWxkIG5hbWUgaW4KIAlsb2NhbCB2YXJpYWJsZXMuIENoZWNrIG1vZGlmaWVyKHMpIGlmIGFkZGluZyBmaWVsZChzKSB0byBhbiBpbnRlcmZhY2UuCgkoY2hlY2tfYWJzdHJhY3RfbWV0aG9kX2hlYWRlcik6IE5vdyB1c2UgT0JTT0xFVEVfTU9ESUZJRVJfV0FSTklORwogCWFuZCByZXBvcnQgZXJyb3JzIHVzaW5nIHRoZSBmYXVsdHkgbW9kaWZpZXIgbGluZSBjb250ZXh0LgoJKGxvb2t1cF9tb2RpZmllcl9jbCk6IE5ldyBmdW5jdGlvbi4KCShyZWFkX2ltcG9ydF9kaXIpOiBEZXRlY3QgYW5kIHJlcG9ydCBkZWZhdWx0IGltcG9ydCBwcm9jZXNzaW5nCiAJZmFpbHVyZS4KCjE5OTgtMDItMTEgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJQWRkIGEgcGFpciBvZiAtZmFzc3VtZS1jb21waWxlZC8tZm5vLWFzc3VtZS1jb21waWxlZCBvcHRpb25zLgoJKiBjbGFzcy5jIChpc19jb21waWxlZF9jbGFzcyk6IFJldHVybiAxIGFmdGVyIG1ha2luZyBzdXJlIGl0CglxdWFsaWZpZXMgYXMgbG9hZGVkLCBpZiBGTEFHX0FTU1VNRV9DT01QSUxFRCBpcyBzZXQuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZhc3N1bWUtY29tcGlsZWQvLWZuby1hc3N1bWUtY29tcGlsZWQuCgkqIGphdmEtdHJlZS5oIChmbGFnX2Fzc3VtZV9jb21waWxlZCk6IEFkZCBkZWNsLgoJKiBsYW5nLmMgKGxhbmdfZl9vcHRpb25zKTogQWRkIHRoZSBmbGFnLgoJKGZsYWdfYXNzdW1lX2NvbXBpbGVkKTogQWRkIGRlY2wsIGRlZmF1bHQgdG8gMC4KCldlZCBGZWIgMTEgMTE6Mjc6NTkgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChjbGFzc19kZXB0aCk6IENhbGwgdG8gbG9hZF9jbGFzcyB1c2VzIGV4dHJhIFZFUkJPU0UgYXJnLgoJKGlzX2NvbXBpbGVkX2NsYXNzKTogTGlrZXdpc2UuCgkobGF5b3V0X2NsYXNzKTogTGlrZXdpc2UuCgkobGF5b3V0X2NsYXNzKTogRGV0ZWN0IGFuZCBsYXkgb3V0IGNsYXNzZXMgZGVmaW5lZCBpbiBzb3VyY2UgY29kZS4KCShpbnRlcmZhY2Vfb2ZfcCwgYWRkX2ludGVyZmFjZV9kbywgbWF5X2FkZF9pbnRlcmZhY2UpOiBOZXcKIAlmdW5jdGlvbi4KCShhZGRfaW50ZXJmYWNlKTogTm93IHVzZSBhZGRfaW50ZXJmYWNlX2RvLgoJKGFkZF9tZXRob2RfMSk6IE5ldyBmdW5jdGlvbi4KCShhZGRfbWV0aG9kKTogTm93IHVzZSBhZGRfbWV0aG9kXzEuCgkocHVzaGxldmVsKTogRGVidWcgbWVzc2FnZSBjb25kaXRpb25hbCB0byBTT1VSQ0VfRlJPTlRFTkRfREVCVUcuCgkoY29tcGxldGVfc3RhcnRfamF2YV9tZXRob2QpOiBOZXcgZnVuY3Rpb24uCgkoc3RhcnRfamF2YV9tZWhvZCk6IE5vdyBjYWxsIGNvbXBsZXRlX3N0YXJ0X2phdmFfbWV0aG9kLgoJKiBleHByLmMgKGxvb2t1cF9maWVsZCk6IENhbGwgdG8gbG9hZF9jbGFzcyB1c2VzIGV4dHJhIFZFUkJPU0UgYXJnLgoJKGV4cGFuZF9pbnZva2UpOiBMaWtld2lzZSBhbmQgZml4ZWQgdHlwby4KCSpnamF2YS5jOiAocHJpbnRfc3VwZXJfZmllbGQpOiBVc2UgbmV3IGFyZ3VtZW50IHRvIGZpbmRfY2xhc3MKIAlET19DTEFTU19GSUxFLgoJKG1haW4pOiBMaWtld2lzZS4KCSpqYXZhLXRyZWUuaDogKENMQVNTX0ZST01fU09VUkNFX1ApOiBOZXcgZmxhZyBvbiBSRUNPUkRfVFlQRS4KIAkoSVNfQV9TSU5HTEVfSU1QT1JUX0NMQVNTRklMRV9OQU1FX1AsIElTX0FfQ0xBU1NGSUxFX05BTUUsCiAJUVVBTElGSUVEX1AsIElTX0FOX0lNUE9SVF9PTl9ERU1BTkRfUCk6IE5ldyBmbGFncyBvbgogCUlERU5USUZJRVJfTk9ERS4KIAkoQ0xBU1NfQ09NUExFVEVfUCk6IE5ldyBmbGFnIG9uIFRZUEVfREVDTC4KCShhZGRfbWV0aG9kXzEsIHB1c2hfY2xhc3MpOiBOZXcgcHJvdG90eXBlcy4KCSpqY2YtZHVtcC5jOiBmaW5kX2NsYXNzIG5vdyB1c2VzIG5ldyBET19DTEFTU19GSUxFIGFyZ3VtZW50LgoJKmpjZi1pby5jOiAob3Blbl9pbl96aXApOiBqY2Ygbm93IHN0b3JlcyBhIHBvaW50ZXIgdG8gdGhlIFppcAogCWRpcmVjdG9yeSB3aGVyZSB0aGUgY2xhc3Mgd2FzIGZvdW5kLgoJKGZpbmRfY2xhc3MpOiBOZXcgYXJndW1lbnQgRE9fQ0xBU1NfRklMRS4gRnVuY3Rpb24gZmluZF9jbGFzcwogCW1vZGlmaWVkIGFjY29yZGluZ2x5LgoJKmpjZi1wYXJzZS5jOiAoZml4X2NsYXNzX3BhdGgpOiBOZXcgZnVuY3Rpb24uCgkobG9hZF9jbGFzcyk6IFVzZSBuZXcgVkVSQk9TRSBhcmd1bWVudC4gbG9hZF9jbGFzcyBub3cgZmluZHMgYW5kCiAJbG9hZHMvcGFyc2VzIC5jbGFzcy8uamF2YSBmaWxlcy4gU2F2ZSByZWFkX3N0YXRlIG9mIGN1cnJlbnRfamNmCglpZiBuZWNlc3NhcnkuCgkoamF2YV9wYXJzZXJfYWJvcnRfb25fZXJyb3IpOiBOZXcgbWFjcm8uCgkoamNmX3BhcnNlX3NvdXJjZSwgcGFyc2Vfc291cmNlX2ZpbGUpOiBOZXcgZnVuY3Rpb24uCgkoamNmX3BhcnNlKTogRml4ZWQgdHlwby4KCSh5eXBhcnNlKTogQ2FsbCBwYXJzZV9zb3VyY2VfZmlsZSAoKSBvbmx5LgoJKHByb2Nlc3NfemlwX2Rpcik6IEZpeGVkIHR5cG8sIGZpeCB6ZGlyLT5maWxlbmFtZV9sZW5ndGggd2hlbgogCXdyaXRpbmcgdGhlIHJlYWwgY2xhc3MgbmFtZSBiYWNrIGluIHRoZSB6aXAgZGlyZWN0b3J5IGVudHJ5LgoJKGZpbmRfaW5fY3VycmVudF96aXApOiBJREVOVElGSUVSX0NMQVNTX1ZBTFVFIG1heSBiZSBudWxsLgoJKGpjZl9maWd1cmVfZmlsZV90eXBlKTogRml4ZWQgYm9ndXMgYWxsb2MgYW5kIGJjb3B5LgoJKmpjZi5oOiAodHlwZWRlZiBzdHJ1Y3QgSkNGKTogTmV3IGZpZWxkcyBqYXZhX3NvdXJjZSBhbmQgemlwZC4KCShmaW5kX2NsYXNzKTogUHJvdG90eXBlIGZpeGVkLgoJKmxleC5jOiBBZGRlZCAxOTk4IHRpbWUgc3RhbXAuCglSZW1vdmVkIGFsbCBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcywgbW92ZWQgaW50byB0aGUgcGFyc2VyCiAJY29udGV4dCBkYXRhIHN0cnVjdHVyZS4uIE5vdyBpbmNsdWRlIHVuaXN0ZC5oIGlmIFNFRUtfU0VUIG5vdAogCWRlZmluZWQuCgkoamF2YV9pbml0X2xleCk6IFJld3JpdHRlbi4KCShqYXZhX3NuZWFrX3VuaWNvZGUpOiBNb2RpZmllZCBjdXJyZW50IHVuaWNvZGUgYWNjZXNzIGluIGN1cnJlbnQgbGluZS4KCShqYXZhX3VuZ2V0X3VuaWNvZGUpOiBMaWtld2lzZS4KCShqYXZhX2FsbG9jYXRlX25ld19saW5lKTogTmV3IGFsbG9jYXRpb24gbWFuYWdlbWVudC4KCShqYXZhX3JlYWRfY2hhcik6IE1vZGlmaWVkIGFjY2VzcyBhbmQgc3RvcmFnZSBvZiB1bmdldF91dGY4X3ZhbHVlLgoJTmV3IHdheSBvZiBwcm9jZXNzaW5nIGN1cnJlbnQgdW5pY29kZS4KCShqYXZhX3N0b3JlX3VuaWNvZGUsIGphdmFfcmVhZF91bmljb2RlKTogRml4ZWQgdHlwbyBpbiBkZWNsYXJhdGlvbi4KCShqYXZhX2dldF91bmljb2RlKTogTm93IHVzZSB0aGUgcGFyc2VyIGNvbnRleHQuCgkoamF2YV9saW5ldGVybWluYXRvcik6IExpa2V3aXNlLgoJKGphdmFfbGV4KTogTm93IHVzZWQgamF2YV9sdmFsIGFyZ3VtZW50IChwb2ludGVyIHRvIFlZU1RZUEUpLCBwYXJ0CiAJb2YgdGhlIHJlZW50cmFudCBwYXJzZXIgaW1wbGVtZW50YXRpb24uIEZ1bmN0aW9uIG5vdyB1c2UgdGhlCiAJcGFyc2VyIGNvbnRleHQgZGF0YSBzdHJ1Y3R1cmUgYW5kIGphdmFfbHZhbC4gRml4ZWQgcHJvZHVjdGlvbiBvZgogCXRoZSBmbG9hdCBhbmQgZG91YmxlIGNvbnN0YW50ICJvdXQgb2YgcmFuZ2UiIGVycm9yIG1lc3NhZ2UuIEZpeGVkCiAJb2JzdGFjayB1c2UuIFJldHVybiBpbnRlZ2VyIHZhbHVlIHdoZW4gaGl0dGluZyBhIG1vZGlmaWVyLiBOb3cKIAlyZXR1cm4gdHlwZSBmb3IgVFJVRSwgRkFMU0UgYW5kIG90aGVyIHByZWRlZmluZWQgdHlwZXMuIFJldHVybgogCWlkZW50aWZpZXIgYXMgYSBUUkVFX0xJU1QgbGlzdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGxpbmUgY29udGV4dAogCWFzIHRoZSBUUkVFX1ZBTFVFIHN1Yi1ub2RlLgoJKGphdmFfdW5pY29kZV8yX3V0ZjgpOiBGaXhlZCB0eXBvIGluIGRlY2xhcmF0aW9uLgoJKGphdmFfbGV4X2Vycm9yKTogTm93IHVzZSB0aGUgcGFyc2VyIGNvbnRleHQgZGF0YSBzdHJ1Y3R1cmUuCgkqbGV4Lmg6IEFkZGVkIDE5OTggdGltZSBzdGFtcC4KCShzdHJ1Y3QgamF2YV9saW5lKTogTmV3IGZpZWxkcyByZWZfY291bnQgYW5kIG5leHQuCgkoSkFWQV9MSU5FX0NIRUNLLCBKQVZBX0xJTkVfTUFSSywgSkFWQV9MSU5FX0NIQUlOLAogCUpBVkFfTElORV9VTk1BUkssIElEX05BTUUsIElEX0NMKTogTmV3IG1hY3Jvcy4KCShKQVZBX0ZMT0FUX1JBTkdFX0VSUk9SLCBKQVZBX0lOVEVHUkFMX1JBTkdFX0VSUk9SLCBVTkdFVEMpOiBGaXhlZC4KCSpwYXJzZS5oOiBBZGRlZCAxOTk4IHRpbWUgc3RhbXAuCgkoamF2YV9wYXJzZV9zb3VyY2VfZmlsZSk6IFJlbmFtZWQgZnJvbSBwYXJzZV9zb3VyY2VfZmlsZS4KCShZWUVSUk9SX05PVywgWVlOT1RfVFdJQ0UpOiBGaXhlZC4KCShDTEFTU19NT0RJRklFUlMsIEZJRUxEX01PRElGSUVSUywgTUVUSE9EX01PRElGSUVSUywKIAlJTlRFUkZBQ0VfTU9ESUZJRVIsIElOVEVSRkFDRV9NRVRIT0RfTU9ESUZJRVJTLAogCUpBVkFfTU9ESUZJRVJfQ1RYX1VOTUFSSywgSUNfREVDTCwgSUNfREVQRU5ELCBERVBFTkRfREVDTCwKIAlUSElTX01PRElGSUVSX09OTFksIEFCU1RSQUNUX0NIRUNLLCBCRUdJTl9PTkxZX1BBU1MsCiAJRU5EX09OTFlfUEFTUywgRUxTRV9PTkxZX1BBU1MsIGV4aXRfamF2YV9jb21wbGV0ZV9jbGFzcywKIAlDTEFTU19PUl9JTlRFUkZBQ0UsIElOQ09NUExFVEVfUCk6IE5ldyBtYWNyb3MuCgkoc3RydWN0IHBhcnNlcl9jdHh0KTogTmV3IGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdGhlIHBhcnNlciBjb250ZXh0LgoJKnBhcnNlLnk6IEFkZGVkIDE5OTggdGltZSBzdGFtcCwgZ290IHJpZCBvZiBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlcy4KCShqYXZhX2Vycm9yX2NvdW50LCBjdHhwKTogTmV3IGdsb2JhbCB2YXJpYWJsZXMuCgkoJXVuaW9uKTogTmV3IHZhbHVlIGZpZWxkLgoJKG51bWVyaWNfdHlwZSwgaW50ZWdyYWxfdHlwZSk6IFJ1bGVzIHJlbW92ZWQuCgkocHJpbWl0aXZlX3R5cGUpOiBSdWxlIGRlZmluZWQgdG8gaGFuZGxlIGludGVncmFsLCBmbG9hdCwgZG91YmxlIGFuZAogCWJvb2xlYW4gdHlwZXMuCgkocXVhbGlmaWVkX25hbWUsIHBhY2thZ2VfZGVjbGFyYXRpb24sCiAJc2luZ2xlX3R5cGVfaW1wb3J0X2RlY2xhcmF0aW9uLCB0eXBlX2ltcG9ydF9vbl9kZW1hbmRfZGVjbGFyYXRpb24sCiAJbW9kaWZpZXJzLCBjbGFzc19kZWNsYXJhdGlvbiwgc3VwZXIsIGludGVyZmFjZXMsCiAJaW50ZXJmYWNlX3R5cGVfbGlzdCwgY2xhc3NfYm9keSwgZmllbGRfZGVjbGFyYXRpb24sCiAJZmllbGRfZGVjbGFyYXRpb24sIHZhcmlhYmxlX2RlY2xhcmF0b3JzLCB2YXJpYWJsZV9kZWNsYXJhdG9yLAogCXZhcmlhYmxlX2RlY2xhcmF0b3JfaWQsIG1ldGhvZF9kZWNsYXJhdGlvbiwgbWV0aG9kX2hlYWRlciwKIAlmb3JtYWxfcGFyYW1ldGVyX2xpc3QsIGZvcm1hbF9wYXJhbWV0ZXIsIG1ldGhvZF9ib2R5LCBibG9jaywKIAlzdGF0aWMsIGludGVyZmFjZV9kZWNsYXJhdGlvbiwgZXh0ZW5kc19pbnRlcmZhY2VzLAogCWFic3RyYWN0X21ldGhvZF9kZWNsYXJhdGlvbiwgbG9jYWxfdmFyaWFibGVfZGVjbGFyYXRvcnMpOiBSdWxlcyBub3cKIAlkZWZpbmUgYWN0aW9ucy4KCShmb3JjZV9lcnJvciwgZG9fd2FybmluZyk6IE5ldyBnbG9iYWwgc3RhdGljcy4KCShwdXNoX3BhcnNlcl9jb250ZXh0LCBwYXJzZXJfY29udGV4dF9zYXZlX2dsb2JhbCwKIAlwYXJzZXJfY29udGV4dF9yZXN0b3JlX2dsb2JhbCwgcG9wX3BhcnNlcl9jb250ZXh0KTogTmV3IGZ1bmN0aW9ucy4KCSh5eWVycm9yKTogTm93IHVzZXMgdGhlIGdsb2JhbCBwYXJzZXIgY29udGV4dC4gRml4ZWQgdXNlIG9mIG9ic3RhY2suCgkocGFyc2VfZXJyb3IsIHBhcnNlX2Vycm9yX2NvbnRleHQsIHBhcnNlX3dhcm5pbmdfY29udGV4dCwKIAlqYXZhX2FjY3N0cmluZ19sb29rdXAsIHJlZGVmaW5pdGlvbl9lcnJvciwgY2hlY2tfbW9kaWZpZXJzLAogCXBhcnNlcl9hZGRfaW50ZXJmYWNlLCBjcmVhdGVfaW50ZXJmYWNlLCBjcmVhdGVfY2xhc3MsIGZpbmRfZmllbGQsCiAJZHVwbGljYXRlX2RlY2xhcmF0aW9uX2Vycm9yLCByZWdpc3Rlcl9maWVsZHMsIG1ldGhvZF9oZWFkZXIsCiAJY2hlY2tfbW9kaWZpZXJzX2NvbnNpc3RlbmN5LCBjaGVja19hYnN0cmFjdF9tZXRob2RfaGVhZGVyLAogCW1ldGhvZF9kZWNsYXJhdG9yLCBwYXJzZXJfcXVhbGlmaWVkX2NsYXNzbmFtZSwKIAlwYXJzZXJfY2hlY2tfc3VwZXJfaW50ZXJmYWNlLCBwYXJzZXJfY2hlY2tfc3VwZXIsCiAJcGFyc2VyX2NoYWluX2luY29tcGxldGVfaXRlbSwgamF2YV9jaGVja19jaXJjdWxhcl9yZWZlcmVuY2UsCiAJbGF5b3V0X2NsYXNzX2Zyb21fc291cmNlLCBqYXZhX2NvbXBsZXRlX2NsYXNzLAogCWNvbXBsZXRlX21ldGhvZF9kZWNsLCByZXNvbHZlX2NsYXNzLCBjb21wbGV0ZV9jbGFzc19yZXBvcnRfZXJyb3JzLAogCWphdmFfY2hlY2tfZmluYWwsIGNoZWNrX21ldGhvZF9yZWRlZmluaXRpb24sCiAJamF2YV9jaGVja19yZWd1bGFyX21ldGhvZHMsIGphdmFfY2hlY2tfYWJzdHJhY3RfbWV0aG9kcywKIAlqYXZhX2NoZWNrX21ldGhvZHMsIGxvb2t1cF9qYXZhX2ludGVyZmFjZV9tZXRob2QyLAogCWxvb2t1cF9qYXZhX21ldGhvZDIsIGxvb2t1cF9jbCwgZmluZF9uYW1lX2luX3NpbmdsZV9pbXBvcnRzLAogCXByb2Nlc3NfaW1wb3J0cywgZmluZF9pbl9pbXBvcnRzLCByZWFkX2ltcG9ydF9lbnRyeSwKIAlyZWFkX2ltcG9ydF9kaXIsIGZpbmRfaW5faW1wb3J0c19vbl9kZW1hbmQsCiAJY2hlY2tfcGtnX2NsYXNzX2FjY2Vzcywgbm90X2J1aWx0aW5fcCwgZGVjbGFyZV9sb2NhbF92YXJpYWJsZXMsCiAJc291cmNlX3N0YXJ0X2phdmFfbWV0aG9kLCBqYXZhX2dlbmVyYXRlX3BhcnNlZF9jbGFzcyk6IE5ldwogCWZ1bmN0aW9ucy4KCSp0eXBlY2suYzogKHNpZ25hdHVyZV9pbmNsdWRlX3JldHVybik6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBVc2UgU0lHTkFUVVJFX0lOQ0xVREVfUkVUVVJOIGZpZ3VyZSB3aGV0aGVyCiAJdG8gYWRkIHRoZSBmdW5jdGlvbiByZXR1cm5lZCB0eXBlIGluIHRoZSBzaWduYXR1cmUuCgoxOTk4LTAyLTA5ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogamNmLWlvLmMgKG9wZW5faW5femlwKTogVXNlIHN0cm5jbXAgYW5kIExFTi4KClRodSBKYW4gMjkgMTY6MTI6MTMgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhLmluZm8pOiBBZGRlZC4KCShqYXZhLmluc3RhbGwtaW5mbyk6IEFkZGVkCgoxOTk4LTAxLTI3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogQWxzbyByZW1vdmUgamF2YS9wYXJzZS5jLgoKMTk5OC0wMS0yNiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCglBZGQgYSBwYWlyIG9mIC1mYm91bmRzLWNoZWNrLy1mbm8tYm91bmRzLWNoZWNrIG9wdGlvbnMuCgkqIGxhbmcuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWRkIGNvZGUgdG8gZ3JvayBhcmd1bWVudHMuCgkoZmxhZ19ib3VuZHNfY2hlY2spOiBBZGQgZGVjbC4KCShsYW5nX2Zfb3B0aW9ucyk6IE5ldyBhcnJheSB3LyB0aGUgb3B0aW9uIGluIGl0LgoJKiBqYXZhLXRyZWUuaCAoZmxhZ19ib3VuZHNfY2hlY2spOiBBZGQgZGVjbC4KCSogbGFuZy1vcHRpb25zLmg6IE5ldyBmaWxlLgoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXlhY2Nlc3MpOiBVc2UgZmxhZ19ib3VuZHNfY2hlY2sgaW5zdGVhZAoJb2YgYSBzdGF0aWMgbWFjcm8gdmFsdWUuCgkoSkFWQV9BUlJBWV9FWENFUFRJT04pOiBEZWxldGUgbWFjcm8uCgpGcmkgSmFuIDIzIDE0OjE5OjQ3IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6ICBGaXggdHdvIGJ1Z3MgaW4gcHJldmlvdXMgY2hhbmdlLgoJKiBleHByLmMgKGJ1aWxkX2FuZXdhcnJheSk6ICBBZGQgbWlzc2luZyBwcm9tb3RlX3R5cGUuCgpUaHUgSmFuIDIyIDE3OjQzOjQ1IDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCUFkZCBhcnJheSB0eXBlcyB3aXRoIGtub3duIGxlbmd0aCB0byBvcHRpbWl6ZSBib3VuZHMgY2hlY2tpbmcuCgkqIHR5cGVjay5jIChidWlsZF9qYXZhX2FycmF5X3R5cGUpOiAgVGFrZSBsZW5ndGggcGFyYW1ldGVyLgoJKGphdmFfYXJyYXlfdHlwZV9sZW5ndGgsIGJ1aWxkX3ByaW1fYXJyYXlfdHlwZSk6ICBOZXcgZnVuY3Rpb25zLgoJKiBqYXZhLXRyZWUuaDogIFVwZGF0ZSBmb3IgbmV3IGZ1bmN0aW9ucy4KCSogZXhwci5jLCB0eXBlY2suYywgdmVyaWZ5LmM6IFVwZGF0ZSBidWlsZF9qYXZhX2FycmF5X3R5cGUgY2FsbHMuCgkqIGNsYXNzLmM6ICBVc2UgYnVpbGRfcHJpbV9hcnJheV90eXBlLgoJKiBleHByLmMgKGNhbl93aWRlbl9yZWZlcmVuY2VfdG8pOiAgSGFuZGxlIGtub3duLWxlbmd0aCBhcnJheSB0eXBlcy4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBLZWVwIHRyYWNrIG9mIGludGVnZXIgcHVzaCBpbnN0cnVjdGlvbnMKCWZvbGxvd2VkIGJ5IG5ld2FycmF5L2FuZXdhcnJheSwgc28gd2UgY2FuIGJ1aWxkIGtub3duLWxlbmd0aCBhcnJheXMuCgkoSkFWQV9BUlJBWV9EQVRBX09GRlNFVCk6ICBSZXBsYWNlIGJ5IC4uLgoJKGphdmFfYXJyYXlfZGF0YV9vZmZzZXQpOiAgTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2phdmFfYXJyYXlfbGVuZ3RoX2FjY2Vzcyk6ICBOZXcgZnVuY3Rpb24uICBPcHRpbWl6ZSBpZiBjb25zdGFudC4KCShidWlsZF9qYXZhX2FycmF5YWNjZXNzKTogIENvbnN0YW50IGZvbGQgYm91bmRzIGNoZWNrLgoJKGV4cGFuZF9qYXZhX25ld2FycmF5LCBleHBhbmRfamF2YV9hbmV3YXJyYXkpOiAgUmVwbGFjZWQgYnkgLi4uCgkoYnVpbGRfbmV3YXJyYXksIGJ1aWxkX2FuZXdhcnJheSk6ICBOZXcgZnVuY3Rpb25zLgoJKEFSUkFZX05FV19OVU0sIEFSUkFZX05FV19QVFIpOiAgVXNlIGJ1aWxkX3thLH1uZXdhcnJheS4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIEhhbmRsZSBrbm93bi1sZW5naCBhcnJheSB0eXBlcy4KCk1vbiBKYW4gMTkgMTM6MDk6MjUgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9ieXRlX2NvZGUpOiAgRml4IHBlcmZvcm1hY2UgYnVnLCB3aGljaCBjYXVzZWQKCXNlYXJjaGluZyBsaW5lbnVtYmVyX3RhYmxlIHRvIGJlIGxpbmVhciByYXRoZXIgdGhhbiBjb25zdGFudC4KCkZyaSBEZWMgMTIgMTk6MTg6NDIgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQklTT04sIEJJU09ORkxBR1MpOiAgQWRkIG1pc3NpbmcgbWFjcm9zLgoKCSogZGVjbC5jLCBqYXZhLXRyZWUuaCAoc29mdF9mbW9kX25vZGUpOiAgTmV3IGdsb2JhbC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBEZWZpbmUgX19idWlsdGluX2Ztb2QuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9iaW5vcCk6ICBJbXBsZW1lbnQgVFJVTkNfTU9EX0VYUFIgZm9yIFJFQUxfVFlQRQoJdXNpbmcgX19idWlsdGluX2Ztb2QuCgpUaHUgRGVjICA0IDEzOjIyOjU5IDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSoga2V5d29yZC5oOiBOZXcgZmlsZSwgb3V0cHV0IG9mIGtleXdvcmQuZ3BlcmYgYXMgcHJvY2Vzc2VkIGJ5CiAJZ3BlcmYuCgkqIGxleC5jIChqYXZhX2xleF9pbml0KTogSW5pdGlhbGl6ZSBqYXZhX2Vycm9yX2ZsYWcuCgkqIHBhcnNlLmMgKFlZRVJST1JfTk9XKTogVXNlcyBqYXZhX2Vycm9yX2ZsYWcuCgkqIHBhcnNlLnk6IE5ldyBzdGF0aWMgamF2YV9lcnJvcl9mbGFnLiBVc2VsZXNzIGRlZmluaXRpb24gb2YKIAlidWZmZXJfZXJyb3IgZ29uZS4KCSogcGFyc2UueSAoamF2YV9lcnJvcik6IFBvcnRhYmxlIGVycm9yIHJlY292ZXJ5IHVzaW5nCiAJamF2YV9lcnJvcl9mbGFnCShub3QgeWV0IGNvbXBsZXRlbHkgdHVuZWQpLgoKMTk5Ny0xMi0wNCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKHBhcnNlLmMpOiBVc2UgJChzcmNkaXIpIGZvciBwYXJzZS55LgoKV2VkIERlYyAgMyAxODozNzo0MiAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiAoSkFWQV9PQkpTKTogTmV3IG9iamVjdCBqY2YtcGFyc2Uuby4KCShwYXJzZS5jLCBsZXguYywga2V5d29yZC5oKTogTmV3IHJ1bGVzIGZvciBKYXZhIHNvdXJjZSBjb2RlCiAJZnJvbnQtZW5kLgoJKiBwYXJzZS5jOiBSZW5hbWVkIGludG8gamNmLXBhcnNlLmMuCgkqIGpjZi1wYXJzZS5jICh5eXBhcnNlKTogSW52b2tlIHRoZSBwYXJzZXIgdG8gcHJvY2VzcyBKYXZhIHNvdXJjZSBjb2RlLgoJKiBrZXl3b3JkLmdwZXJmOiBOZXcgZmlsZSwgSmF2YSBrZXl3b3Jkcy4KCSogcGFyc2UueTogTmV3IGZpbGUsIEphdmEgbGFuZ3VhZ2UgZ3JhbW1hci4KCSogcGFyc2UuaDogTmV3IGZpbGUsIEphdmEgbGFuZ3VhZ2UgZ3JhbW1hciBkZWZpbml0aW9ucy4KCSogbGV4LmM6IE5ldyBmaWxlLCBKYXZhIGxhbmd1YWdlIGxleGVyLgoJKiBsZXguaDogTmV3IGZpbGUsIEphdmEgbGFuZ3VhZ2UgbGV4ZXIgZGVmaW5pdGlvbnMuCgpXZWQgRGVjICAzIDE3OjAwOjE3IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogZGVjbC5jIChjbGluaXRfaWRlbnRpZmllcl9ub2RlKSwgamF2YS10cmVlLmg6ICBOZXcgZ2xvYmFsLgoJKiBqYXZhLXRyZWUuaCAoSVNfTUVUSE9EX0lOSVRfUCwgSVNfTUVUSE9EX0NMSU5JVF9QKTogIFJlbW92ZWQuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBJbmxpbmUgdXNlIG9mIHJlbW92ZWQgbWFjcm9zLgoJKiBleHByLmMgKGV4cGFuZF9qYXZhX2ZpZWxkX29wKTogIENoZWNrIGZvciBpbnZhbGlkIGFzc2lnbm1lbnQKCXRvIGZpbmFsIGZpZWxkLgoKCSogamNmLXJlYWRlci5jIChnZXRfYXR0cmlidXRlKTogIFRlc3QgZm9yIHdyb25nIGF0dHJpYnV0ZSBsZW5ndGguCgpNb24gT2N0IDI3IDE3OjQ2OjM2IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdmVyaWZ5LmMgKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogIFdoZW4gcHJvY2Vzc2luZyBhIGhhbmRsZXIsCglhdHRlbXB0IHRvIHNldCB0aGUgY3VycmVudF9zdWJyIHRvIHRoZSByaWdodCB2YWx1ZS4KCShNb3JlIGNvbXBsaWNhdGVkIGNvZGUgY29tYmluZXMgU2VwIDE3IGFuZCBPY3QgMjIgdmVyc2lvbnMuKQoKRnJpIE9jdCAyNCAxMTozNjo1NCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHB1c2hfY2xhc3MpOiAgRmlndXJlIG91dCAoZ3Vlc3MpIG5hbWUgb2Ygc291cmNlIGZpbGUuCgkqIHBhcnNlLmMgIChzZXRfc291cmNlX2ZpbGVuYW1lKTogIFNldCBERUNMX1NPVVJDRV9GSUxFIG9mIGNsYXNzIGRlY2wuCgkoZ2l2ZV9uYW1lX3RvX2NsYXNzKTogIERvbid0IGd1ZXNzIHNvdXJjZSBuYW1lOyAgdXNlIERFQ0xfU09VUkNFX0ZJTEUuCgkocGFyc2VfY2xhc3NfZmlsZSk6ICBDaGFuZ2UgcmV0dXJuIHR5cGUgZnJvbSBpbnQgdG8gdm9pZC4KCUNhbGwgZGVidWdfc3RhcnRfc291cmNlX2ZpbGUvZGVidWdfZW5kX3NvdXJjZV9maWxlLgoKCSogZXhwci5jIChidWlsZF9qYXZhX2Jpbm9wKTogIEZpeCBtYXNraW5nIDJuZCBvcGVyYW5kLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIFNldCBzaXpldHlwZSBmaXJzdC4KCldlZCBPY3QgMjIgMTk6Mzk6MDUgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgRG9uJ3Qgc2V0IGN1cnJlbnRfc3ViciB0byBOVUxMLgoJKFJldmVydCBTZXAgMTcgY2hhbmdlLikKClR1ZSBPY3QgMjEgMTU6MDk6MDIgMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBwYXJzZS5jIChwcm9jZXNzX3ppcF9kaXIpOiBTa2lwIFpJUCBlbnRyaWVzIG5vdCBiZWFyaW5nIHRoZQogCS5jbGFzcyBleHRlbnNpb24gaW4gdGhlaXIgbmFtZSBhbmQgZml4IHRoaW5nIHNvIHdlIGRvbid0IHByb2Nlc3MKIAl0aGVtIHBhcnNlX3ppcF9maWxlX2VudHJpZXMoKS4KCShwYXJzZV96aXBfZmlsZV9lbnRyaWVzKTogQ2xlYW5lZCB1bnVzZWQgbG9jYWwgdmFyaWFibGVzLgoKTW9uIE9jdCAyMCAxNDo1Mjo0MiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6ICBBbGxvd3MgZXF1YWwgYXJyYXkgZWxlbWVudCB0eXBlcy4KCShleHBhbmRfYnl0ZV9jb2RlKTogIFBSRV9SRVQgbXVzdCBleHBhbmQgT1BFUkFORF9WQUxVRSAodG8gZ2V0IGluZGV4KS4KCSogamNmLWR1bXAuYyAoUkVUKTogIEdldCAoYW5kIHByaW50KSBpbmRleC4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyBjYXNlIE9QQ09ERV9hbmV3YXJyYXkpOgoJUHJvbW90ZSBlbGVtZW50IHR5cGUgdG8gUE9JTlRFUl9UWVBFLgoKTW9uIE9jdCAyMCAxMzo0MDo0MSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGpjZi1yZWFkZXIuYywgcGFyc2UuYzogKHBhcnNlX3ppcF9maWxlLCBwcm9jZXNzX3ppcF9kaXIsCiAJZmluZF9pbl9jdXJyZW50X3ppcCwgamNmX2ZpZ3VyZV9maWxlX3R5cGUpOiBNb3ZlZCBmcm9tCiAJamNmLXJlYWRlci5jIHRvIHBhcnNlLmMuCgkqIHpleHRyYWN0LmM6IChyZWFkX3ppcF9hcmNoaXZlKTogdGFrZXMgZmlsZV9jb21tZW50X2xlbmd0aCBwb3NzaWJsZQoJZmllbGQgaW50byBhY2NvdW50LgoKTW9uIE9jdCAyMCAxMTo0NTowNiAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6ICBWYXIgY2FuIGFsc28gYmUgcHJvbW90ZWQgdG8gaW50LgoKCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIEhhbmRsZSBhcnJheSB0eXBlcyBldmVuIGJldHRlciAuLi4KCkZyaSBPY3QgMTcgMTU6NTY6MzcgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGphdmFfc3RhY2tfcG9wKTogIEZpeCB1c2Ugb2YgTlVMTF9UUkVFIGZvciBUWVBFX1NFQ09ORC4KCgkqIGphdmEtdHJlZS5oIChQVVNIX0ZJRUxEKTogIFNldCBERUNMX0FSVElGSUNJQUwuCgkqIGNsYXNzLmMgKG1ha2VfY2xhc3NfZGF0YSk6ICBEb24ndCBidWlsZCBmaWVsZHNfZGVjbCBpZiBubyBmaWVsZHMuCglXaGVuIGJ1aWxkaW5nIGZpZWxkc19kZWNsLCBza2lwIGlmIERFQ0xfQVJUSUZJQ0FMLgoKCSogZXhwci5jIChqYXZhX3N0YWNrX3N3YXApOiAgVXBkYXRlIHN0YWNrX3R5cGVfbWFwLgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiAgSGFuZGxlIGFycmF5IHR5cGVzIGJldHRlci4KCldlZCBPY3QgMTUgMTg6MDk6NDUgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChhZGRfZmllbGQpOiAgRG9uJ3QgcHJvbW90ZSBzaG9ydCBpbnRlZ3JhbCBmaWVsZHMgdG8KCWludCBhbnkgbW9yZSAodW5sZXNzIEpBVkFfUFJPTU9URV9UT19JTlQpLCBzaW5jZSBLYWZmZSBkb2Vzbid0LgoJKiBleHByLmMgKHB1c2hfdmFsdWUpOiAgUHJvbW90ZSBhbmQgY29udmVydCBzaG9ydCBpbnRlZ3JhbCB2YWx1ZXMuCgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oIChpbnRlZ2VyX3R3b19ub2RlKTogIE5ldyBjb25zdGFudCBub2RlLgoJKiB2ZXJpZnkuYyAobWVyZ2VfdHlwZXMpOiAgQ2hlY2sgZm9yIFRZUEVfUkVUVVJOX0FERFIuCgpXZWQgT2N0IDE1IDE3OjA0OjUwIDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUpOiBVc2UgZnVuY3Rpb24gYXJndW1lbnQKIAl1bnByb21vdGVkIHR5cGUgdG8gZ2VuZXJhdGUgbWFuZ2xlZCBuYW1lLgoKTW9uIE9jdCAxMyAxNjo1Mjo1NSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6IE5vdyB1c2VzIGN1cnJlbnRfY2xhc3MKIAlpbnN0ZWFkIG9mIG1haW5fY2xhc3MuCgkoYnVpbGRfY29uc3RhbnRzX2NvbnN0cnVjdG9yKTogTm93IHVzZXMgY3VycmVudF9jbGFzcyBpbnN0ZWFkIG9mCiAJbWFpbl9jbGFzcy4KCSogemlwZmlsZS5oOiAoc3RydWN0IFppcEZpbGVDYWNoZSk6IE5vdyBkZWZpbmVkIGhlcmUuIERlY2xhcmF0aW9uCiAJb2YgdGhlIGdsb2JhbCB2YXJpYWJsZSBTZWVwWmlwRmlsZXMgZG9uZSBoZXJlLgoJKiB6ZXh0cmFjdC5jIChyZWFkX3ppcF9hcmNoaXZlKTogZXh0cmFfZmllbGQgb3B0aW9uYWwgZmllbGQgdGFrZW4KIAlpbnRvIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2xhc3MgZmlsZSBpbiB0aGUKIAlhcmNoaXZlLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBVc2UgY3VycmVudF9qY2YgdG8gc2VhcmNoCiAJdGhlIGNvbnN0YW50IHBvb2wuCgkqIHBhcnNlLmMgKGxvYWRfY2xhc3MpOiBGaXJzdCBzZWFyY2ggZm9yIHRoZSBjbGFzcyB0byBsb2FkIGluIHRoZQogCWN1cnJlbnQgemlwIGZpbGUuIFNhdmVzIGN1cnJlbnRfamNmIChyZXN0b3JlZCBiZWZvcmUgcmV0dXJuaW5nCiAJZnJvbSB0aGF0IGZ1bmN0aW9uKS4gRG9uJ3QgY2FsbCBKQ0ZfRklOSVNIIGluIHRoZSBjbGFzcyB3YXMgZm91bmQKIAlpbiB0aGUgY3VycmVudCBaSVAgZmlsZS4KCShqY2ZfcGFyc2UpOiBJZiB0aGUgY2xhc3Mgd2FzIGZvdW5kIGluIHRoZSBjdXJyZW50IFpJUCBmaWxlLCBzYXZlCiAJaXRzIHRyZWVfY29uc3RhbnRfcG9vbCAoZm9yIGxhdGVyIHJldXNlKS4KCShwYXJzZV9jbGFzc19maWxlKTogTmV3IGZ1bmN0aW9uLiBQcm9jZXNzIGVhY2ggbWV0aG9kIGRlZmluZWQgaW4KIAl0aGUgY3VycmVudCBjbGFzcyBhbmQgcmVjb3JkIHRoZSBjbGFzcyBhcyB0byBiZSBsYXRlciByZWdpc3RlcmVkLgoJKHl5cGFyc2UpOiBSZXdyaXR0ZW4uIEZpZ3VyZSB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmaWxlIGFuZCBzd2l0Y2gKCWFjY29yZGluZ2x5LgoJKiBsYW5nLmM6IE5ldyBnbG9iYWwgdmFyaWFibGUgY3VycmVudF9qY2YuCgkobGFuZ19pbml0KTogUmVtb3ZlZCBjb21waWxpbmdfZnJvbV9zb3VyY2UgdGVzdCAoZG9uZSBsYXRlciwgaW4KIAl5eXBhcnNlKS4gUmVtb3ZlZCBjYWxsIHRoZSBqY2ZfcGFyc2UgKCkuCgkqIGpjZi5oIChKQ0ZfWklQLCBKQ0ZfQ0xBU1MsIEpDRl9TT1VSQ0UpOiBOZXcgZGVmaW5lZCB2YWx1ZXMuCgkodHlwZWRlZiBzdHJ1Y3QgSkNGKTogTmV3IGZpZWxkcyBzZWVuX2luX3ppcCAodG8gbWFyayBhIGNsYXNzIGZvdW5kCglpbiB0aGUgY3VycmVudCBaSVAgZmlsZSkgYW5kIHppcF9vZmZzZXQgKG9mZnNldCB0byB0aGUgY2xhc3MgZGF0YSBpbgoJdGhlIGN1cnJlbnQgemlwIGZpbGUpLgoJKiBqY2YtcmVhZGVyLmM6IHppcGZpbGUuaCBpbmNsdWRlZC4KCWxvY2FsVG9GaWxlOiBOZXcgWmlwRmlsZUNhY2hlIHN0YXRpYyBnbG9iYWwgdmFyaWFibGUKCShwYXJzZV96aXBfZmlsZV9lbnRyaWVzKTogTmV3IGZ1bmN0aW9uLiBCcm93c2UgdGhlIGN1cnJlbnQgWklQCiAJZmlsZSBkaXJlY3RvcnkgYW5kIHByb2Nlc3MgZWFjaCBjbGFzcyBmb3VuZC4KCShwcm9jZXNzX3ppcF9kaXIpOiBOZXcgZnVuY3Rpb24uIFJlZ2lzdGVyIGVhY2ggY2xhc3MgZm91bmQgaW4gdGhlCiAJWklQIGZpbGUgZGlyZWN0b3J5LiBUaGUgY2xhc3MgYXJlbid0IHBhcnNlZCBidXQgYSB2YWxpZCBKQ0YgaXMKIAlsaW5rIHRvIGVhY2ggb2YgdGhlbS4KCShmaW5kX2luX2N1cnJlbnRfemlwKTogTmV3IGZ1bmN0aW9uLiBTZWFyY2ggZm9yIGEgY2xhc3MgaW4gdGhlCiAJY3VycmVudCBaSVAgZmlsZSBkaXJlY3RvcnkuIElmIGZvdW5kLCBwcmVwYXJlIHRoZSBjbGFzcyBzbyB0aGF0IGl0CiAJY2FuIGJlIGxvYWRlZC4KCShqY2ZfZmlndXJlX2ZpbGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4gRXhhbWluZSB0aGUgZmlsZSBzdHJ1Y3R1cmUKIAl0byBmaWd1cmUgYSBjbGFzcyBmaWxlLCBhIFpJUCBmaWxlLiBJZiBub25lIG9mIHRoZXNlIGNhdGVnb3JpZXMgYXJlCiAJbWF0Y2hlZCwgYSBzb3VyY2UgZmlsZSBpcyBhc3N1bWVkLgoJKiBqY2YtaW8uYzogUmVtb3ZlZCBkZWZpbml0aW9uIG9mIFppcEZpbGVDYWNoZSAobW92ZWQgaW4gemlwZmlsZS5oKS4KICAJU2VlblppcEZpbGU6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkob3Blbl9pbl96aXApOiBVc2UgemlwbWVtYmVyJ3MgbGVuZ3RoIHRvIGFjY2VsZXJhdGUgdGhlIHNlYXJjaCBmb3IKIAlhIG1lbWJlci4gSWYgemlwbWVtYmVyIHdhcyBOVUxMIGFuZCB6aXAgZmlsZSBzdWNjZXNzZnVsbHkgcmVhZCwKIAlyZXR1cm4gMC4KCSogamF2YS10cmVlLmg6IE5ldyBnbG9iYWwgdmFyaWFibGUgY3VycmVudF9qY2YgZGVjbGFyZWQuICBBZGRlZAogCWRlY2xhcmF0aW9uIGZvciBjdXJyZW50X2NvbnN0YW50X3Bvb2xfdGFncywgY3VycmVudF9jb25zdGFudF9wb29sX2RhdGEsCgljdXJyZW50X2NvbnN0YW50X3Bvb2xfbGVuZ3RoLCBjdXJyZW50X2NvbnN0YW50X3Bvb2xfZGF0YV9yZWYuCgkoc3RydWN0IGxhbmdfdHlwZSk6IEF1Z21lbnRlZCB3aXRoIHR3byBmaWVsZHMuIHN0cnVjdCBKQ0YgKmpjZiAodG8KIAlzdG9yZSB0aGUgSkNGIG9mIGNsYXNzZXMgc2VlbiBpbiBhIHppcCBmaWxlKSBhbmQgdHJlZSAqY29uc3RhbnRfcG9vbAoJKHRvIHNhdmUgYSBsb2FkZWQgY2xhc3MgY29uc3RhbnQgcG9vbCkuIGN1cnJlbnRfY2xhc3MgZGVjbGFyZWQgaGVyZS4KCSogZXhwci5jIChleHBhbmRfaW52b2tlKTogVXNlIGN1cnJlbnRfamNmIGluc3RlYWQgb2YgbWFpbl9qY2YgdG8KIAlyZXRyaWV2ZSBtZXRob2RfcmVmX2NvbnN0YW50LgoJKFBVU0hDKTogamF2YV9wdXNoX2NvbnN0YW50X2Zyb21fcG9vbCBub3cgdXNlcyBjdXJyZW50X2pjZi4KCShPQkpFQ1QpOiBnZXRfY2xhc3NfY29uc3RhbnQgbm93IHVzZXMgY3VycmVudF9qY2YuCgkoQVJSQVlfTkVXX1BUUik6IGdldF9jbGFzc19jb25zdGFudCBub3cgdXNlcyBjdXJyZW50X2pjZi4KCShBUlJBWV9ORVdfTVVMVEkpOiBnZXRfY2xhc3NfY29uc3RhbnQgbm93IHVzZXMgY3VycmVudF9qY2YuCgkoZXhwYW5kX2ludm9rZSk6IE5vdyB1c2VzIGN1cnJlbnRfY2xhc3MgaW5zdGVhZCBvZiBtYWluX2NsYXNzCgkoYnVpbGRfY2xhc3NfaW5pdCk6IE5vdyB1c2VzIGN1cnJlbnRfY2xhc3MgaW5zdGVhZCBvZiBtYWluX2NsYXNzCgkqIGNsYXNzLmM6IE5ldyBzdGF0aWMgZ2xvYmFsIHZhcmlhYmxlIHJlZ2lzdGVyZWRfY2xhc3MuCgkocmVnaXN0ZXJfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoZW1pdF9yZWdpc3Rlcl9jbGFzcyk6IE1vZGlmaWVkIHRvIHVzZSByZWdpc3RlcmVkX2NsYXNzIGluc3RlYWQgb2YKIAltYWluX2NsYXNzCgkoaXNfY29tcGlsZWRfY2xhc3MpOiBOb3cgdGFrZSBpbnRvIGFjY291bnQgY2xhc3Mgc2VlbiBpbiB0aGUgYXJjaGl2ZS4KCk1vbiBPY3QgIDYgMTI6MDM6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleGNlcHQuaDogIFJlbmFtZWQgdG86IGphdmEtZXhjZXB0LmguCgkqIHBhcnNlLmMsIGV4Y2VwdC5jLCBleHByLmMsIHZlcmlmeS5jOiAgVXBkYXRlICNpbmNsdWRlIGFjY29yZGluZ2x5LgoJKiBleGNlcHQuYzogIEFkZCBzZW1pLXdvcmtpbmcgKGNvbW1lbnRlZCBvdXQpIGltcGxlbWVudGF0aW9uLgoKCSogZXhwci5jIChleHBhbmRfaWluYyk6ICBBZGQgbmVlZGVkIGZsdXNoX3F1aWNrX3N0YWNrLgoJKiBwYXJzZS5jIChzZXRfc291cmNlX2ZpbGVuYW1lKTogIE5ldyBmdW5jdGlvbi4KCShnaXZlX25hbWVfdG9fY2xhc3MpOiAgU2V0IGlucHV0X2ZpbGVuYW1lIGZyb20gcGFja2FnZS5jbGFzc25hbWUuamF2YS4KCgkqIGpjZi1pby5jIChmaW5kX2NsYXNzKTogIERvbid0IGxvb2sgZmlyc3QgaW4gIi4iLgoKV2VkIE9jdCAgMSAxMToyNjoxMCAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHpleHRyYWN0LmMgKHJlYWRfemlwX2FyY2hpdmUpOiBOb3cgdGFrZXMgaW50byBhY2NvdW50IHRoZQogCWV4dHJhX2ZpZWxkIGZpZWxkLgoJKiBleHByLmMgKGNhbl93aWRlbl9yZWZlcmVuY2VfdG8pOiBNb2RpZmllZCB0byBoYW5kbGUgc3ViLWludGVyZmFjZXMuCgpTYXQgU2VwIDIwIDEyOjQ0OjI4IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY29uc3RhbnRzLmMsIGphdmEtdHJlZS5oIChidWlsZF9pbnRlcm5hbF9jbGFzc19uYW1lKTogIE5ldyBmdW5jdGlvbi4KCShhbGxvY19jbGFzc19jb25zdGFudCk6ICBSZS1pbXBsZW1lbnQgdXNpbmcgYnVpbGRfaW50ZXJuYWxfY2xhc3NfbmFtZS4KCSogY2xhc3MuYyAobWFrZV9jbGFzc19kYXRhKTogIExpa2V3aXNlLgoJKiBjbGFzcy5jIChoYXNoVXRmOFN0cmluZyk6ICBNYWtlIGhhc2ggYWxnb3JpdGhtIG1hdGNoIFN0cmluZy5oYXNoQ29kZS4KCldlZCBTZXAgMTcgMTM6MTU6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgVGVtcG9yYXJpbHkgc2V0IGN1cnJlbnRfc3VicgoJdG8gTlVMTCBiZWZvcmUgcHVzaGluZyBhbiBleGNlcHRpb24gaGFuZGxlciB0YXJnZXQuCgoJKiBleHByLmMgKGZsdXNoX3F1aWNrX3N0YWNrKTogIFNhdmUgZnJvbSBsb3cgc3RhY2sgaW5kZXhlcyB0byBoaWdoLgoJKGphdmFfc3RhY2tfc3dhcCwgamF2YV9zdGFja19kdXApOiAgUmUtd3JpdGUgdG8gYmUgc2FmZSBmcm9tCgljbG9iYmVyaW5nIHJlZ2lzdGVycy4KCShidWlsZF9jbGFzc19pbml0KTogIE5ldyBmdW5jdGlvbi4KCldlZCBTZXAgMTcgMTE6MDI6NDEgMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfamF2YV9hcnJheV90eXBlKTogVGVtcG9yYXJ5IHVzZQogCXBlcm1hbmVudF9vYnN0YWNrIHRvIGNyZWF0ZSB0aGUgYXJyYXkgJ2xlbmd0aCcgZmllbGQuCgkqIGV4cHIuYyAobG9va3VwX2xhYmVsKTogVGVtcG9yYXkgdXNlIHBlcm1hbmVudF9vYnN0YWNrIHRvIGNyZWF0ZQogCWxhYmVsIGlmIG5vdCBmb3VuZC4KCSogY2xhc3MuYyAocHVzaF9zdXBlcl9maWVsZCk6IFRlbXBvcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLgoKTW9uIFNlcCAxNSAxMTozMzozMSAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh0eXBlX2Zvcl9tb2RlKTogTm93IGhhbmRsZXMgZG91YmxlX3R5cGVfbm9kZSBhbmQKIAlmbG9hdF90eXBlX25vZGUuCgkqIHZlcmlmeS5jICh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IFRoZSBpbnN0cnVjdGlvbiBmb2xsb3dpbmcKIAl0aGUgd2lkZSBieXRlY29kZSBpcyBjaGVja2VkLiBPUENPREVfcmV0IGFkZGVkIHRvIHRoZSBsaXN0IG9mCiAJd2lkZS4KClRodSBTZXAgMTEgMTk6NDU6MTggMTk5NyAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4gU2V0IHRoZQogCWNsYXNzIENMQVNTX1AgZmllbGQgdG8gMS4KCShwdXNoX2NsYXNzKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjay4KCShzZXRfc3VwZXJfaW5mbyk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2suCgkoYWRkX21ldGhvZCk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2ssIHNldAogCU1FVEhPRF9UUkFOU0lFTlQoKS4KCShhZGRfZmllbGQpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLiBTZXRzCiAJRklFTERfVk9MQVRJTEUoKSBhbmQgRklFTERfVFJBTlNJRU5UKCkuCgkoYnVpbGRfY2xhc3NfcmVmKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayBpZiB0aGUgY2xhc3MKIAlpc24ndCBjb21waWxlZC4KCShidWlsZF9zdGF0aWNfZmllbGRfcmVmKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayB3aGVuCiAJY3JlYXRpbmcgZmllbGQncyBydGwuCgkoZ2V0X2FjY2Vzc19mbGFnc19mcm9tX2RlY2wpOiBIYW5kbGUgQUNDX1ZPTEFUSUxFLCBBQ0NfVFJBTlNJRU5ULAogCUFDQ19TWU5DSFJPTklaRUQsIEFDQ19OQVRJVkUsIEFDQ19BQlNUUkFDVCBmbGFncyBmb3IgbWV0aG9kcwoJYW5kIGZpZWxkcy4gRnVuY3Rpb24gZmluYWxpemVkLCBhcyBmYXIgYXMgZmxhZyBoYW5kbGluZy4KCShwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZCk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2suCgkoZW1pdF9yZWdpc3Rlcl9jbGFzcyk6IEZvcmNlIGdlbmVyYXRpb24gb2YgY2xhc3MgcmVnaXN0cmF0aW9uIGF0CiAJLU8zIG9yIGRlZXBlci4KCSogZGVjbC5jIChlbmRfamF2YV9tZXRob2QpOiBDYWxsIHBlcm1hbmVudF9hbGxvY2F0aW9uKCkgYmVmb3JlCglyZXR1cm5pbmcuCgkqIGV4cHIuYyAoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IEFkZGVkIGNvbW1lbnQgdG8gaW50ZXJmYWNlCgloYW5kbGluZywgZml4ZWQgdHlwby4KCShsb29rdXBfZmllbGQpOiBOb3cgdXNlcyBDTEFTU19QKCkgdG8gY29ycmVjdCBGSVhNRQoJKGV4cGFuZF9pbnZva2UpOiBWZXJpZmljYXRpb24gb24gcHVibGljICYmICFzdGF0aWMgJiYKCSFhYnN0cmFjdCBtb3ZlZCBpbnRvIHNvZnRfbG9va3VwaW50ZXJmYWNlbWV0aG9kIChrYWZmZSkuCglVc2UgT2JqZWN0IGNsYXNzIGR0YWJsZSBpZiBvYmplY3RyZWYgaXMgYW4gYXJyYXkgd2hlbiBleHBhbmRpbmcKCWludm9rZWludGVyZmFjZS4KCShqYXZhX3B1c2hfY29uc3RhbnRfZnJvbV9wb29sKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjawoJZm9yIENPTlNUQU5UX3N0cmluZwoJKiBwYXJzZS5jIChnZXRfcmVmX2NvbnN0YW50KTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayB0bwogCWNyZWF0ZSBjb25zdGFudCByZWZlcmVuY2VzLgoJKGdldF9jb25zdGFudCk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2sgdG8gY3JlYXRlIGNvbnN0YW50LgoJKGxvYWRfY2xhc3MpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrIHRvIGxvYWQgY2xhc3MuCgkoamNmX3BhcnNlKTogVGVtcG9yYXJ5IHVzZSBwZXJtYW5lbnRfb2JzdGFjayB0byBwZXJmb3JtIGNsYXNzCglsYXlvdXQuCgkqIHR5cGVjay5jOiAocGFyc2Vfc2lnbmF0dXJlX3N0cmluZyk6IFRlbXBvcmFyeSB1c2UgcGVybWFuZW50X29ic3RhY2suCgkoYnVpbGRfamF2YV9zaWduYXR1cmUpOiBUZW1wb3JhcnkgdXNlIHBlcm1hbmVudF9vYnN0YWNrLgoJKiB2ZXJpZnkuYzogKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb24pOiByZW1vdmVkIHVuZWNlc3NhcnkgdmVyaWZpY2F0aW9uCglvbiBBQ0NfU1VQRVIgZmxhZy4KCSogamF2YS10cmVlLmggKE1FVEhPRF9OQVRJVkUsIE1FVEhPRF9UUkFOU0lFTlQpOiBEZWZpbmVkLgoJKEZJRUxEX1ZPTEFUSUxFLCBGSUVMRF9UUkFOU0lFTlQpOiBEZWZpbmVkLgoJKENMQVNTX1ApOiBEZWZpbmVkCgpUaHUgU2VwIDExIDExOjU3OjMyIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUpOiAgRml4IHR5cG8uCgkoZW1pdF9yZWdpc3Rlcl9jbGFzcyk6ICBVc2UgbWFpbl9jbGFzcyB0byBnZXQgY2xhc3Mgb2JqZWN0LCByYXRoZXIKCXRoYW4gbG9va2luZyBmb3Igbm8tbG9uZ2VyLWV4aXN0aW5nIHN0YXRpYyBkZWNsIHN0YXJ0aW5nIHdpdGggX0NMLgoJKiB0eXBlY2suYyAocGFyc2Vfc2lnbmF0dXJlX3R5cGUpOiAgUHJvbW90ZSBhcnJheSBlbGVtZW50IHR5cGUKCWlmIGl0IGlzIGEgUkVDT1JEX1RZUEUuCgpXZWQgU2VwIDEwIDE2OjA5OjIzIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAocHVzaF9jbGFzc19zdGF0aWNfZHVtbXlfZmllbGQpOiAgTmV3IGZ1bmN0aW9uLgoJKG1hbmdsZV9zdGF0aWNfZmllbGQpOiAgTmV3LiBEbyBHKystc3R5bGUgbWFuZ2xpbmcgb2Ygc3RhdGljIGZpZWxkcy4KCShsYXlvdXRfY2xhc3MpOiAgTWFuZGxlIHN0YXRpYyBmaWVsZHMgaGVyZSwgbm90IGluIGFkZF9maWVsZC4KCShidWlsZF9jbGFzc19yZWYpOiAgVGhlIGNsYXNzIG9iamVjdCBpcyBub3cgYSBkdW1teSBzdGF0aWMgZmllbGQuCgkqIGRlY2wuYyAoZmluZF9sb2NhbF92YXJpYWJsZSk6ICBMb29rIGZvciBiZXN0LCBpbnN0ZWFkIG9mIGZpcnN0IG1hdGNoLgoJKiBleHByLmMgKHB1c2hfdHlwZSk6ICBBbHdheXMgcHJvbW90ZV90eXBlLCBub3QganVzdCBmb3IgUkVDT1JEX1RZUEUuCgkoYnVpbGRfamF2YV9hdGhyb3cpOiAgRG9uJ3QgY2hlY2sgaGVyZSBpZiBleGNlcHRpb24gaXMgVGhyb3dhYmxlLgoJKiBqYXZhLXRyZWUuaCAoVFlQRV9VTlNFVCk6ICBSZW5hbWVkIHRvIFRZUEVfVU5LTk9XTi4KCShUWVBFX1VTRUQpOiAgUmVtb3ZlZC4gIE5vIGxvbmdlciB1c2VkIC4uLgoJKiBwYXJzZS5jIChqY2ZfcGFyc2UpOiAgQ2FsbCBwdXNoX2NsYXNzX3N0YXRpY19kdW1teV9maWVsZC4KCSogdmVyaWZ5LmMgKHB1c2hfcGVuZGluZ19sYWJlbCk6ICBOZXcgZnVuY3Rpb24uCgkocHVzaF9wZW5kaW5nX2Jsb2NrKTogIFJlbmFtZWQgdG8gY2hlY2tfcGVuZGluZ19ibG9jay4KCShtZXJnZV90eXBlcyk6ICBSZW1vdmUgdW5uZWVkZWQgc3V1cG9ydCBmb3IgVFlQRV9VTlVTRUQuCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgT25seSByZXNldCBwcmV2X2VoX3JhbmdlcyAodG8gZm9yY2UKCXJlLWNoZWNraW5nIHBvc3NpYmxlIGhhbmRsZXJzKSBhZnRlciBhIHN0b3JlIChsZXNzIHdhc3RlZCB3b3JrKS4KICAJQ2hlY2sgZm9yIG51bGwgaGFuZGxlciAoZmluYWxseSkgYmVmb3JlIGNhbGxpbmcgYWRkX2hhbmRsZXIuCglWYXJpb3VzIGNoYW5nZXMgdG8gKGZpbmFsbHk/KSBjb3JyZWN0bHkgaGFuZGxlIHRyeS9maW5hbGx5LgoKMTk5Ny0wOS0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2xhc3MuYzogSW5jbHVkZSBzdGRpby5oLgoKVGh1IFNlcCAgNCAyMTozMDo1NSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6ICBVc2UgQ09NUE9VTkRfRVhQUiAoYW5kIFRSRUVfU0lERV9FRkZFQ1RTKQoJdG8gbWFrZSBzdXJlIGNsYXNzIGlzIGluaXRpYWxpemVkIGJlZm9yZSBzdGF0aWMvc3BlY2lhbCBpbnZva2UuCgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgT24gYSBzdG9yZSBpbnN0cnVjdGlvbiwKCWNhbGwgZmluZF9sb2NhbF92YXJpYWJsZSB0byBmb3JjZSBwcmUtYWxsb2NhdGlvbiBvZiBkZWNsIGFuZCBydHguCgkqIGRlY2wuYyAocHVzaF9qdm1fc2xvdCk6ICBTZXQgREVDTF9SRUdJU1RFUiBvbiBzdGFjayBzbG90cy4KCldlZCBTZXAgIDMgMTY6MTM6MjMgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYpOiAgIFN0cmlwIG9mZiAicHJvbW90ZWRfIiBpZiBuZWVkIGJlLgoJKG1ha2VfZmllbGRfdmFsdWUpOiBDYWxsIGJ1aWxkX2phdmFfc2lnbmF0dXJlIHdoZW4gbmVlZGVkLgoJKGxheW91dF9jbGFzcyk6ICBEb24ndCBtYWtlX2Z1bmN0aW9uX3J0bCBpZiBNRVRIT0RfQUJTVFJBQ1QuCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9hdGhyb3cpOiAgRG9uJ3QgcHVzaF92YWx1ZSBvZiBleGNlcHRpb24uCgkoYnVpbGRfamF2YV9iaW5vcCk6ICBJbXBsZW1lbnQgQ09NUEFSRV9MX0VYUFIgYW5kIENPTVBBUkVfR19FWFBSIHRvCgltYXRjaCBzcGVjaWZpY2F0aW9uIG9mIFtmZF1jbXBbbGddIGZvciBOYU5zLgoJKGV4cGFuZF9ieXRlX2NvZGUpOiAgQWRkIHN1cHBvcnQgZm9yIGV4Y2VwdGlvbiBoYW5kbGVyIHJhbmdlcy4KCSogZXhjZXB0LmM6ICBBZGQgc2tlbGV0b24gZm9yIEVIIGNvZGUtZ2VuZXJhdGlvbi4KCSogdmVyaWZ5LmMgKG1lcmdlX3R5cGVzKTogIFRyZWF0IGFsbCBwcm9tb3RlZCBpbnRlZ3JhbCB0eXBlcyBhcyBlcXVhbC4KCSogY29uc3RhbnRzLmMgKGJ1aWxkX2NvbnN0YW50c19jb25zdHJ1Y3Rvcik6ICBUbyBmb3JjZSBjcmVhdGlvbiBvZgogCWN1cnJlbnRfY29uc3RhbnRfcG9vbF9kYXRhX3JlZiwgY2FsbCBidWlsZF9jb25zdGFudF9kYXRhX3JlZi4KCgkqIGphdmFvcC5kZWYgKGxsb2FkKTogIEZpeCB0eXBvLgoJKiBqY2YtZHVtcC5jIChtYWluKTogIENsZWFyIGZpbGVuYW1lIHRvIHByZXZlbnQgcG9zc2libHktYmFkIGZyZWUuCgpUdWUgU2VwICAyIDE3OjM3OjI1IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLmM6IERvbid0IGluY2x1ZGUgZnVuY3Rpb24uaC4KCldlZCBBdWcgMjcgMTg6MzM6MDQgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBleGNlcHQuW2NoXTogIE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKEpBVkFfT0JKUyk6ICBBZGQgZXhjZXB0Lm8KCSogZXhwci5jOiAgVGVtcG9yYXJ5IHdhcm5pbmcgYWJvdXQgdW5pbXBsZW1lbnRlZCBleGNlcHRpb25zLgoJKiB2ZXJpZnkuYzogIFZlcmlmeSBleGNlcHRpb24gaGFuZGxlcnMuCgoJKiBqY2YtZHVtcC5jIChkaXNhc3NlbWJsZV9tZXRob2QpOiAgUHJpbnQgZXhjZXB0aW9uIHRhYmxlLgoKV2VkIEF1ZyAyNyAxMzoyNjo1OCAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBTdGFydGVkIGEgdGhvcm91Z2gKIAl2ZXJpZmljYXRpb24gb2YgaW52b2tlKiBieXRlY29kZXMuCgkoZXhwYW5kX2J5dGVfY29kZSk6IGZsdXNoIHF1aWNrIHN0YWNrIGlmIFBDIGlzIHRoZSB0YXJnZXQgb2YgYQogCWJyYW5jaC4gIGFuZCB1bmRlZiBSRVQgKGNvbmZsaWN0aW5nIHdpdGggY29uZmlnL2kzODYvaTM4Ni5oKS4KCShleHBhbmRfamF2YV9hcnJheWxvYWQpOiBGaXhlZCBib2d1cyBjYXN0LCB3aGVuIEJvb2xlYW4gdHlwZSBpcwogCXVzZWQuCgkoZXhwYW5kX2ludm9rZSk6IE5vdyBoYW5kbGVzIGludm9rZWludGVyZmFjZSBhbmQgZG8gbW9yZQogCXZlcmlmaWNhdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGJ5dGVjb2RlLgoJKGxvb2t1cF9maWVsZCk6IERvbid0IHRyeSB0byBsb2FkIHRoZSBjbGFzcyBpZiBwcm9jZXNzaW5nCiAJZHRhYmxlX3R5cGUuCgkoY2FuX3dpZGVuX3JlZmVyZW5jZV90byk6IE5vdyBoYW5kbGVzIGludGVyZmFjZXMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlCiAJc29mdF9sb29rdXBpbnRlcmZhY2VtZXRob2Rfbm9kZSwgZGVjbGFyZWQgaW4gamF2YS10cmVlLmguCglDYWxsIHNldF9zdXBlcl9pbmZvIG9uIHN0cmluZ190eXBlX25vZGUuCgkqIGphdmEtdHJlZS5oIChDTEFTU19JTlRFUkZBQ0UsIENMQVNTX0FCU1RSQUNULCBDTEFTU19TVVBFUik6IE5vdwoJZGVmaW5lZC4KCSogY2xhc3MuYyAoc2V0X3N1cGVyX2luZm8pOiBGaWxscyB0aGUgQ0xBU1NfKiBmbGFncyBhY2NvcmRpbmcgdG8KCWFjY2Vzc19mbGFncy4KCShnZXRfYWNjZXNzX2ZsYWdzX2Zyb21fZGVjbCk6IEhhbmRsZXMgYWxsIGNsYXNzIGZsYWdzLgoKVHVlIEF1ZyAyNiAxODo1NDozNCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiAgWmVybyBvdXQgbmV3bHktYWxsb2NhdGVkIERFQ0xfTEFOR19TUEVDSUZJQy4KCSogcGFyc2UuYyAoeXlwYXJzZSk6ICBDaGVjayBmb3IgYWJzdHJhY3QgbWV0aG9kLCBhbmQgbWlzc2luZyBjb2RlLgoJKiBleHByLmMgKGV4cGFuZF9ieXRlX2NvZGUpOiAgQ2hhbmdlIGludGVyZmFjZS4KCSogbGFuZy5jIChwdXRfZGVjbF9ub2RlKTogIFByaW50IHByb21vdGVkIHR5cGVzIHByZXR0aWVyLgoJKiB2ZXJpZnkuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbik6ICBDaGFuZ2UgaW50ZXJmYWNlLgoJUGFydGlhbCBzdXBwb3J0IGZvciBzY2FubmluZyBleGNlcHRpb24gdGFibGUuCglGb3IgbG9hZCBpbnN0cnVjdGlvbnMsIGhhbmRsZSBwcm9tb3RlZCBpbnRlZ3JhbCB0eXBlcy4KClRodSBBdWcgMjEgMTM6NDg6MDEgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiB2ZXJpZnkuYzogIE5ldyBmaWxlLCB3aXRoIGNvbnRlbnRzIG1vdmVkIGZyb20gZXhwci5jLgoJKiBleHByLmM6ICBCdW5jaCBvZiBzdHVmZiAobW9zdGx5IHZlcmlmaWNhdGlvbikgbW92ZWQgdG8gdmVyaWZ5LmMuCgkqIHR5cGVjay5jIChpc19hcnJheV90eXBlX3ApOiAgTW92ZWQgaGVyZSBmcm9tIGV4cHIuYy4KCSogamF2YS10cmVlLmg6ICBBZGQgc29tZSBub3ctbmVlZGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4KCSogTWFrZWZpbGUuaW4gKEpBVkFfT0JKUyk6IEFkZGVkIHZlcmlmeS5vLgoKV2VkIEF1ZyAyMCAxNDozNDozNCAxOTk3ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBTZXRzIHRoZSBNRVRIT0RfU1lOQ0hST05JWkVEIGZsYWcsIHNldHMgdGhlCglNRVRIT0RfQUJTVFJBQ1QgZmxhZy4KCgkqIGphdmEtdHJlZS5oIChNRVRIT0RfU1lOQ0hST05JWkVEKTogU2V0IHRvIERFQ0xfTEFOR19GTEFHXzQuCgkoSVNfTUVUSE9EX0NMSU5JVF9QLCBJU19NRVRIT0RfSU5JVF9QKTogTmV3IG1hY3Jvcy4KCShNRVRIT0RfQUJTVFJBQ1QpOiBTZXQgdG8gREVDTF9MQU5HX0ZMQUdfNQoKCSogZGVjbC5jIChzb2Z0X21vbml0b3JlbnRlcl9ub2RlLCBzb2Z0X21vbml0b3JleGl0X25vZGUpOiBOZXcgZ2xvYmFsCgl2YXJpYWJsZXMuCgkoc3RhcnRfamF2YV9tZXRob2QpOiBIb29rIGZvciBTWU5DSFJPTklaRUQgbWV0aG9kcy4KCgkqIGV4cHIuYyAoYnVpbGRfamF2YV9qc3IsIGJ1aWxkX2phdmFfcmV0KTogTmV3IGZ1bmN0aW9ucwoJKEpTUixQUkUpOiBOZXcgbWFjcm9zCgkoUFJFX1RBQkxFX1NXSVRDSCwgUFJFX0xPT0tVUF9TV0lUQ0gpOiBGaXhlZCBhbmQgc2VjdXJlZC4KCSh2ZXJpZnlfanZtX2luc3RydWN0aW9ucyk6IHRhYmxlc3dpdGNoLCBsb29rdXBzd2l0Y2gsCgltb25pdG9yZW50ZXIsIG1vbml0b3JleGl0LCBnb3RvX3c6IHZlcmlmaWVkLgoJKExPT0tVUF9TV0lUQ0gsIFRBQkxFX1NXSVRDSCk6IEZpeGVkIGdlbmVyYXRpb24gb2YgZGVmYXVsdDogbGFiZWwKCShidWlsZF9qYXZhX21vbml0b3IpOiBOZXcgZnVuY3Rpb24uCgkoTU9OSVRPUl9PUEVSQVRJT04pOiBNb2RpZmllZCB0byBjYWxsIGJ1aWxkX2phdmFfbW9uaXRvcigpCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiBTdGFydGVkIGEgdGhvcm91Z2ggdmVyaWZpY2F0aW9uIG9mCglpbnZva2UqIGJ5dGVjb2Rlcy4KClR1ZSBBdWcgMTkgMTM6MzU6NDkgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJU3VwcG9ydCB2ZXJpZmljYXRpb24gb2YganNyL3JldCBzdWJyb3V0aW5lcyAodXNlZCBmb3IgdHJ5L2ZpbmFsbHkpLgoJKiBkZWNsLmMgKHJldHVybl9hZGRyZXNzX3R5cGVfbm9kZSk6ICBOZXcgdHlwZSBub2RlLgoJKiBqYXZhLXRyZWUuaCAoTEFCRUxfUkVUVVJOX0xBQkVMLCBMQUJFTF9SRVRVUk5fVFlQRV9TVEFURSwKCVJFVFVSTl9NQVBfQURKVVNURUQsIExBQkVMX1JFVFVSTl9MQUJFTFMsIExBQkVMX0lOX1NVQlIsCglMQUJFTF9TVUJSX1NUQVJULCBMQUJFTF9TVUJSX0NPTlRFWFQsIEJDT0RFX1ZFUklGSUVEKTogIE5ldyBtYWNyb3MuCgkoVFlQRV9VTlNFVCwgVFlQRV9TRUNPTkQsIFRZUEVfTlVMTCwgVFlQRV9SRVRVUk5fQUREUiwgVFlQRV9VTlVTRUQsCglUWVBFX1VTRUQpOiAgTmV3IG1hY3JvcyBmb3Igc3BlY2lhbCB0eXBlcyBpbiB0eXBlX21hcC4KCgkqIGphdmEtdHJlZS5oIChCQ09ERV9KVU1QX1RBUkdFVCk6ICBSZW5hbWVkIHRvIEJDT0RFX1RBUkdFVC4KCShCQ09ERV9CQUNLV0FSRFNfVEFSR0VULCBDT0RFX0ZPUldBUkRTX1RBUkdFVCk6ICBSZXBsYWNlZCBieQoJQkNPREVfSlVNUF9UQVJHRVQuCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6ICBGaXggbG9naWMgdG8gd2FybiBvZiB1bnVzZWQgaW5zdHJ1Y3Rpb25zLgoKCSogZXhwci5jIChjYW5fd2lkZW5fcmVmZXJlbmNlX3RvKTogIE5ldyBmdW5jdGlvbi4KCShwb3BfdHlwZSk6ICBVc2UgaXQuCgkobWVyZ2VfdHlwZV9zdGF0ZSk6ICBTdXBwb3J0IGhhbmRsaW5nIHN0YXJ0IG9mIHN1YnJvdXRpbmUuCgkocHVzaF9wZW5kaW5nX2Jsb2NrKTogIFJldHVybiBjaGFyKiBlcnJvciBtZXNzYWdlLCBpbnN0ZWFkIG9mIGNhbGxpbmcKCWZhdGFsIG9uIGFuIGVycm9yLiAgQWxzbyBoYW5kbGUgc3Vicm91dGluZXMuCgkodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgSGFuZGxlIGVycm9ycyBmcm9tIHB1c2hfcG9lbmRpbmdfYmxvY2suCglTdXBwb3J0IGpzciBhbmQgcmV0IGluc3RydWN0aW9ucy4KClR1ZSBBdWcgMTkgMTM6MzM6MzYgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBqY2YtaW8uYyAoZmluZF9jbGFzc2ZpbGUpOiAgRml4IHRoaW5rby4KCSogamNmLWR1bXAuYzogIEFkZCBDT05WRVJUMiAodG8gbWF0Y2ggY2hhbmdlZCBqYXZhb3AuZGVmKS4KClR1ZSBBdWcgMTIgMjA6MTQ6NDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEJJU09OKTogUmVtb3ZlLgoKVGh1IEF1ZyAgNyAyMzowODoyNCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiAgQ29udmVydCB0byBhdXRvY29uZi4KCSogY29uZmlnLWxhbmcuaW4gKG91dHB1dHMpOiAgQWRkZWQgamF2YS9NYWtlZmlsZS4KCgkqIE1ha2UtbGFuZy5pbiwgbGFuZy1zcGVjcy5oLCBjb25maWctbGFuZy5pbiwgTWFrZWZpbGUuaW46CglSZW5hbWUgY2MxamF2YSB0byBqYzEuCgoJKiBsYW5nLmMgKGluaXRfcGFyc2UsIGZpbmloc19wYXJzZSk6ICBOZXcgZnVuY3Rpb25zICNpZmRlZiBVU0VfQ1BQTElCLgoJKiBNYWtlZmlsZS5pbiAoSU5URVJOQUxfQ0ZMQUdTKTogIEFkZCBAZXh0cmFfY19mbGFncy4KCgkqIGNsYXNzLmMgKGNsYXNzX2RlcHRoKTogIERvIGxvYWRfY2xhc3MgaWYgbmVlZGVkLgoKCU1vc3RseSBiZXR0ZXIgdmVyaWZpY2F0aW9uLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogIFNldCBUWVBFX1NUVUJfREVDTCBmb3IgYSB0eXBlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIENoYW5nZSByZXR1cm4gdHlwZSBvZiBzb2Z0X2NoZWNrY2FzdC4KCSogZXhwci5jIChleHBhbmRfamF2YV9DSEVDS0NBU1QpOiAgRG8gcHVzaF92YWx1ZSBvZiB0aGUgImNhc3RlZCIgdmFsdWUuCgkqIGxhbmcuYyAocHV0X2RlY2xfc3RyaW5nLCBwdXRfZGVjbF9ub2RlLCBsYW5nX3ByaW50YWJsZV9uYW1lLAoJbGFuZ19wcmludF9lcnJvcik6ICBOZXcgZnVuY3Rpb25zLgoJKGxhbmdfaW5pdCk6ICBTZXQgZ2xvYmFsIGhvb2sgcHJpbnRfZXJyb3JfZnVuY3Rpb24gdG8gbGFuZ19wcmludF9lcnJvci4KCSogZXhwci5jOiAgSW4gdGhlIHR5cGVfbWFwIHB0cl90eXBlX25vZGUgaXMgb25seSB1c2VkIGZvciBudWxsIG5vdy4KCShwb3BfdHlwZSwgbWVyZ2VfdHlwZXMpOiAgSGVuY2UgcHRyX3R5cGVfbm9kZSBtYXRjaGVzIGFueSByZWZlcmVuY2UuCgkobWVyZ2VfdHlwZXMpOiAgRGVyZXJlbmNlIHBvaW50ZXIgdG8gcmVjb3JkIHR5cGVzIGJlZm9yZSBjb21wYXJpbmcuCgkoZGVjb2RlX25ld2FycmF5X3R5cGUsIG1lcmdlX3R5cGVzKTogIE9uIGVycm9yIGp1c3QgcmV0dXJuIE5VTEwuCgkoYnVpbGRfamF2YV9iaW5vcCk6ICBBZGQgcHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gKHdpdGggd2FybmluZykKCWZvciBDT01QQVJFX0xfRVhQUiBhbmQgQ09NUEFSRV9HX0VYUFIgKGkuZS4gW2ZkXWNtcFtsZ10pLgoJKGxvb2t1cF9sYWJlbCk6ICBTZXQgREVDTF9JR05PUkVEX1AgKGZvciBkd2FyZjJvdXQpLgoJKGV4cGFuZF9jb21wYXJlLCBleHBhbmRfamF2YV9nb3RvLCBleHBhbmRfamF2YV9jYWxsKTogIERvbid0CglwdXNoX3BlbmRpbmdfYmxvY2ssIHNpbmNlIHRoYXQgb25seSBtYWtlcyBzZW5zZSB3aGVuIHZlcmlmeWluZy4KCShtZXJnZV90eXBlX3N0YXRlKTogIERpZmZlcmVudCByZXR1cm4gY29kZXMuCgkocHVzaF9wZW5kaW5nX2Jsb2NrKTogIEEgYmxvY2sgbWF5IG5lZWQgdG8gYmUgdmVyaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgkoZXhwYW5kX2J5dGVfY29kZSk6ICBXYXJuIGFib3V0IHVudXNlZCBjb2RlIGF0IGNvZGUgZ2VuZXJhdGlvbiB0aW1lLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb24pOiAgQ2hhbmdlZCBsb2dpYywgc2luY2UgY29kZSBtYXkgbmVlZCB0byBiZQoJcmUtdmVyaWZpZWQgaWYgdHlwZS1zdGF0ZSBoYXMgY2hhbmdlZC4gIEFsc28sIGJldHRlciBlcnJvciBoYW5kbGluZy4KCUltcGxlbWVudCBhY21wZXEsIGFjbXBuZSwgcG9wLCBwb3AyLCBzd2FwLCBjaGVja2Nhc3QsIGluc3RhbmNlb2YuCglJbXByb3ZlIG5ld2FycmF5LCBhbmV3YXJyYXksID9hbG9hZCwgYXRocm93LAoJKiBqYXZhLXRyZWUuaCAoTEFCRUxfQ0hBTkdFRCk6ICBOZXcgbWFjcm8uCgpUdWUgQXVnICA1IDEyOjIxOjI3IDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChzb2Z0X2F0aHJvd19ub2RlKTogTmV3IGdsb2JhbCB2YXJpYWJsZSBpbml0aWFsaXplZC4KCSogamF2YW9wLmRlZiAoaTJiLCBpMmMsIGkycyk6IEludm9rZSBDT05WRVJUMgoJKiB0eXBlY2suYyAoY29udmVydCk6IEFkZGVkIHN1cHBvcnQgZm9yIFJFQUxfVFlQRS4KCShjb252ZXJ0X3RvX2NoYXIpOiBOZXcgZnVuY3Rpb24uCgkoY29udmVydCk6IEhhbmRsZSBDSEFSX1RZUEUuCgkqIGV4cHIuYyAoZXhwYW5kX2phdmFfYXJyYXlzdG9yZSk6IE1vZGlmaWVkIGJlY2F1c2UgQ0hBUi9CWVRFL0JPT0xFQU4vCglTSE9SVCBub3cgZXhwZWN0IElOVCBidXQgc3RvcmUgYXMgQ0hBUi9CWVRFL0JPT0xFQU4vU0hPUlQuCgkoZXhwYW5kX2phdmFfYXJyYXlsb2FkKTogQ0hBUi9CWVRFL0JPT0xFQU4vU0hPUlQgbm93IGNvbnZlcnQgcmVzdWx0IHRvCglwcm9tb3RlZCB0eXBlLgoJKHZlcmlmeV9qdm1faW5zdHJ1Y3Rpb25zKTogQWRkZWQgYnJlYWsgYSB0aGUgZW5kIG9mIGJvZ3VzIHVub3A6IGxhYmVsLgoJKE9QQ09ERV88YnxjfHM+YXN0b3JlKTogUG9wIGFuIGludCBvcGVyYW5kIGZyb20gdGhlIHR5cGUgc3RhY2sKCShPUENPREVfPGJ8Y3xzPmFzdG9yZSk6IFB1c2ggdGhlIHByb21vdGVkIHR5cGUgb250byB0aGUgc3RhY2sKCShwcm9jZXNzX2p2bV9pbnN0cnVjdGlvbik6IE5ldyBtYWNybyBDT05WRVJUMiBmb3IgaTJjLCBpMnMgYW5kIGkyYi4KCShKQVZBX0FSUkFZX0xFTkdUSF9PRkZTRVQsIEpBVkFfQVJSQVlfREFUQV9PRkZTRVQpOiBNb2RpZmllZAoJdG8gVXNlIFRoZSBSaWdodCBUaGluZ3MuCgkocG9wX3R5cGUpOiBBY2NlcHQgQ0hBUi9CWVRFL0JPT0xFQU4vU0hPUlQgcHJvbW90ZWQgdHlwZSBhcwogCWNvbXBhdGlibGUgd2l0aCBJTlQuIEJPT0xFQU4gaXMgbWFkZSBlcXVpdmFsZW50IHRvIEJZVEUuCgkoT1BDT0RFX2F0aHJvdywgT1BDT0RFX2Fjb25zdF9udWxsLCBPUENPREVfaWZudWxsLAoJT1BDT0RFX2lmbm9ubnVsbCk6IE5vdyBzdXBwb3J0ZWQuCgkoYnVpbGRfamF2YV9hdGhyb3cpOiBOZXcgZnVuY3Rpb24uCgpNb24gQXVnICA0IDE1OjQ2OjQ1IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCVJlbmFtZSBtZXRob2QgbmFtZSA8aW5pdD4gdG8gbWF0Y2ggRysrIChhbmQgZml4IG1hbmdsaW5nKS4KCSogY2xhc3MuYyAobGF5b3V0X2NsYXNzKTogIFJlcGxhY2UgbWV0aG9kIG5hbWUgb2YgPGluaXQ+IGJ5IGNsYXNzIG5hbWUuCgkobWFrZV9tZXRob2RfdmFsdWUpOiAgRG8gaW52ZXJzZSByZW5hbWluZyBvZiBjb25zdHJ1Y3RvciBmcm9tIDxpbml0Pi4KCSogamF2YS10cmVlLmggKERFQ0xfQ09OU1RSVUNUT1JfUCk6ICBOZXcgbWFjcm8uCgkqIHR5cGVjay5jIChsb29rdXBfamF2YV9jb25zdHJ1Y3Rvcik6ICBOZXcgZnVuY3Rpb24uCgkqIGV4cHIuYyAoZXhwYW5kX2ludm9rZSk6ICBJZiBtZXRob2RfbmFtZSBpcyA8aW5pdD4sIGNhbGwKCWxvb2t1cF9qYXZhX2NvbnN0cnVjdG9yIHRvIGZpbmQgY29uc3RydWN0b3IuCgoJKiBwYXJzZS5jIChnZXRfY29uc3RhbnQpOiAgSGFuZGxlIENPTlNUQU5UX0Zsb2F0IGFuZCBDT05TVEFOVF9Eb3VibGUuCgpGcmkgQXVnICAxIDExOjM3OjA5IDE5OTcgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogcGFyc2UuYyAoZ2V0X2NsYXNzX2NvbnN0YW50KTogTW9kaWZpZWQgdG8gaGFuZGxlIGFycmF5ICJjbGFzc2VzIgoJKiB0eXBlY2suYyAoc2V0X2xvY2FsX3R5cGUpOiBCdWcgZml4ZWQgd2hlbiBmaWxsaW5nIHR5cGVfbWFwW10gd2l0aAoJd2lkZSB0eXBlLgoJKGNvbnZlcnQpOiBNb2RpZmllZCB0byBoYW5kbGUgcmVhbCB0eXBlLgoJKiBqYXZhLXRyZWUuaCAoc29mdF9iYWRhcnJheWluZGV4X25vZGUsIHNvZnRfYW5ld2FycmF5X25vZGUsCglzb2Z0X211bHRpYW5ld2FycmF5LCBzb2Z0X25ld2FycmF5X25vZGUsIHNvZnRfdGhyb3dfbm9kZSk6IE5ldyBnbG9iYWwKCXZhcmlhYmxlcyBkZWNsYXJlZC4KCSogZGVjbC5jIChzb2Z0X2JhZGFycmF5aW5kZXhfbm9kZSwgc29mdF9hbmV3YXJyYXlfbm9kZSwKCXNvZnRfbXVsdGlhbmV3YXJyYXksIHNvZnRfbmV3YXJyYXlfbm9kZSwgc29mdF90aHJvd19ub2RlKTogTmV3CglnbG9iYWwgdmFyaWFibGVzIGluaXRpYWxpemVkLgoJKGZpbmRfbG9jYWxfdmFyaWFibGUpOiBIYW5kbGVzIHRoZSBjYXNlIG9mIGEgcG9pbnRlcgoJKGVuZF9qYXZhX21ldGhvZCk6IFJlc3RvcmUgdGhlIHVzZSBvZiBvbmUgbW9yZSBzY29wZQoJKiBleHByLmMgKGJ1aWxkX2phdmFfYXJyYXludWxsX2NoZWNrLCBidWlsZF9qYXZhX2FycmF5YWNjZXNzLAoJYnVpbGRfamF2YV9hcnJheV9sZW5ndGhfYWNjZXNzLCBleHBhbmRfamF2YV9hcnJheWxvYWQsCglleHBhbmRfamF2YV9hcnJheXN0b3JlLCBleHBhbmRfamF2YV9hcnJheV9sZW5ndGgsCglleHBhbmRfamF2YV9tdWx0aWFuZXdhcnJheSwgZXhwYW5kX2phdmFfYW5ld2FycmF5LAoJYnVpbGRfamF2YV9jaGVja19pbmRleGVkX3R5cGUsIGlzX2FycmF5X3R5cGVfcCwKCWJ1aWxkX2phdmFfdGhyb3dfb3V0X29mX2JvdW5kX2V4Y2VwdGlvbik6IE5ldyBmdW5jdGlvbnMuCgkoU1RPUkVfSU5URVJOQUwpOiBOb3cgZm9yY2VzIHR5cGUgb2YgdGhlIGRlY2wgdG8gYmUgdHlwZSBvZiB0aGUgdmFsdWUuCgkoT1BDT0RFX2FycmF5bGVuZ3RoLCBPUENPREVfbmV3YXJyYXksIE9QQ09ERV88dD5hc3RvcmUsCglPUENPREVfPHQ+YWxvYWQpOiBJbXBsZW1lbnRlZCBjb2RlIGZvciB2ZXJpZmljYXRpb24uCgkoQVJSQVlfU1RPUkUsIEFSUkFZX0xPQUQsIEFSUkFZX0xFTkdUSCwgQVJSQVlfTkVXX1BUUiwgQVJSQVlfTkVXX05VTQoJQVJSQVlfTkVXX01VTFRJKTogTWFjcm8gZGVmaW5lZC4KCShDT05WRVJUKTogTW9kaWZpZWQgdG8gaW52b2tlIGNvbnZlcnQoKS4KCShjYXNlIE9QQ09ERV9hbG9hZDIpOiBGaXhlZCBpbmRleCB0eXBvIGZyb20gMiB0byAxLgoKVGh1IEp1bCAzMSAxMjo0ODoxOCAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHB1c2hfY2xhc3MpOiAgU2V0IERFQ0xfQVJUSUZJQ0lBTCAoZm9yIGRieG91dC5jKS4KCShidWlsZF9jbGFzc19yZWYsIGlzX2NvbXBpbGVkX2NsYXNzKTogIEhhbmRsZSBwb2ludGVyLXRvLXJlY29yZCB0eXBlcy4KCShtYWtlX2NsYXNzX2RhdGEpOiAgRmllbGQgbmFtZSBuZWVkcyAnLycgYXMgcGFja2FnZSBwcmVmaXguCgkqIGV4cHIuYyAodHlwZV9zdGFja19kdXAsIGphdmFfc3RhY2tfZHVwKTogIEZpeCBmZW5jZXBvc3QgZXJyb3JzLgoKRnJpIEp1bCAyNSAxMTo0NDoyMSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCglJbXBsZW1lbnQgZGVidWcgaW5mb3JtYXRpb24gZm9yIGxvY2FsIHZhcmlhYmxlcy4KCSogamF2YS10cmVlLmggKERFQ0xfQ09ERV9MRU5HVEgsIERFQ0xfQVJHX1NMT1RfQ09VTlQsCglERUNMX0xPQ0FMX1NMT1RfTlVNQkVSLCBERUNMX0xPQ0FMX1NUQVJUX1BDLCBERUNMX0xPQ0FMX0VORF9QQywKCURFQ0xfTE9DQUxfU0xPVF9DSEFJTik6ICBOZXcgbWFjcm9zLgoJKHN0cnVjdCBsYW5nX2RlY2xfdmFyKTogIE5ldyB0eXBlLgoJKiBwYXJzZS5jIChnaXZlX25hbWVfdG9fbG9jYWxzKTogIE1vdmUgdG8gZGVjbC5jLgoJKiBkZWNsLmMgKGdpdmVfbmFtZV90b19sb2NhbHMpOiAgUmUtd3JpdHRlbiB0byBEbyBUaGUgUmlnaHQgVGhpbmcuCgkoc3RhcnRfamF2YV9tZXRob2QpOiAgUmUtd3JpdGUgcGFyYW1ldGVyIGhhbmRsaW5nLgoJKHBlbmRpbmdfbG9jYWxfZGVjbHMpOiAgTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShwdXNoX2p2bV9zbG90LCBtYXliZV9wdXNobGV2ZWxzLCBtYXliZV9wb3BsZXZlbHMpOiAgTmV3IGZ1bmN0aW9ucy4KCShmaW5kX2xvY2FsX3ZhcmlhYmxlKTogIEFjY2VwdCBwYyBzbyB3ZSBjYW4gc2tpcHMgZGVjbHMgbm90IGluIHJhbmdlLgoJKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogIEFkZCBlbmRfcGMgZmllbGQuCgkqIGV4cHIuYyAoZXhwYW5kX2J5dGVfY29kZSk6IENhbGwgbWF5YmVfcHVzaGxldmVscyBhbmQgbWF5YmVfcG9wbGV2ZWxzLgoJKHZhcmlvdXMpOiAgQ2hhbmdlIHNvIGN1cnJlbnQgcGMgZ2V0cyBwYXNzZWQgdG8gZmluZF9sb2NhbF92YXJpYWJsZS4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgUmUtYXJyYW5nZSBmaWVsZHMgaW4KCWNsYXNzX3R5cGVfbm9kZSBhbmQgYW5kIG1ldGhvZF90eXBlX25vZGUgdG8gbWF0Y2gga2FmZmUgMC45LjEuCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZhbHVlLCBtYWtlX2NsYXNzX2RhdGEpOiAgVXBkYXRlCglpbml0aWFsaXphdGlvbnMgdG8gbWF0Y2guCgpXZWQgSnVsIDE2IDE3OjE3OjUwIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAodW5pY29kZV9tYW5nbGluZ19sZW5ndGgsIGVtaXRfdW5pY29kZV9tYW5nbGVkX25hbWUsCglhcHBlbmRfZ3BwX21hbmdsZWRfbmFtZSwgYXBwZW5kX2dwcF9tYW5nbGVkX3R5cGUpOiAgTmV3IGZ1bmN0aW9ucy4KCShwdXNoX3N1cGVyX2ZpZWxkKTogIE5ldyBmdW5jdGlvbi4KCShtYWtlX2NsYXNzX2RhdGEpOiAgSGFuZGxlIGluaGVyaXRhbmNlIG9mIGNsYXNzIHN0YXRpYyBpbml0aWFsaXplci4KCShsYXlvdXRfY2xhc3MpOiAgTmV3IG5hbWUgbWFuZ2xpbmcuCgkqIGNvbnN0YW50cy5jIChidWlsZF9jb25zdGFudF9kYXRhX3JlZik6ICBJbml0IHR5cGUgb2YgZGF0YSBhcnJheQoJdG8gYSBvbmUtZWxlbWVudCBhcnJheS4KCShidWlsZF9jb25zdGFudHNfY29uc3RydWN0b3IpOiAgU2V0IERFQ0xfU0laRSBmcm9tIGNvbXBsZXRlIGFycmF5IHR5cGUuCgkqIGRlY2wuYzogIFJlbmFtZSBjbGFzc190eXBlLCBvYmplY3RfdHlwZSBldGMgdG8gY2xhc3NfdHlwZV9ub2RlLAoJb2JqZWN0X3R5cGVfbm9kZSBldGMuICBNYWtlIGZvcm1lciBpbmhlcml0IGZyb20gbGF0dGVyLgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgQWRkIGNhc3Qgb2YgZnVuY3Rpb24gYWRkcmVzcy4KCSogamF2YS10cmVlLmggKFRZUEVfQVJSQVlfRUxFTUVOVCwgUFVTSF9TVVBFUl9WQUxVRSk6ICBOZXcuCgkqIHBhcnNlLmMgKHl5cGFyc2UpOiAgRG9uJ3QgY2FsbCBsYXlvdXRfY2xhc3MgaGVyZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6ICBTZXQgVFlQRV9BUlJBWV9FTEVNRU5ULgoKU2F0IEp1biAxNCAxMjowNjo1NyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYywgY2xhc3MuYzogIFVwZGF0ZSBtZXRob2QgdHlwZSB0byBtYXRjaCBsYXRlc3QgS2FmZmUgc25hcHNob3QuCgkqIGNvbnN0YW50cy5jIChsb29rdXBfbmFtZV9jb25zdGFudCk6ICBSZW5hbWVkIHRvIGFsbG9jX25hbWVfY29uc3RhbnQuCgkoYWxsb2NfY2xhc3NfY29uc3RhbnQpOiAgTmV3LgoJKiBleHByLmMgKGV4cGFuZF9pbnZva2UpOiAgTWFrZSBzdXJlIG1ldGhvZCdzIGNsYXNzIGlzIGluaXRpYWxpemVkLgoJKiBjbGFzcy5jIChpbnRlcml0c19mcm9tX3AsIGVtaXRfcmVnaXN0ZXJfY2xhc3MpOiAgTmV3IGZ1bmN0aW9ucy4KCSogcGFyc2UuYyAoeXlwYXJzZSk6ICBDYWxsIGVtaXRfcmVnaXN0ZXJfY2xhc3MuCgpNb24gSnVuICA5IDE4OjA4OjA2IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY29uc3RhbnRzLmM6ICBOZXcgZmlsZSwgdG8gaGFuZGxlIGNvbnN0YW50IHBvb2wuCgkqIE1ha2VmaWxlLmluIChKQVZBX09CSlMpOiAgQWRkIGNvbnN0YW50cy5vLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIFVwZGF0ZSwgZml4LCBmaW5pc2ggdmFyaW91cyBzdHJ1Y3RzLgoJKHB1c2hkZWNsX3RvcF9sZXZlbCk6ICBOZXcuCgkqIHBhcnNlLmMgKGxheW91dF9jbGFzcyk6ICBNb3ZlZCB0byBjbGFzcy5jLgoJKiBleHByLmMgKGphdmFfcHVzaF9jb25zdGFudF9mcm9tX3Bvb2wpOiAgTmV3IGZ1bmN0aW9uLgoJKiBjbGFzcy5jIChidWlsZF9jbGFzc19yZWYpOiAgTWFrZSB3b3JrIGZ1bGx5CgkobWFrZV9jbGFzc19kYXRhKTogIEVtaXQgc3VwZXItY2xhc3MsIGNvbnN0YW50IHBvb2wsIGludGVyZmFjZSB2ZWN0b3IuCgpUdWUgSnVuICAzIDEwOjE0OjMxIDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCWphdmEtdHJlZS5oIChERUNMX1NJR05BVFVSRSwgQkNPREVfRU1JVFRFRCk6ICBSZW1vdmUuCgkoTEFCRUxfVkVSSUZJRUQsIEJDT0RFX0VYQ0VQVElPTl9UQVJHRVQsIFRZUEVfQVJSQVlfUCk6ICBOZXcuCgkqIGNsYXNzLmMgKGNsYXNzX2RlcHRoKTogIE5ldyBmdW5jdGlvbi4KCShsb29rdXBfbmFtZWRfY2xhc3MpOiAgUmVwbGFjZWQgYnkgbmV3IGZ1bmN0aW9uIGxvb2t1cF9jbGFzcy4KCSogZGVjbC5jIChvYmplY3RfdHlwZV9ub2RlLCBzdHJpbmdfdHlwZV9ub2RlKTogIE5ldy4KCVJlbW92ZSB2YXJpb3VzIHR5cGVzIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQuCgkqIGV4cHIuYyAodmVyaWZ5X2p2bV9pbnN0cnVjdGlvbnMpOiAgTmV3IHNlcGFyYXRlIHZlcmlmaWVyIHBhc3MuCgkocHVzaF90eXBlLCBwb3BfdHlwZSk6ICBOZXcgZnVuY3Rpb25zIGZvciB2ZXJpZmllci4KCSh0eXBlX3N0YWNrX2R1cCwgcG9wX2FyZ3VtZW50X3R5cGVzLCBtZXJnZV90eXBlcyk6ICBMaWtld2lzZS4KCShleHBhbmRfYnl0ZV9jb2RlKTogIFNpbXBsaWZ5LCBzaW5jZSB3ZSBhc3N1bWUgYWxyZWFkeSB2ZXJpZmllZC4KCShleHBhbmRfaW52b2tlKTogIE5vdyBtb3N0bHkgd29ya3MuCgkqIGphdmFvcC5kZWY6ICBSZW5hbWUgbGRjMS0+bGRjLCBsZGMyLT5sZGNfdywgbGRjMnctPmxkYzJfdy4KCSogbGFuZy5jIChtYWluX2NsYXNzKTogIE1vdmUgdG8gcGFyc2UuYy4gIERvbid0IG1ha2VfY2xhc3MgeWV0LgoJKiBwYXJzZS5jOiAgV2FpdCB0byBhbGxvY2F0ZSBjbGFzcyBvYmplY3QgdW50aWwgd2Uga25vdyBpdHMgbmFtZS4KCShsYXlvdXRfY2xhc3MpOiAgQ2FsY3VsYXRlIERFQ0xfVklOREVYIGZvciBlYWNoIHZpcnR1YWwgbWV0aG9kLgoJKiB0eXBlY2suYyAoZ2V0X2FycmF5X3R5cGUpOiAgUmVuYW1lIHRvIC4uLgoJKGJ1aWxkX2phdmFfYXJyYXlfdHlwZSk6ICAuLi4gYW5kIHByb3ZpZGUgd29ya2luZyBpbXBsZW1lbnRhdGlvbi4KCShidWlsZF9qYXZhX3NpZ25hdHVyZSk6ICBOZXcgZnVuY3Rpb24gLSBidWlsZCBKYXZhIHNpZ25hdHVyZSBvZiB0eXBlLgoJKHNldF9qYXZhX3NpZ25hdHVyZSk6ICBOZXcgZnVuY3Rpb24gLSBjYWNoZSBzaWduYXR1cmUgd2l0aCB0eXBlLgoJKGxvb2t1cF9qYXZhX21ldGhvZCk6ICBOZXcgZnVuY3Rpb24uCgpUdWUgTWF5ICA2IDIyOjA4OjI0IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaWRlbnRfc3Vic3QpOiAgVGFrZSBleHRyYSBTVUZGSVggcGFyYW1ldGVyLgoJKGFkZF9maWVsZCk6ICBTZXQgREVDTF9BU1NFTUJMRVJfTkFNRSBvZiBzdGF0aWMgZmllbGRzOyAgbW9yZS4KCShzZXRfY29uc3RhbnRfdmFsdWUsIGJ1aWxkX3N0YXRpY19maWVsZF9yZWYsIGlzX2NvbXBpbGVkX2NsYXNzKTogIE5ldy4KCShidWlsZF9jbGFzc19yZWYpOiAgQWN0dWFsbHkgaW1wbGVtZW50LgoJKiBkZWNsLmMsIGphdmEtdHJlZS5oOiAgUmVuYW1lZCBzb21lIHh4X3R5cGUgdG8geHhfdHlwZV9ub2RlLgoJKiBkZWNsLmMgKGJ1aWx0aW5fZnVuY3Rpb24pOiAgTmV3LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogIFVwZGF0ZSBmb3IgY3VycmVudCBLYWZmZS4gIERlY2xhcmUgc29tZQoJYnVpbHRpbiBLYWZmZSBmdW5jdGlvbnMuCgkqIGV4cHIuYyAoYnVpbGRfYWRkcmVzc19vZik6ICBOZXcuCgkoZXhwYW5kX2phdmFfTkVXLCBleHBhbmRfamF2YV9JTlNUQU5DRU9GLCBleHBhbmRfamF2YV9DSEVDS0NBU1QpOgoJUmVuYW1lZCAoZnJvbSBleHBhbmRfamF2YV9uZXcgZXRjKSwgYW5kIGFkZGVkIHdvcmtpbmcgaW1wbGVtZW50YXRpb25zLgoJKGJ1aWxkX2ZpZWxkX3JlZik6ICBOb3cgYWxzbyBoYW5kbGUgc3RhdGljIGZpZWxkcy4KCShleHBhbmRfaW52b2tlKTogIEltcGxlbWVudCBpbnZva2VzdGF0aWMsIGFuZCBzdGFydCBpbXBsZW1lbnQgcmVzdC4KCSogamF2YS1vcGNvZGVzLmg6ICBVc2UgamF2YW9wLmRlZiB0byBhdm9pZCBkdXBsaWNhdGVkIGxpc3QuCgkqIGphdmFvcC5kZWY6ICBSZW5hbWUgaW52b2tldmlydCAtPiBpbnZva2V2aXJ0dWFsLgoJKiBsYW5nLmMgKHVzZV9oYW5kbGVzKTogIFJlbW92ZWQuCgkqIHBhcnNlLmM6ICBBZGQgc3VwcG9ydCBmb3IgQ29uc3RhbnRWYWx1ZSBhdHJpYnV0ZS4KCUhhbmRsZSBuZXN0ZWQgbG9hZGluZyBvZiBhIGNsYXNzLiAgKEpQT09MX1VURik6ICBOZXcuCgpUdWUgTWFyIDExIDIwOjExOjA1IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfamF2YV9wdXNoYyk6ICBTdXBwb3J0ICNpZm5kZWYgUkVBTF9BUklUSE1FVElDIGNhc2UuCgpUaHUgRmViIDI3IDE0OjI0OjI5IDE5OTcgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChqYXZhLmluc3RhbGwtbWFuKTogIE5ldyBlbXB0eSBydWxlLgoJKiB0eXBlY2suYyAoc2V0X2xvY2FsX3R5cGUpOiAgTmV3IGZ1bmN0aW9uLgoJKiBleHByLmMgKFNUT1JFX0lOVEVSTkFMKTogIENhbGwgZmluZF9sb2NhbF92YXJpYWJsZSwKCW5vdCBmaW5kX3N0YWNrX3Nsb3QuICBDYWxsIHNldF9sb2NhbF90eXBlLgoKV2VkIEZlYiAxMiAxNjoxMTowNSAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGphdmEtdHJlZS5oOiAgVmFyaW91cyBuZXcgbWFjcm9zIGZvciBjb25zdHJ1Y3RpbmcgUkVDT1JEX1RZUEVzLAoJYW5kIGJ1aWxkaW5nIFJFQ09SRF9UWVBFIENPTlNUUlVDVE9Scy4KCUFsc28gc3VwcG9ydCBmb3IgY3JlYXRpbmcgVXRmOENvbnN0IG9iamVjdHMgZnJvbSBhbiBJTkRFVElGSUVSX05PREUuCgoJKiBsYW5nLmMgKHVzZV9oYW5kbGVzKTogIENoYW5nZSB0aGUgZGVmYXVsdCB0byAwLgoJKiBkZWNsLmM6ICBEZWZpbmUgYW5kIGJ1aWxkIGNsYXNzX3R5cGUsIGZpZWxkX3R5cGUsIHV0Zjhjb25zdF90eXBlLgoJKiBjbGFzcy5jIChtYWtlX2NsYXNzX2RhdGEsIG1ha2VfZmllbGRfdmFsdWUsCglnZXRfYWNjZXNzX2ZsYWdzX2Zyb21fZGVjbCwgYnVpbGRfY2xhc3NfcmVmLCBidWlsZF91dGY4X3JlZiwKCWhhc2hVdGY4U3RyaW5nLCBzdHJMZW5ndGhVdGY4LCBtYW5nbGVkX2NsYXNzbmFtZToKCUZ1bmN0aW9ucyB0byBidWlsZCByZWZsZWN0aXZlIGRhdGEgc3RydWN0dXJlcy4KCSogcGFyc2UuYyAoeXlwYXJzZSk6ICBDYWxsIG1ha2VfY2xhc3NfZGF0YS4KCgkqIGpjZi1pby5jIChvcGVuX2NsYXNzLCBmaW5kX2NsYXNzZmlsZSk6ICBOZXcgZnVuY3Rpb25zLgoJKiBqY2YtZHVtcC5jOiAgU3VwcG9ydCByZWFkaW5nIGNsYXNzZmlsZSBmcm9tIGV4cGxpY2l0bHktbmFtZWQKCWNsYXNzIGZpbGUgKHdpdGhvdXQgQ0xBU1NQQVRIIHNlYXJjaGluZykuCgpUaHUgT2N0IDI0IDE0OjEwOjE2IDE5OTYgIFBlciBCb3RobmVyICA8Ym90aG5lckBkZW5lYi5jeWdudXMuY29tPgoKCSogamNmLXJlYWRlci5jOiAgQWRkIHBhcmFtZXRlciBsaXN0IHRvIEhBTkRMRV9DT05TVEFOVF9VdGY4LgoJKiBwYXJzZS5jIChKUE9PTF9VVEZfTEVOR1RILCBKUE9PTF9VVEZfREFUQSwgSEFORExFX0NPTlNUQU5UX1V0ZjgpOgoJT3ZlcnJpZGUgamNmLXJlYWRlciBtYWNyb3Mgc28gQ09OU1RBTlRfVXRmOCBiZWNvbWVzIHRyZWUgbm9kZSBoZXJlLgoJKGdldF9jb25zdGFudCk6ICBOb3cgdHJpdmlhbCBmb3IgQ09OU1RBTlRfVXRmOC4KCgkqIGpjZi5oOiAgTWFrZSBORVdfQ1BPT0wgdGhlIGRlZmF1bHQuCgkqIGpjZi5oLCBqY2YtcmVhZGVyLmMsIHBhcnNlLmM6ICBSZW1vdmUgc3VwcG9ydCBmb3IgIU5FV19DUE9PTC4KClRodSBPY3QgMjQgMTM6NTI6NDUgMTk5NiAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGRlbmViLmN5Z251cy5jb20+CgoJTmV3IGRpcmVjdG9yeS4K