MTk5OS0xMi0zMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoVkZfTk9STUFMX1ZBTFVFKTogUmVtb3ZlLgoJKiBjbGFzcy5jIChzdHJ1Y3QgYmFzZV9pbmZvKTogUmVtb3ZlIHZmaWVsZCwgdmZpZWxkcywgYW5kIHJ0dGkuCgkoc2V0X3ByaW1hcnlfYmFzZSk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gLi4uCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogLi4uIGhlcmUuICBSZW5hbWUgdG8gLi4uCgkoZGV0ZXJtaW5lX3ByaW1hcnlfYmFzZSk6IC4uLiB0aGlzLiAgU2ltcGxpZnkuCgkoY3JlYXRlX3Z0YWJsZV9wdHIpOiBUd2VhayBhY2NvcmRpbmdseS4KCShmaW5pc2hfc3RydWN0XzEpOiBTaW1wbGlmeS4KCQoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9WQkFTRUNMQVNTRVMpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KCShDTEFTU1RZUEVfTl9CQVNFQ0xBU1NFUyk6IExpa2V3aXNlLgoJKEJJTkZPX0ZPUl9WQkFTRSk6IE5ldyBtYWNyby4KCShnZXRfdmJhc2VfdHlwZXMpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wYXRoKTogVXNlIEJJTkZPX0ZPUl9WQkFTRS4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IExpa2V3aXNlLgoJKGZpbmlzaF92dGJscyk6IExpa2V3aXNlLgoJKGdldF9jbGFzc19vZmZzZXRfMSk6IExpa2V3aXNlLgoJKG1vZGlmeV9hbGxfaW5kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX1ZCQVNFQ0xBU1NFUyBoZXJlLgoJKiBpbml0LmMgKHNvcnRfYmFzZV9pbml0KTogVXNlIEJJTkZPX0ZPUl9WQkFTRS4KCShleHBhbmRfbWVtYmVyX2luaXQpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkX3F1ZXVlX3ApOiBMaWtld2lzZS4KCSh2aXJ0dWFsX2NvbnRleHQpOiBMaWtld2lzZS4KCShnZXRfdmJhc2VfdHlwZXMpOiBEb24ndCByZXR1cm4gYSB2YWx1ZS4gIFNldAoJQ0xBU1NUWVBFX1ZCQVNFQ0xBU1NFUyBoZXJlLgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBVc2UgQklORk9fRk9SX1ZCQVNFLgoJCjE5OTktMTItMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChmaXh1cF9pbmxpbmVfbWV0aG9kcyk6IENsZWFyIENMQVNTVFlQRV9JTkxJTkVfRlJJRU5EUy4KCjE5OTktMTItMjkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChjcmVhdGVfdnRhYmxlX3B0cik6IFB1dCB0aGUgdnRhYmxlIGF0IHRoZSBiZWdpbm5pbmcgb2YKCXRoZSBjbGFzcywgbm90IHRoZSBlbmQsIGluIHRoZSBuZXcgQUJJLgoJKiB0cmVlLmMgKHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzKTogRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciB0aGUgbmV3CglBQkkuCgoxOTk5LTEyLTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChsYW5nX3R5cGUpOiBBZGQgbmVhcmx5X2VtcHR5X3AuICBBZGp1c3QgZHVtbXkuCgkoQ0xBU1NUWVBFX05FQVJMWV9FTVBUWV9QKTogTmV3IG1hY3JvLgoJKiBjbGFzcy5jIChjaGVja19iYXNlcyk6IFVwZGF0ZSBDTEFTU1RZUEVfTkVBUkxZX0VNUFRZX1AuCgkoY2hlY2tfZmllbGRfZGVjbHMpOiBMaWtld2lzZS4KCShjaGVja19iYXNlc19hbmRfbWVtYmVycyk6IExpa2V3aXNlLgoKMTk5OS0xMi0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiBSZW1vdmUuCgkqIGNsYXNzLmMgKGxheW91dF9jbGFzc190eXBlKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbQoJZmluaXNoX3N0cnVjdF8xLgoJKGZpeHVwX3BlbmRpbmdfaW5saW5lKTogTGlrZXdpc2UuCgkoZml4dXBfaW5saW5lX21ldGhvZHMpOiBOZXcgZnVuY3Rpb24uCgkqIG1ldGhvZC5jIChmaXh1cF9wZW5kaW5nX2lubGluZSk6IFJlbW92ZS4KCShkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IExpa2V3aXNlLgoJCgkqIGRlY2wuYyAoQk9PTF9UWVBFX1NJWkUpOiBCb29scyBhbHdheXMgaGF2ZSBzaXplIGAxJyB1bmRlciB0aGUKCW5ldyBBQkkuCgkKCSogY3AtdHJlZS5oIChsYW5nX3R5cGUpOiBSZXBsYWNlIGFic3RyYWN0X3ZpcnR1YWxzIHdpdGggcHVyZV92aXJ0dWFscy4KCShDTEFTU1RZUEVfQUJTVFJBQ1RfVklSVFVBTFMpOiBSZW5hbWUgdG8gLi4uCgkoQ0xBU1NUWVBFX1BVUkVfVklSVFVBTFMpOiAuLi4gdGhpcy4KCShsYW5nX2RlY2xfZmxhZ3MpOiBSZXBsYWNlIGFic3RyYWN0X3ZpcnR1YWwgd2l0aCBwdXJlX3ZpcnR1YWwuCgkoREVDTF9BQlNUUkFDVF9WSVJUVUFMX1ApOiBSZW5hbWUgdG8gLi4uCgkoREVDTF9QVVJFX1ZJUlRVQUxfUCk6IC4uLiB0aGlzLgoJKGdldF9hYnN0cmFjdF92aXJ0dWFscyk6IFJlbmFtZSB0byAuLi4KCShnZXRfcHVyZV92aXJ0dWFscyk6IC4uLiB0aGlzLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IFJlcGxhY2UgREVDTF9QVVJFX1ZJUlRVQUxfUCB3aXRoCglERUNMX0FCU1RSQUNUX1ZJUlRVQUxfUC4gIFJlcGxhY2UgQ0xBU1NUWVBFX0FCU1RSQUNUX1ZJUlRVQUxTIHdpdGgKCUNMQVNTVFlQRV9QVVJFX1ZJUlRVQUxTLgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0X2JpdHMpOiBMaWtld2lzZS4gIENhbGwgZ2V0X3B1cmVfdmlydHVhbHMsIG5vdAoJZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzLgoJKGJ1aWxkX3Z0YmxfaW5pdGlhbGl6ZXIpOiBMaWtld2lzZS4KCShvdmVycmlkZV9vbmVfdnRhYmxlKTogTGlrZXdpc2UuCgkoY2hlY2tfbWV0aG9kcyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IExpa2V3aXNlLgoJKHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGxhbmdfbWFya190cmVlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGdyb2tfZnVuY3Rpb25faW5pdCk6IExpa2V3aXNlLgoJKGltcG9ydF9leHBvcnRfdnRhYmxlKTogTGlrZXdpc2UuCgkoaW1wb3J0X2V4cG9yX2NsYXNzKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBMaWtld2lzZS4KCSogeHJlZi5jIChHTlVfeHJlZl9tZW1iZXIpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGdldF9hYnN0cmFjdF92aXJ0dWFscyk6IFJlbmFtZSB0byBnZXRfcHVyZV92aXJ0dWFscy4KCQoxOTk5LTEyLTI2ICBaYWNrIFdlaW5iZXJnICA8emFja0B3b2xlcnkuY3VtYi5vcmc+CgoJKiBjcC10cmVlLmg6IFJlcGxhY2UgRU5BQkxFX0NIRUNLSU5HIHdpdGggRU5BQkxFX1RSRUVfQ0hFQ0tJTkcKCXRocm91Z2hvdXQuCgoxOTk5LTEyLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChzdG9yZV9yZXR1cm5faW5pdCk6IFVzZSBtb2RlIG9mIG9sZCBSVEwgZ2VuZXJhdGVkIGZvcgoJREVDTF9SRVNVTFQsIG5vdCB0aGUgbW9kZSBvZiBERUNMX1JFU1VMVCBpdHNlbGYuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfbmFtZWRfcmV0dXJuX3ZhbHVlKTogU2V0IERFQ0xfVU5JTkxJTkFCTEUKCWZvciBmdW5jdGlvbnMgdGhhdCB1c2VkIG5hbWVkIHJldHVybiB2YWx1ZXMuCgkKMTk5OS0xMi0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNlbWFudGljcy5jIChleHBhbmRfYm9keSk6IFVzZQoJbm90ZV9kZWZlcnJhbF9vZl9kZWZpbmVkX2lubGluZV9mdW5jdGlvbi4KCjE5OTktMTItMjIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBIYW5kbGUgQ1RPUl9TVE1Ucy4KCjE5OTktMTItMjIgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGxzZC5pYy51bmljYW1wLmJyPgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogU3VwcG9ydCBuYW1lZCByZXR1cm4gdmFsdWVzLgoKMTk5OS0xMi0yMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX1ZGSUVMRF9QQVJFTlQpOiBVcGRhdGUgY29tbWVudHMuCgkoQ0xBU1NUWVBFX0hBU19QUklNQVJZX0JBU0VfUCk6IE5ldyBtYWNyby4KCShDTEFTU1RZUEVfUFJJTUFSWV9CSU5GTyk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChjaGVja19tZXRob2RzKTogRG9uJ3Qgc2V0IFRZUEVfSEFTX0NPTVBMRVhfSU5JVF9SRUYsCglUWVBFX05FRURTX0NPTlNUUlVDVElORywgYW5kIENMQVNTVFlQRV9OT05fQUdHUkVHQVRFIGhlcmUuCgkoY2hlY2tfYmFzZXNfYW5kX21lbWJlcnMpOiBTZXQgdGhlbSBoZXJlIGluc3RlYWQuCgkoY3JlYXRlX3Z0YWJsZV9wdHIpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tIC4uLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IC4uLiBoZXJlLiAgVXNlIGl0LiAgVGlkeS4gIFVzZQoJQ0xBU1NUWVBFX0hBU19QUklNQVJZX0JBU0VfUCBhbmQgQ0xBU1NUWVBFX1BSSU1BUllfQklORk8uCgkqIHNlYXJjaC5jIChkZnNfaW5pdF92YmFzZV9wb2ludGVycyk6IEhhbmRsZSBzZWVpbmcgVFlQRV9WRklFTEQgYXMKCXRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgY2xhc3MuCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IFVzZSBDTEFTU1RZUEVfTl9CQVNFQ0xBU1NFUy4gIEhhbmRsZQoJc2VlaW5nIFRZUEVfVkZJRUxEIGFzIHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgY2xhc3MuCgkKCSogY3AtdHJlZS5oIChUWVBFX1ZJUlRVQUxfUCk6IFJlbmFtZSB0byAuLi4KCShUWVBFX1BPTFlNT1JQSElDX1ApOiAuLi4gdGhpcy4KCShUWVBFX1VTRVNfQ09NUExFWF9JTkhFUklUQU5DRSk6IFJlbmFtZSB0byAuLi4KCShUWVBFX0JBU0VfQ09OVlNfTUFZX1JFUVVJUkVfQ09ERV9QKTogLi4uIHRoaXMuCgkoVFJFRV9DQUxMU19ORVcpOiBSZW1vdmUuCgkoVFJFRV9NQU5HTEVEKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfdmZpZWxkX3JlZik6IFVzZSBUWVBFX0JBU0VfQ09OVlNfTUFZX1JFUVVJUkVfQ09ERV9QLAoJYW5kIFRZUEVfUE9MWU1PUlBISUNfUC4KCSogY2xhc3MuYyAoY2hlY2tfYmFzZXMpOiBMaWtld2lzZS4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0X2JpdHMpOiBMaWtld2lzZS4KCShjaGVja19mb3Jfb3ZlcnJpZGUpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCShnZXRfdmZpZWxkX25hbWUpOiBMaWtld2lzZS4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2NsYXNzKTogTGlrZXdpc2UuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fZGVjbCk6IExpa2V3aXNlLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKiByZXBvLmMgKHJlcG9faW5saW5lX3VzZWQpOiBMaWtld2lzZS4KCSogcnR0aS5jIChidWlsZF9oZWFkb2YpOiBMaWtld2lzZS4KCShnZXRfdGluZm9fZm5fZHluYW1pYyk6IExpa2V3aXNlLgoJKGJ1aWxkX3hfdHlwZWlkKTogTGlrZXdpc2UuCgkoZ2V0X3RpbmZvX3Zhcik6IExpa2V3aXNlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdF8xKTogTGlrZXdpc2UuCgkoc3ludGhlc2l6ZV90aW5mb19mbik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkXzEpOiBMaWtld2lzZS4KCShkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKG1heWJlX3N1cHByZXNzX2RlYnVnX2luZm8pOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfYWRkcik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJCjE5OTktMTItMjAgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0eXBlY2suYyAoc3RyaXBfYWxsX3BvaW50ZXJfcXVhbHMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGJ1aWxkX3N0YXRpY19jYXN0KTogVXNlIGl0LiBEb24ndCB1c2UgYXRfbGVhc3RfYXNfcXVhbGlmaWVkX3AuCgoxOTk5LTEyLTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChjcF90cmVlX2luZGV4KTogQWRkIENQVElfRFNPX0hBTkRMRS4KCShkc29faGFuZGxlX25vZGUpOiBOZXcgbWFjcm8uCgkoZmxhZ191c2VfY3hhX2F0ZXhpdCk6IE5ldyB2YXJpYWJsZS4KCShkZWNsYXJlX2dsb2JhbF92YXIpOiBOZXcgZnVuY3Rpb24uCgkoc3RhcnRfYW5vbl9mdW5jKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKGVuZF9hbm9uX2Z1bmMpOiBMaWtld2lzZS4KCSogZGVjbC5jIChnZXRfYXRleGl0X25vZGUpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tCglkZXN0cm95X2xvY2FsX3N0YXRpYy4gIEhhbmRsZSBmbGFnX3VzZV9jeGFfYXRleGl0LgoJKGdldF9kc29faGFuZGxlX25vZGUpOiBMaWtld2lzZS4KCShzdGFydF9jbGVhbnVwX2ZuKTogUmVuYW1lZCBmcm9tIHN0YXJ0X2Fub25fZnVuYy4gIE1vdmVkIGhlcmUgZnJvbQoJZXhjZXB0LmMuICBIYW5kbGUgZmxhZ191c2VfY3hhX2F0ZXhpdC4KCShlbmRfY2xlYW51cF9mbik6IFJlbmFtZWQgZnJvbSBlbmRfYW5vbl9mdW5jLiAgTW92ZWQgaGVyZSBmcm9tCglleGNlcHQuYy4KCShkZWNsYXJlX2dsb2JhbF92YXIpOiBOZXcgdmFyaWFibGUuCgkoZGVzdHJveV9sb2NhbF9zdGF0aWMpOiBIYW5kbGUgZmxhZ191c2VfY3hhX2F0ZXhpdC4KCSogZGVjbDIuYyAoZmxhZ191c2VfY3hhX2F0ZXhpdCk6IE5ldyB2YXJpYWJsZS4KCShsYW5nX2Zfb3B0aW9ucyk6IExpa2V3aXNlLgoJKiBleGNlcHQuYyAoc3RhcnRfYW5vbl9mdW5jKTogUmVtb3ZlLgoJKGVuZF9hbm9uX2Z1bmMpOiBMaWVrd2lzZS4KCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZnVzZS1jeGEtYXRleGl0IGFuZCAtZm5vLXVzZS1jeGEtYXRleGl0LgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBVc2UgZGVjbGFyZV9nbG9iYWxfdmFyLgoKMTk5OS0xMi0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNsYXNzLmMgKGNoZWNrX2ZpZWxkX2RlY2xzKTogRG9uJ3QgcmV0dXJuIGEgdmFsdWUuCgkoYXZvaWRfb3ZlcmxhcCk6IE1vdmVkIGhlcmUgZnJvbSB0cmVlLmMuCgkoYnVpbGRfYmFzZV9maWVsZHMpOiBMaWtld2lzZS4KCShjaGVja19iYXNlcyk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gZmluaXNoX2Jhc2Vfc3RydWN0LgoJKGNoZWNrX2Jhc2VzX2FuZF9tZW1iZXJzKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSAKCWZpbmlzaF9zdHJ1Y3RfMS4KCShzdHJ1Y3QgYmFzZV9pbmZvKTogUmVtb3ZlIGNhbnRfaGF2ZV9kZWZhdWx0X2N0b3IsCgljYW50X2hhdmVfY29uc3RfY3RvciwgY2FudF9oYXZlX2Fzbl9yZWYuCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogU3BsaXQgc2VtYW50aWMgYW5hbHlzaXMgaW50byBjaGVja19iYXNlcy4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBGaXggYm9ndXMgYXNzZXJ0aW9uLgoJKGNoZWNrX2ZpZWxkX2RlY2xzKTogQ2FsbCBmaW5pc2hfc3RydWN0X2Fub24gaGVyZS4KCShidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IFVzZSBDTEFTU1RZUEVfTl9CQVNFQ0xBU1NFUy4KCShmaW5pc2hfc3RydWN0XzEpOiBVc2UgY2hlY2tfYmFzZXNfYW5kX21lbWJlcnMuICBSZW9yZ2FuaXplLgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9WQkFTRUNMQVNTRVMpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgkoYnVpbGRfYmFzZV9maWVsZHMpOiBEb24ndCBkZWNsYXJlLgoJKiB0cmVlLmMgKGF2b2lkX292ZXJsYXApOiBSZW1vdmUuCgkoYnVpbGRfYmFzZV9maWVsZHMpOiBMaWtld2lzZS4KCQoJKiBvcHRpbWl6ZS5jIChzdHJ1Y3QgaW5saW5lX2RhdGEpOiBSZW1vdmUgc2NvcGVfc3RtdC4KCShyZW1hcF9ibG9jayk6IERvbid0IHVzZSBpbnNlcnRfYmxvY2tfYWZ0ZXJfbm90ZS4gIERvbid0IHVwZGF0ZQoJc2NvcGVfc3RtdC4KCShleHBhbmRfY2FsbF9pbmxpbmUpOiBEb24ndCB1cGRhdGUgc2NvcGVfc3RtdC4KCShvcHRpbWl6ZV9mdW5jdGlvbik6IERvbid0IGluaXRpYWxpemUgc2NvcGVfc3RtdC4KCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10KTogU2V0IE5PVEVfQkxPQ0sgZm9yIG5ld2x5IGVtaXR0ZWQKCU5PVEVfSU5TTl9CTE9DS19CRUcvTk9URV9JTlNOX0JMT0NLX0VORCBub3Rlcy4KCjE5OTktMTItMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChoYW5kbGVfdXNpbmdfZGVjbCk6IEdldCBUWVBFX0ZJRUxEUyBhbmQgVFlQRV9NRVRIT0RTCglvdXQgb2YgdGhlIGNsYXNzLCByYXRoZXIgdGhhbiB0YWtpbmcgdGhlbSBhcyBwYXJhbWV0ZXJzLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogTW92ZSBoZXJlIGZyb20gdHJlZS5jLgoJKGJ1aWxkX3Z0Ymxfb3JfdmJhc2VfZmllbGQpOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfbWV0aG9kcyk6IExpa2V3aXNlLgoJKHJlbW92ZV96ZXJvX3dpZHRoX2JpdGZpZWxkcyk6IExpa2V3aXNlLgoJKGFkZF92aXJ0dWFsX2Z1bmN0aW9uKTogVXNlIHRyZWVfY29ucyBpbnN0ZWFkIG9mIHRlbXBfdHJlZV9jb25zLgoJKGRlbGV0ZV9kdXBsaWNhdGVfZmllbGRzXzEpOiBUaWR5LiAgRG9uJ3QgZGVsZXRlIGR1cGxpY2F0ZQoJVVNJTkdfREVDTHMgaGVyZS4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5vCgltZXRob2RzIGhlcmUuCgkoZ2V0X2Jhc2VmbmRlY2xzKTogVXNlIHRyZWVfY29ucyBpbnN0ZWFkIG9mIHRlbXBfdHJlZV9jb25zLgoJKGNoZWNrX2ZpZWxkX2RlY2xzKTogQ2FsbCBkZWxldGVfZHVwbGljYXRlX2ZpZWxkcyBoZXJlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IFRpZHkuICBVc2UgY2hlY2tfbWV0aG9kcyBhbmQKCXJlbW92ZV96ZXJvX3dpZHRoX2JpdGZpZWxkcy4KCSogY3AtdHJlZS5oIChidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IFJlbW92ZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSB0cmVlX2NvbnMgaW5zdGVhZCBvZgoJdGVtcF90cmVlX2NvbnMuCgkqIGRlY2wyLmMgKHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogVXNlIHRyZWVfY29ucwoJaW5zdGVhZCBvZiB0ZW1wX3RyZWVfY29ucy4KCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFJlbW92ZSBkZWFkIGNvZGUuCgkqIG1ldGhvZC5jIChmaXh1cF9wZW5kaW5nX2lubGluZSk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20JLi4uCgkoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiAuLi4gaGVyZS4KCSogdHJlZS5jIChidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IFJlbW92ZS4KCQoxOTk5LTEyLTE1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAod2Fsa190cmVlKTogV2FsayBvcGVyYW5kIHN1YnRyZWVzIGluIGZvcndhcmQgb3JkZXIuCgkqIG9wdGltaXplLmMgKGV4cGFuZF9jYWxsX2lubGluZSk6IExpa2V3aXNlLgoJKG9wdGltaXplX2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBpZC0+c2NvcGVfc3RtdCB0byBzb21ldGhpbmcgdXNlZnVsLgoJKHJlbWFwX2Jsb2NrKTogQXNzdW1lIGlkLT5zY29wZV9zdG10IGhhcyBhIHVzZWZ1bCB2YWx1ZS4KCjE5OTktMTItMTUgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRXhwYW5kIHdhcm5pbmcgbWVzc2FnZS4gTW92ZSBwb2ludGVyCglhbGlnbm1lbnQgd2FybmluZyB0byBhZnRlciB0aGUgY2FzdC4gRG9uJ3Qgd2FybiBhYm91dCBwb2ludGVyCglhbGlnbm1lbnQgd2hlbiBnaXZlbiBhIHBvaW50ZXIgdG8gaW5jb21wbGV0ZS4KCjE5OTktMTItMTUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKG1ha2VfYWdncl90eXBlKTogRGVjbGFyZS4KCSogbGV4LmMgKGNwX21ha2VfbGFuZ190eXBlKTogRG9uJ3QgU0VUX0lTX0FHR1JfVFlQRS4KCShtYWtlX2FnZ3JfdHlwZSk6IE5ldy4KCgkqIGRlY2wuYyAoYnVpbGRfdHlwZW5hbWVfdHlwZSwgaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBVc2UgaXQuCgkoYnVpbGRfcHRybWVtZnVuY190eXBlLCB4cmVmX3RhZyk6IExpa2V3aXNlLgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtLCBsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSogcnR0aS5jIChleHBhbmRfY2xhc3NfZGVzYyk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbiwgZmluaXNoX3R5cGVvZik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGNvcHlfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IExpa2V3aXNlLgoKMTk5OS0xMi0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX1BBUk1fSU5ERVgpOiBDYWxjdWxhdGUgc2l6ZSB1c2luZwoJc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pLgoKMTk5OS0xMi0xNCAgSmFzb24gTWVycmlsbCAgPGphc29uQGNhc2V5LmN5Z251cy5jb20+CgoJKiBvcHRpbWl6ZS5jIChleHBhbmRfY2FsbF9pbmxpbmUpOiBTZXQgQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIG9uIHRoZQoJb3V0ZXJtb3N0IGJsb2NrIHRvIHBvaW50IHRvIHRoZSBpbmxpbmVkIGZ1bmN0aW9uIGRlY2wuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBvcGVyYXRvcj09LCBub3Qgb3BlcmF0b3IgPT0uCgkob3BfdG9fc3RyaW5nKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGNvbXB1dGVfYXJyYXlfaW5kZXhfdHlwZSk6IEhhbmRsZSBudWxsIG5hbWUuCgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IEZpeCB0byBtYXRjaCBjb21tZW50LgoJKGxvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBBZGp1c3QuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2NsYXNzKTogRG9uJ3QgaWdub3JlIGRsbGltcG9ydC4KCjE5OTktMTItMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChjaGVja19maWVsZF9kZWNscyk6IFNwbGl0IG91dCBmcm9tIC4uLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IC4uLiBoZXJlLiAgVXNlIGl0LiAgVGlkeS4KCgkqIGNwLXRyZWUuaCAocmVtYXBfc2F2ZV9leHByKTogQWRkIHdhbGtfc3VidHJlZXMgcGFyYW1ldGVyLgoJKiBvcHRpbWl6ZS5jIChjb3B5X2JvZHlfcik6IFBhc3MgaXQuCgkqIHRyZWUuYyAocmVtYXBfc2F2ZV9leHByKTogQ2xlYXIgd2Fsa19zdWJ0cmVlcyBmb3IgYW4KCWFscmVhZHktaGFuZGxlZCBTQVZFX0VYUFIuCgkoY3BfdW5zYXZlX3IpOiBQYXNzIHdhbGtfc3VidHJlZXMgdG8gcmVtYXBfc2F2ZV9leHByLgoKCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogRHVtcCBERUNMX05BTUVTUEFDRV9BTElBUy4KCSogaXIudGV4aSAoREVDTF9OQU1FU1BBQ0VfQUxJQVMpOiBEb2N1bWVudCBpdC4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBFWFBSX1dJVEhfRklMRV9MT0NBVElPTi4KCjE5OTktMTItMTQgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY2xhc3MuYyAoZmluaXNoX2Jhc2Vfc3RydWN0KTogQWxsb3cgbXVsdGlwbGUgQ09NIGJhc2UgY2xhc3NlcwoJYXMgd2VsbCBhcyBub24tQ09NIGJhc2VzIGFzIGxvbmcgYXMgaXQncyBub3QgdGhlIGxlZnRtb3N0LgoKMTk5OS0xMi0xMyAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBsZXguYyAoc2F2aW5nX3BhcnNlX3RvX29ic3RhY2spOiBOZXcgZ2xvYmFsLgoJKHJlaW5pdF9wYXJzZV9mb3JfYmxvY2spOiBVc2UuCgkocmVpbml0X3BhcnNlX2Zvcl9leHByKTogVXNlLgoJKGNoZWNrX25ld2xpbmUpOiBVc2UuCgoxOTk5LTEyLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogb3B0aW1pemUuYyAoaW5pdGlhbGl6ZV9pbmxpbmVkX3BhcmFtZXRlcnMpOiBUYWtlIEZOIHRvIHdoaWNoIHRoZQoJcGFyYW1ldGVycyBiZWxvbmcgYXMgYW4gYXJndW1lbnQuCgkoZXhwYW5kX2NhbGxfaW5saW5lKTogRXhwYW5kIGNhbGxzIGludG8gdGhlIHBhcmFtZXRlcgoJaW5pdGlhbGl6YXRpb25zIGJlZm9yZSBwdXNoaW5nIHRoZSBmdW5jdGlvbiBvbnRvIHRoZSBsaXN0IG9mCglmdW5jdGlvbnMgd2UgYXJlIHByZXNlbnRseSBleHBhbmRpbmcuCgoxOTk5LTEyLTExICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChnZXRfdnRhYmxlX25hbWUpOiBVc2UgYSBsaXRlcmFsIGZvcm1hdCBzdHJpbmcgYW5kCglWVEFCTEVfTkFNRV9QUkVGSVggbWFjcm8gaW5zdGVhZCBvZiBWVEFCTEVfTkFNRV9GT1JNQVQuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCgkqIGNwLXRyZWUuaCAoVlRBQkxFX05BTUVfUFJFRklYKTogRGVmaW5lIHRoaXMgaW5zdGVhZCBvZgoJVlRBQkxFX05BTUVfRk9STUFULgoKCSogZGVjbC5jIChtYWtlX3J0bF9mb3JfbG9jYWxfc3RhdGljKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdHlwZScuCgoJKiBpbml0LmMgKGJ1aWxkX3ZlY19pbml0KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgdHJ5X2JvZHknLgoKCSogbGV4LmMgKHl5ZXJyb3IpOiBEb24ndCBjYWxsIGEgdmFyaWFkaWMgZnVuY3Rpb24gd2l0aCBhCglub24tbGl0ZXJhbCBmb3JtYXQgc3RyaW5nLgoKCSogb3B0aW1pemUuYyAob3B0aW1pemVfZnVuY3Rpb24pOiBDYWxsIG1lbXNldCwgbm90IGJ6ZXJvLgoKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybV9yKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoxOTk5LTEyLTA5ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQWRkIHN0YXRpYyBhdHRyaWJ1dGUgdG8gbWF0Y2gKCXByb3RvdHlwZS4KCgkqIE1ha2VmaWxlLmluIChzZW1hbnRpY3Mubyk6IEFkZCBkZXBlbmRlbmN5IG9uIG91dHB1dC5oLgoJKiBzZW1hbnRpY3MuYzogSW5jbHVkZSBvdXRwdXQuaCBmb3IgZGVjbGFyYXRpb24gb2YKCW1ha2VfZnVuY3Rpb25fcnRsLgoKMTk5OS0xMi0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZWVuYWJsZSBpbmxpbmluZyBvbiB0cmVlcy4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IERvbid0IGhhbmRsZSBBR0dSX0lOSVRfRVhQUiBoZXJlLgoJKiBzZW1hbnRpY3MuYyAoc2ltcGxpZnlfYWdncl9pbml0X2V4cHJzKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9ib2R5KTogVXNlIGl0LgoJKiB0cmVlLmMgKHdhbGtfdHJlZSk6IFNwZWNpYWwtY2FzZSBUQVJHRVRfRVhQUnMgc2luY2UgdGhleQoJc29tZXRpbWVzIHByZXNlbnQgdGhlIHNhbWUgc3ViLXRyZWUgdHdpY2UuCgkKCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogQWJicmV2aWF0ZSBgY2xhc3MnIGFzIGBjbHMnLCBub3QKCWBjc2wnLgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9zd2l0Y2hfY29uZCk6IERvIGNvbnZlcnNpb25zIGhlcmUsIG5vdCAuLi4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3N0YXJ0X2Nhc2UpOiBIZXJlLgoKCSogc2VtYW50aWNzLmMgKGRvX3BvcGxldmVsKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCQoxOTk5LTEyLTA2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdHJlZS5jICh3YWxrX3RyZWUpOiBEb24ndCByZWN1cnNlIGludG8gREVDTF9JTklUSUFMIG9yIERFQ0xfU0laRQoJdW5sZXNzIHdlJ3JlIGRlY2xhcmluZyB0aGUgdmFyaWFibGUgaW4gcXVlc3Rpb24uCgoxOTk5LTEyLTA2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICNpZiAwIGxhc3QgcGF0Y2guCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgoxOTk5LTEyLTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBmbGFnX2lubGluZV90cmVlcyBpZgoJIWZsYWdfbm9faW5saW5lLgoKCSogY3AtdHJlZS5oIChjYWxsc19zZXRqbXBfcCk6IERlY2xhcmUuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogTWFyayBmdW5jdGlvbnMgdGhhdCBjYWxsIHNldGptcCBhcwoJdW5pbmxpbmFibGUuCgkqIG9wdGltaXplLmMgKGNhbGxzX3NldGptcF9yKTogTmV3IGZ1bmN0aW9uLgoJKGNhbGxzX3NldGptcF9wKTogTGlrZXdpc2UuCgoxOTk5LTEyLTA0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogb3B0aW1pemUuYyAoZXhwYW5kX2NhbGxfaW5saW5lKTogV3JhcCB0aGUgZXhwYW5kZWQgY2FsbCBpbiBhbgoJRVhQUl9XSVRIX0ZJTEVfTE9DQVRJT04gbm9kZSB0byBnZXQgY29ycmVjdCBsaW5lIG51bWJlcnMgZm9yCglpbmxpbmVkIGZ1bmN0aW9ucy4KCgkqIG9wdGltaXplLmMgKGlubGluZV9kYXRhKTogUmVtb3ZlIGZuc190b3AuICBBZGQgc2NvcGVfc3RtdC4gIEFkZAoJaW5fdGFyZ2V0X2NsZWFudXBfcC4KCShyZW1hcF9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHJlbWFwX2Jsb2NrKTogTGlrZXdpc2UuCgkoY29weV9zY29wZV9zdG10KTogTGlrZXdpc2UuCgkoY29weV9ib2R5X3IpOiBVc2UgcmVtYXBfZGVjbCBhbmQgY29weV9zY29wZV9zdG10LgoJKGNvcHlfYm9keSk6IFVzZSBWQVJSQVlfVE9QX1RSRUUuCgkoaW5pdGlhbGl6ZV9pbmxpbmVkX3BhcmFtZXRlcnMpOiBMaWtld2lzZS4KCShkZWNsYXJlX3JldHVybl92YXJpYWJsZSk6IExpa2V3aXNlLgoJKGlubGluYWJsZV9mdW5jdGlvbl9wKTogQ2hlY2sgZmxhZ19pbmxpbmVfdHJlZXMuCgkoZXhwYW5kX2NhbGxfaW5saW5lKTogSGFuZGxlIFNDT1BFX1NUTVRzIGFuZCBUQVJHRVRfRVhQUnMKCXNwZWNpYWxseS4gIFVzZSBWQVJSQVlfUFVTSF9UUkVFLiAgQ3JlYXRlIGEgQkxPQ0sgZm9yIHRoZQoJcGFyYW1ldGVycyBvZiB0aGUgaW5saW5lZCBmdW5jdGlvbi4KCShvcHRpbWl6ZV9mdW5jdGlvbik6IFByZXZlbnQgcmVjdXJzaW9uIGludG8gcGFydGlhbGx5IGNvbXBsZXRlCglmdW5jdGlvbnMuCgkKCSogY3AtdHJlZS5kZWYgKFNDT1BFX1NUTVQpOiBUYWtlIG9uZSBvcGVyYW5kLgoJKiBjcC10cmVlLmggKFNDT1BFX1NUTVRfQkxPQ0spOiBOZXcgbWFjcm8uCgkoU0NPUEVfTlVMTElGSUVEX1ApOiBSZWRlZmluZS4KCShTQ09QRV9OT19DTEVBTlVQU19QKTogTmV3IG1hY3JvLgoJKGFkZF9zY29wZV9zdG10KTogQ2hhbmdlIHByb3RvdHlwZS4KCSogZGVjbC5jIChwb3BsZXZlbCk6IFRpZHkuICBXYXJuIGFib3V0IHVudXNlZCB2YXJpYWJsZXMgaGVyZS4KCVJlY29yZCBTQ09QRV9TVE1UX0JMT0NLcy4KCShmaW5pc2hfZnVuY3Rpb24pOiBLZWVwIERFQ0xfSU5JVElBTCBmb3IgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUKCWlubGluZWQuCgkqIGlyLnRleGk6IERvY3VtZW50IFNDT1BFX05PX0NMRUFOVVBTX1AuCgkqIHNlbWFudGljcy5jOiBJbmNsdWRlIHJ0bC5oLgoJKGFkZF9zY29wZV9zdG10KTogUmV0dXJuIHRoZSBuZXcgc2NvcGUgc3RhdGVtZW50IGFuZCwgZm9yIGFuCgllbmQtb2Ytc2NvcGUgc3RhdGVtZW50LCBpdHMgbWF0Y2hpbmcgYmVnaW4gc3RhdGVtZW50LiAgRG9uJ3Qgc2V0CglTQ09QRV9OVUxMSUZJRURfUC4KCShkb19wdXNobGV2ZWwpOiBTaW1wbGlmeSwgbm93IHRoYXQgd2UgYXJlIGFsd2F5cwoJZnVuY3Rpb24tYXQtYS10aW1lLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuICBSZWNvcmQgU0NPUEVfU1RNVF9CTE9DS3MuCgkoZXhwYW5kX3N0bXQpOiBEb24ndCBjYWxsIGV4cGFuZF9zdGFydF9iaW5kaW5ncyBvcgoJZXhwYW5kX2VuZF9iaW5kaW5ncyBmb3IgYSBzY29wZSB3aXRoIFNDT1BFX05PX0NMRUFOVVBTX1Agc2V0LgoJKiB0cmVlLmMgKGNvcHlfdHJlZV9yKTogQ2xlYXIgU0NPUEVfU1RNVF9CTE9DSyByYXRoZXIgdGhhbiBzZXR0aW5nCglTQ09QRV9OVUxMSUZJRURfUC4KCSogTWFrZWZpbGUuaW4gKHNlbWFudGljcy5vKTogRGVwZW5kIG9uIFJUTF9ILgoJCgkqIGRlY2wyLmMgKHBlbmRpbmdfc3RhdGljc191c2VkKTogTWFrZSBpdCBhIG1hY3JvLgoJKHNhdmVkX2lubGluZXNfdXNlZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdGF0aWNfZGF0YV9tZW1iZXJfZGVjbCk6IFVzZSBWQVJSQVlfUFVTSF9UUkVFLgoJKG1hcmtfaW5saW5lX2Zvcl9vdXRwdXQpOiBMaWtld2lzZS4KCShzc2RmX2RlY2xzX3VzZWQpOiBSZW1vdmUuCgkoc3RhcnRfc3RhdGljX3N0b3JhZ2VfZHVyYXRpb25fZnVuY3Rpb24pOiBVc2UgVkFSUkFZX1BVU0hfVFJFRS4KCShnZW5lcmF0ZV9jdG9yX29yX2R0b3JfZnVuY3Rpb24pOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkKMTk5OS0xMS0yNCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BjeWdudXMuY29tPgoJICAgIEdyZWcgTWNHYXJ5ICA8Z2ttQGdudS5vcmc+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlCiAJREVDTF9OT19JTlNUUlVNRU5UX0ZVTkNUSU9OX0VOVFJZX0VYSVQsCiAJREVDTF9OT19DSEVDS19NRU1PUllfVVNBR0UsIERFQ0xfTk9fTElNSVRfU1RBQ0suCgoxOTk5LTEyLTAyICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBIYW5kbGUgcGFyc2UgZXJyb3JzIGJldHRlci4KCjE5OTktMTItMDEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKG1pbl90cmVlX2NvbnMpOiBSZW1vdmUuCgkoc2NyYXRjaF9vdmxfY29ucyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHNhdmVhYmxlX29ic3RhY2spOiBEb24ndCBkZWNsYXJlLgoJKGR1cGxpY2F0ZV9kZWNscyk6IFR3ZWFrIGVycm9yLW1lc3NhZ2UuCgkoaW5pdGlhbGl6ZV9sb2NhbF92YXIpOiBFeHBsaWNpdGx5IG1hcmsgdGhlIGRlZmluaXRpb24gYXMgc3RhdGljLgoJKGZpbmlzaF9mdW5jdGlvbik6IENhbGwgcGVybWFuZW50X2FsbG9jYXRpb24sIGp1c3Qgc28KCXRoYXQgdGhlIG1pZGRsZS1lbmQgc2VlcyB0aGUgb2JzdGFja3MgaXQgZXhwZWN0cy4KCShtYXJrX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9uZXcpOiBEb24ndCB1c2UgbWluX3RyZWVfY29ucy4KCSogbGV4LmMgKHBlcm1hbmVudF9vYnN0YWNrKTogRG9uJ3QgZGVjbGFyZS4KCShjdXJyZW50X29ic3RhY2ssIHNhdmVhYmxlX29ic3RhY2spOiBMaWtld2lzZS4KCSogc3Bldy5jIChjdXJyZW50X29ic3RhY2ssIHNhdmVhYmxlX29ic3RhY2spOiBMaWtld2lzZS4KCSogdHJlZS5jIChjdXJyZW50X29ic3RhY2ssIHNhdmVhYmxlX29ic3RhY2spOiBMaWtld2lzZS4KCShzY3JhdGNoX292bF9jb25zKTogUmVtb3ZlLgoJKGJ1aWxkX21pbl9udCk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShidWlsZF9taW4pOiBMaWtld2lzZS4KCShtaW5fdHJlZV9jb25zKTogUmVtb3ZlCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRG9uJ3QgdXNlIHNjcmF0Y2hfb3ZsX2NvbnMuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfY19jYXN0KTogRG9uJ3QgdXNlIG1pbl90cmVlX2NvbnMuCgkKMTk5OS0xMS0yOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogUm9idXN0aWZ5LgoKMTk5OS0xMS0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogQ2FsbCBleHBhbmRfYm9keSBmb3IgaW5saW5lIGZ1bmN0aW9ucwoJdGhhdCB3aWxsIGJlIHdyaXR0ZW4gb3V0IGJ1dCB0aGF0IGRvIG5vdCB5ZXQgaGF2ZSBSVEwuCgkqIHNlbWFudGljcy5jIChleHBhbmRfYm9keSk6IERvIG5vdCBnZW5lcmF0ZSBSVEwgRm9yIGlubGluZQoJZnVuY3Rpb25zIHRoYXQgZG8gbm90IHlldCBuZWVkIHRvIGJlIHdyaXR0ZW4gb3V0LgoKMTk5OS0xMS0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoQ1hYX1NSQ1MpOiBBZGQgb3B0aW1pemUuYy4gIAoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBBZGQgb3B0aW1pemUuby4KCShDWFhfVFJFRV9IKTogQWRkIHNwbGF5LXRyZWUuaCwgc3lzdGVtLmgsIGFuZCAkKENPTkZJR19IKS4KCShzcGV3Lm8sIGxleC5vLCBkZWNsLm8sIGRlY2wyLm8sIHR5cGVjazIubywgdHlwZWNrLm8pOiBBZGp1c3QuCgkoY2xhc3MubywgY2FsbC5vLCBmcmllbmQubywgaW5pdC5vLCBtZXRob2QubywgY3Z0Lm8pOiBMaWtld2lzZS4KCShzZWFyY2gubywgdHJlZS5vLCBwdHJlZS5vLCBydHRpLm8sIGV4Y2VwdC5vLCBleHByLm8pOiBMaWtld2lzZS4KCSh4cmVmLm8sIHB0Lm8sIGVycm9yLm8sIGVycmZuLm8sIHJlcG8ubywgc2VtYW50aWNzLm8pOiBMaWtld2lzZS4KCShkdW1wLm8pOiBMaWtld2lzZS4KCShvcHRpbWl6ZS5vKTogTmV3IHRhcmdldC4gIAoJKiBjbGFzcy5jOiBEb24ndCBpbmNsdWRlIHNwbGF5LXRyZWUuaC4KCSogY3AtdHJlZS5kZWYgKENUT1JfQ09NUExFVEUpOiBSZW5hbWUgdG8gQ1RPUl9TVE1ULiAgCgkqIGNwLXRyZWUuaDogSW5jbHVkZSBzcGxheS10cmVlLmguCgkoREVDTF9VTklOTElOQUJMRSk6IE5ldyBtYWNyby4KCShDVE9SX0JFR0lOX1AsIENUT1JfRU5EX1ApOiBOZXcgbWFjcm9zLgoJKGZsYWdfaW5saW5lX3RyZWVzKTogTmV3IHZhcmlhYmxlLgoJKGxvY2FsX3ZhcmlhYmxlX3ApOiBOZXcgZnVuY3Rpb24uCgkobm9uc3RhdGljX2xvY2FsX2RlY2xfcCk6IExpa2V3aXNlLgoJKG9wdGltaXplX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoY3BsdXNfdW5zYXZlX2V4cHJfbm93KTogUmVtb3ZlLgoJKGNvcHlfdHJlZV9yKTogRGVjbGFyZS4KCShyZW1hcF9zYXZlX2V4cHIpOiBMaWtld2lzZS4gIAoJKiBkZWNsLmMgKGxvY2FsX3ZhcmlhYmxlX3ApOiBEb24ndAoJbWFrZSBpdCBzdGF0aWMuCgkobG9jYWxfdmFyaWFibGVfcF93YWxrZm4pOiBOZXcgZnVuY3Rpb24uCgkobWFrZV9ydGxfZm9yX2xvY2FsX3N0YXRpYyk6IFJlbW92ZSBjb2RlIHRvIHRyeSB0byBhdm9pZCB3cml0aW5nCglvdXQgc3RhdGljIGNvbnN0YW50cy4KCShlbWl0X2xvY2FsX3Zhcik6IEZpeCBpbmRlbnRhdGlvbi4KCShub25zdGF0aWNfbG9jYWxfZGVjbF9wKTogTmV3IGZ1bmN0aW9uLgoJKGNoZWNrX2RlZmF1bHRfYXJndW1lbnQpOiBVc2UgbG9jYWxfdmFyaWFibGVfcF93YWxrZm4sIG5vdAoJbG9jYWxfdmFyaWFibGVfcCwgd2hlbiB3YWxraW5nIHRoZSB0cmVlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogU2V0IHRoZSBERUNMX0NPTlRFWFQgZm9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCglsYWJlbHMuCgkoZmluaXNoX2NvbnN0cnVjdG9yX2JvZHkpOiBVc2UgQ1RPUl9TVE1UIHRvIG1hcmsgdGhlIGVuZCBvZiBhCgljb25zdHJ1Y3Rvci4gIAoJKiBkZWNsMi5jOiBEb24ndCBpbmNsdWRlIHNwbGF5LXRyZWUuaC4KCShmbGFnX2lubGluZV90cmVlcyk6IERlZmluZS4gIAoJKiBkdW1wLmM6IERvbid0IGluY2x1ZGUKCXNwbGF5LXRyZWUuaC4gIAoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IEZpeCBjb21tZW50IGZvcm1hdHRpbmcuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogU2V0IERFQ0xfQ09OVEVYVCBvbiB0ZW1wb3JhcnkgdmFyaWFibGVzLgoJKGV4cGFuZF90aHJvdyk6IFRpZHkgY29tbWVudC4gIAoJKiBpbml0LmMgKGJ1aWxkX3ZlY19kZWxldGVfMSk6IFVzZSBjcmVhdGVfdGVtcG9yYXJ5X3Zhci4gIAoJKiBsZXguYyAoY3BsdXNfdHJlZV9jb2RlX3R5cGUpOiBNYWtlIGl0IHN0YXRpYy4KCShjcGx1c190cmVlX2NvZGVfbGVuZ3RoKTogTGlrZXdpc2UuCgkoY3BsdXNfdHJlZV9jb2RlX25hbWUpOiBMaWtld2lzZS4gIAoJKiBvcHRpbWl6ZS5jOiBOZXcgZmlsZS4gIAoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2dvdG9fc3RtdCk6IFNldCBERUNMX1VOTElOQUJMRSBmb3IgZnVuY3Rpb25zCgl3aXRoIGNvbXB1dGVkIGdvdG9zLgoJKHNldHVwX3Z0YmxfcHRyKTogTWFyayB0aGUgYmVnaW5uaW5ncyBvZiBjb25zdHJ1Y3RvcnMgd2l0aAoJQ1RPUl9TVE1ULgoJKGV4cGFuZF9zdG10KTogSGFuZGxlIENUT1JfU1RNVCwgbm90IENUT1JfQ09NUExFVEUuCgkoZXhwYW5kX2JvZHkpOiBDYWxsIG9wdGltaXplX2Z1bmN0aW9uLiAgU2F2ZSBib2RpZXMgaWYgd2UncmUgZG9pbmcKCWlubGluaW5nIG9uIHRyZWVzLgoJKiB0cmVlLmM6IERvbid0IGluY2x1ZGUgc3BsYXktdHJlZS5oLiAgSW5jbHVkZSBpbnNuLWNvbmZpZy5oIGFuZAoJaW50ZWdyYXRlLmguCgkoY29weV90cmVlX3IpOiBNYWtlIGl0IHB1YmxpYy4KCShzdGF0ZW1lbnRfY29kZV9wKTogTmV3IGZ1bmN0aW9uLgoJKG1hcmtfbG9jYWxfZm9yX3JlbWFwX3IpOiBMaWtld2lzZS4KCShjcF91c2F2ZV9yKTogTGlrZXdpc2UuCgkoY3BfdW5zYXZlKTogTGlrZXdpc2UuCgkoYnVpbGRfY3BsdXNfbmV3KTogU2V0IERFQ0xfQ09OVEVYVCBmb3IgdGVtcG9yYXJ5IHZhcmlhYmxlcy4KCSh3YWxrX3RyZWUpOiBXYWxrIGludG8gYHMnIGNsYXNzIG5vZGVzLiAgV2FsayBzdGF0ZW1lbnQgY2hhaW5zLgoJKGNvcHlfdHJlZV9yKTogSGFuZGxlICdzJyBjbGFzcyBub2Rlcy4gIFJlc3RvcmUgY2hhaW5zIGZvcgoJc3RhdGVtZW50cy4gIE51bGxpZnkgc2NvcGVzLiAgRG9uJ3QgY29weSB0eXBlcy4KCShpbml0X3RyZWUpOiBTZXQgbGFuZ191bnNhdmUgdG8gY3BfdW5zYXZlLgoJKHJlbWFwX3NhdmVfZXhwcik6IERlZmluZS4KCSogaXIudGV4aTogRG9jdW1lbnQgQ1RPUl9TVE1ULgoJCjE5OTktMTEtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBjYXNleS5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKG5vdGVfZGVidWdfaW5mb19uZWVkZWQpOiBEbyBwZXJmb3JtIHRoaXMgb3B0aW1pemF0aW9uCglmb3IgZHdhcmYyLiAgCgkobWF5YmVfc3VwcHJlc3NfZGVidWdfaW5mbyk6IExpa2V3aXNlLiAgU3RhcnQgYnkgY2xlYXJpbmcKCVRZUEVfREVDTF9TVVBQUkVTU19ERUJVRy4KCjE5OTktMTEtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IENvcHkgVFJFRV9BU01fV1JJVFRFTiBmb3IgVkFSX0RFQ0xzLgoKCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogRG9uJ3QgcHJ1bmUgdnRhYmxlcyBoZXJlLgoKMTk5OS0xMS0yMyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZGVjbC5jIChwdXNoZGVjbCwgZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBjYWxsIGEgdmFyaWFkaWMKCWZ1bmN0aW9uIHdpdGggYSBub24tbGl0ZXJhbCBmb3JtYXQgc3RyaW5nLgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLgoKMTk5OS0xMS0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9ORUVERURfUCk6IFR3ZWFrIHRvIG1hdGNoIGRvY3VtZW50YXRpb24uCgoxOTk5LTExLTIyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5kZWYgKENUT1JfQ09NUExFVEUpOiBOZXcgdHJlZSBub2RlLgoJKiBkZWNsLmMgKGZpbmlzaF9jb25zdHJ1Y3Rvcl9ib2R5KTogQWRkIGl0LCB0byBtYXJrIHRoZSBlbmQgb2YgdGhlCgljb25zdHJ1Y3Rvci4KCShmaW5pc2hfZnVuY3Rpb24pOiBEb24ndCBjYWxsIGVuZF9wcm90ZWN0X3BhcnRpYWxzIGhlcmUuCgkqIGlyLnRleGkgKENUT1JfQ09NUExFVEUpOiBEb2N1bWVudCBpdC4KCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10KTogSGFuZGxlIGl0LgoJCgkqIGNwLXRyZWUuZGVmIChGVU5DVElPTl9OQU1FKTogTmV3IHRyZWUgbm9kZS4KCSogY3AtdHJlZS5oIChjdXJyZW50X2Z1bmN0aW9uX25hbWVfZGVjbGFyZWQpOiBUd2VhayBkb2N1bWVudGF0aW9uLgoJKGxhbmdfZGVjbF9mbGFncyk6IEFkZCBwcmV0dHlfZnVuY3Rpb25fcCwgYWRqdXN0IGR1bW15LgoJKERFQ0xfUFJFVFRZX0ZVTkNUSU9OX1ApOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBIYW5kbGUgZGVjbGFyYXRpb25zIG9mIF9fRlVOQ1RJT05fXywKCWV0Yy4sIGluIGEgdGVtcGxhdGUgZnVuY3Rpb24uICBVc2UgYXRfZnVuY3Rpb25fc2NvcGVfcCBpbnN0ZWFkIG9mCglleHBhbmRpbmcgaXQgaW5saW5lLgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IEhhbmRsZSBERUNMX1BSRVRUWV9GVU5DVElPTl9QIGRlY2xhcmF0aW9ucwoJc3BlY2lhbGx5LgoJKHRzdWJzdCk6IEhhbmRsZSBGVU5DVElPTl9OQU1FLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfZGVjbCk6IFByZXZlbnQgcmVkZWNsYXJhdGlvbnMgb2YgX19QUkVUVFlfRlVOQ1RJT05fXywKCWV0Yy4gaW4gaW5zdGFudGlhdGlvbi4KCSogc2VtYW50aWNzLmMgKGJlZ2luX2NvbXBvdW5kX3N0bXQpOiBEZWNsYXJlIF9fRlVOQ1RJT05fXywgZXRjLiwKCWV2ZW4gaW4gdGVtcGxhdGUgZnVuY3Rpb25zLgoJKHNldHVwX3Z0YmxfcHRyKTogRG9uJ3QgZGVjbGFyZSBfX1BSRVRUWV9GVU5DVElPTiBpbiB0aGUKCWNvbmRpdGlvbmFsIHNjb3BlIGF0IHRoZSB0b3Agb2YgYSBkZXN0cnVjdG9yLgoJCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fZGVjbCk6IFVzZSBgWyB3aXRoIC4uLiBdJyBzeW50YXggZm9yCglzcGVjaWFsaXphdGlvbnMgdG9vLgoKMTk5OS0xMS0yMiAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfdW5hcnlfb3BfZXhwcik6IE9ubHkgc2V0IFRSRUVfTkVHQVRFRF9JTlQKCXdoZW4gYWN0dWFsbHkgbmVnYXRpdmUuCgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEV4cGFuZCBjb21tZW50IGFib3V0CglzdHJhbmdlIE5VTEwgY2hlY2ssIG1vdmVkIGZyb20gLi4uCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiAuLi4gaGVyZS4gUmVtb3ZlIHVubmVlZGVkCgljb2RlLgoKMTk5OS0xMS0yMSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBjcC10cmVlLmggKGJ1aWxkX3ZlY19kZWxldGUpOiBSZW1vdmUgYGF1dG9fZGVsZXRlJyBhcmd1bWVudC4KCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlLCBidWlsZF92ZWNfZGVsZXRlXzEpOiBMaWtld2lzZS4KCUFsd2F5cyBkZXN0cnVjdCB2aXJ0dWFsIGJhc2VzIG9mIGFycmF5IGNvbXBvbmVudHMsIGJ1dCBuZXZlcgoJZGVsZXRlIHRoZW0uCgkoYnVpbGRfdmVjX2luaXQpOiBBZGp1c3QgaW52b2NhdGlvbnMuCgkoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBMaWtld2lzZS4KCjE5OTktMTEtMTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjcC10cmVlLmggKGdyb2tfbWV0aG9kX3F1YWxzKTogUmV0dXJuIHRoaXMgcG9pbnRlciBxdWFsaWZpZXJzLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWRqdXN0IGNhbGxzIHRvIGdyb2tfbWV0aG9kX3F1YWxzLgoJKiBkZWNsMi5jIChncm9rX21ldGhvZF9xdWFscyk6IEFjY2VwdCBgcmVzdHJpY3QnIGFzIGFwcGx5aW5nIHRvCgl0aGUgb2JqZWN0IHBvaW50ZXIuIFJldHVybiBzdWNoIHF1YWxpZmllcnMuCgkoZ3Jva2NsYXNzZm4pOiBBcHBseSB0aGlzIHBvaW50ZXIgcXVhbGlmaWVycy4gQ2xlYW51cCB1bnVzZWQKCXZhcmlhYmxlcy4KCjE5OTktMTEtMTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IEZpeCB0eXBvLgoJKGV4cGFuZF9leGNlcHRpb25fYmxvY2tzKTogU2ltcGxpZnkuICBEb24ndCBjYWxsCglleHBhbmRfbGVmdG92ZXJfY2xlYW51cHMuCgoxOTk5LTExLTE1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AY2FzZXkuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCwgZGVjbC5jIChjb21wdXRlX2FycmF5X2luZGV4X3R5cGUpOiBNYWtlIG5vbnN0YXRpYy4KCSogcHQuYyAodHN1YnN0LCBjYXNlIElOVEVHRVJfVFlQRSk6IENhbGwgaXQuICAKCUNoZWNrIHVzZXNfdGVtcGxhdGVfcGFybXMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogSWYgd2UncmUgYSBsb2NhbCBjbGFzcyBpbiBhIHRlbXBsYXRlCglmdW5jdGlvbiwgYWRkIGEgVEFHX0RFRk4uCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IElmIHRoaXMgaXMgYSBsb2NhbCBjbGFzcyBpbiBhCgl0ZW1wbGF0ZSBmdW5jdGlvbiwgY2FsbCBwdXNodGFnLgoJKHRzdWJzdF9leHByLCBjYXNlIFRBR19ERUZOKTogSGFuZGxlIGNsYXNzZXMsIHRvby4KCglFbWl0IGRlYnVnIGluZm8gd2l0aCB0aGUgdnRhYmxlLgoJKiBzZWFyY2guYyAobWF5YmVfc3VwcHJlc3NfZGVidWdfaW5mbyk6IE5ldyBmdW5jdGlvbi4uLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiAuLi5zcGxpdCBvdXQgZnJvbSBoZXJlLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IE92ZXJyaWRlIFRZUEVfREVDTF9TVVBQUkVTU19ERUJVRwoJaWYgd2UncmUgd3JpdGluZyBvdXQgdGhlIHZ0YWJsZS4KCSogZGVjbC5jLCBzZWFyY2guYyAoZGZzX2RlYnVnX21hcmssIGRmc19kZWJ1Z191bm1hcmtlZF9wLCAKCW5vdGVfZGVidWdfaW5mb19uZWVkZWQpOiAjaWYgMCBvdXQuCgoxOTk5LTExLTE0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChERUNMX0xPQ0FMX0ZVQ05USU9OX1ApOiBOZXcgbWFjcm8uCgkqIGNhbGwuYyAoZXF1YWxfZnVuY3Rpb25zKTogVXNlIERFQ0xfTE9DQUxfRlVDTlRJT05fUCwgbm90CglUUkVFX1BFUk1BTkVOVC4KCSogZGVjbC5jIChwdXNoZGVjbCk6IFNldCBERUNMX0xPQ0FMX0ZVTkNUSU9OX1AuCgkqIGRlY2wyLmMgKGxvb2t1cF9hcmdfZGVwZW5kZW50KTogVXNlIGl0LgoJCgkqIGNwLXRyZWUuaCAoY3BfZmluaXNoX2RlY2wpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGZpbmlzaF9zdGF0aWNfZGF0YV9tZW1iZXJfZGVjbCk6IExpa2V3aXNlLgoJKHB1c2hfcGVybWFuZW50X29ic3RhY2spOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkocHVzaF9leHByZXNzaW9uX29ic3RhY2spOiBMaWtld2lzZS4KCShwdXNoX3NjcmF0Y2hfb2JzdGFjayk6IExpa2V3aXNlLgoJKERFQ0xfVEVNUExBVEVfUEFSTV9QKTogUm9idXN0aWZ5LgoJKFNFVF9ERUNMX1RFTVBMQVRFX1BBUk1fUCk6IE5ldyBtYWNyby4KCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IERvbid0IG1hbmlwdWxhdGUgb2JzdGFja3MuCgkoZmluaXNoX3Z0YmxzKTogTGlrZXdpc2UuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBBZGp1c3QgY2FsbHMgdG8gY3BfZmluaXNoX2RlY2wuCgkqIGRlY2wuYyAoYmluZGluZ19mb3JfbmFtZSk6IERvbid0IG1hbmlwdWxhdGUgb2JzdGFja3MuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBMaWtld2lzZS4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBMaWtld2lzZS4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoJKGltcGxpY2l0bHlfZGVjbGFyZSk6IExpa2V3aXNlLgoJKGJ1aWxkX3R5cGVuYW1lX3R5cGUpOiBMaWtld2lzZS4KCShzdGFydF9kZWNsKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShmaW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKGRlc3Ryb3lfbG9jYWxfc3RhdGljKTogTGlrZXdpc2UuCgkoZXhwYW5kX3N0YXRpY19pbml0KTogTGlrZXdpc2UuCgkoY29tcGxldGVfYXJyYXlfdHlwZSk6IExpa2V3aXNlLgoJKGdyb2t2YXJkZWNsKTogTGlrZXdpc2UuCgkoYnVpbGRfcHRybWVtZm5jX3R5cGUpOiBMaWtld2lzZS4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKHhyZWZfdGFnKTogTGlrZXdpc2UuCgkoeHJlZl9iYXNldHlwZXMpOiBMaWtld2lzZS4KCShzdGFydF9lbnVtKTogTGlrZXdpc2UuCgkoZmluaXNoX2VudW0pOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHN0YXJ0X21ldGhvZCk6IEFkanVzdCBjYWxsIHRvIGNwX2ZpbmlzaF9kZWNsLgoJKiBkZWNsMi5jIChmaW5pc2hfc3RhdGljX2RhdGFfbWVtYmVyX2RlY2wpOiBEb24ndCBtYW5pcHVsYXRlCglvYnN0YWNrcy4KCShncm9rZmllbGQpOiBMaWtld2lzZS4KCShncm9rYml0ZmllbGQpOiBMaWtld2lzZS4KCShnZXRfdGVtcF9uYW1lKTogTGlrZXdpc2UuCgkoZ2V0X3NlbnRyeSk6IExpa2V3aXNlLgoJKGZuaXNoX2ZpbGUpOiBMaWtld2lzZS4KCShsb29rdXBfYXJnX2RlcGVuZGVudCk6IExpa2V3aXNlLgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogTGlrZXdpc2UuCgkocHVzaF9laF9pbmZvKTogTGlrZXdpc2UuCgkoZG9fcG9wX2V4Y2VwdGlvbik6IExpa2V3aXNlLgoJKGluaXRpYWxpemVfaGFuZGxlcl9wYXJtKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogTGlrZXdpc2UuCgkoYWxsb2NfZWhfb2JqZWN0KTogTGlrZXdpc2UuCgkoZXhwYW5kX3Rocm93KTogTGlrZXdpc2UuCgkqIGV4cHIuYyAoZXh0cmFjdF9zY2FsYXJfaW5pdCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX2phdmFfY2xhc3NfcmVmKTogTGlrZXdpc2UuCgkqIGxleC5jIChnZXRfdGltZV9pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoc25hcmZfZGVmYXJnKTogTGlrZXdpc2UuCgkoYWRkX2RlZmFyZ19mbik6IExpa2V3aXNlLgoJKGlzX2dsb2JhbCk6IFNpbXBsaWZ5LgoJKGRvX2lkZW50aWZpZXIpOiBEb24ndCBjaGVjayBUUkVFX1BFUk1BTkVOVC4KCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBEb24ndCBtYW5pcHVsYXRlIG9ic3RhY2tzLgoJKiBwYXJzZS55IChjb25kaXRpb24pOiBBZGp1c3QgY2FsbCB0byBjcF9maW5pc2hfZGVjbC4KCShwcmltYXJ5KTogTGlrZXdpc2UuCgkoaW5pdGRjbCk6IExpa2V3aXNlLgoJKGluaXRkY2wwX2lubmFyZHMpOiBMaWtld2lzZS4KCShub21vZHNfaW5pdGRjbDApOiBMaWtld2lzZS4KCSogcHQuYyAocHVzaF9pbmxpbmVfdGVtcGxhdGVfcGFybXNfcmVjdXJzaXZlKTogVXNlCglTRVRfREVDTF9URU1QTEFURV9QQVJNX1AuCgkocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRG9uJ3QgbWFuaXB1bGF0ZSBvYnN0YWNrcy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IEFkanVzdCBjYWxsIHRvCglmaW5pc2hfc3RhdGljX2RhdGFfbWVtYmVyX2RlY2wuCgkodHN1YnN0X2RlY2wpOiBEb24ndCBtYW5pcHVsYXRlIG9ic3RhY2tzLgoJKHRzdWJzdF9leHByKTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV9kZWNsKTogQWRqdXN0IGNhbGxzIHRvIGNwX2ZpbmlzaF9kZWNsLgoJKiBydHRpLmMgKGNhbGxfdm9pZF9mbik6IERvbid0IG1hbmlwdWxhdGUgb2JzdGFja3MuCgkoZ2V0X3RpbmZvX3Zhcik6IExpa2V3aXNlLgoJKGdldF90aW5mb19mbl91bnVzZWQpOiBMaWtld2lzZS4KCShidWlsZF9keW5hbWljX2Nhc3RfMSk6IExpa2V3aXNlLgoJKGV4cGFuZF9zaV9kZXNjKTogTGlrZXdpc2UuCgkoZXhwYW5kX2NsYXNzX2Rlc2MpOiBMaWtld2lzZS4KCShleHBhbmRfcHRyX2Rlc2MpOiBMaWtld2lzZS4KCShleHBhbmRfYXR0cl9kZXNjKTogTGlrZXdpc2UuCgkoZXhwYW5kX2dlbmVyaWNfZGVzYyk6IExpa2V3aXNlLgoJKHN5bnRoZXNpemVfdGluZm9fZm4pOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfYXNtX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfbmFtZWRfcmV0dXJuX3ZhbHVlKTogTGlrZXdpc2UuCgkoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX3R5cGVvZik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX21ldGhvZF90eXBlKTogTGlrZXdpc2UuCgkocmV2ZXJzZV9wYXRoKTogTGlrZXdpc2UuCgkoY29weV90ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtKTogTGlrZXdpc2UuCgkoYnVpbGRfZXhwcl9wdHJfd3JhcHBlcik6IExpa2V3aXNlLgoJKHB1c2hfZXhwcmVzc2lvbl9vYnN0YWNrKTogUmVtb3ZlLgoJKHB1c2hfcGVybWFuZW50X29ic3RhY2spOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBMaWtld2lzZS4KCQoxOTk5LTExLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2FsbC5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogVXNlIGJ1aWxkX3RhcmdldF9leHByX3dpdGhfdHlwZS4KCShjb252ZXJ0X2xpa2UpOiBMaWtld2lzZS4KCShidWlsZF9vdmVyX2NhbGwpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChidWlsZF90YXJnZXRfZXhwcik6IFJlbW92ZS4KCShidWlsZF90YXJnZXRfZXhwcl93aXRoX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBVc2UgZ2V0X3RhcmdldF9leHByLgoJKiBkZWNsLmMgKGJ1aWxkX3RhcmdldF9leHByKTogTW92ZSB0byAuLi4KCSogdHJlZS5jIChidWlsZF90YXJnZXRfZXhwcik6IEhlcmUuICBNYWtlIGl0IHN0YXRpYy4KCShidWlsZF90YXJnZXRfZXhwcl93aXRoX3R5cGUpOiBOZXcgZnVuY3Rpb24uICBTZXQgREVDTF9DT05URVhUIG9uCgl0aGUgdGVtcG9yYXJ5IFZBUl9ERUNMcy4KCShnZXRfdGFyZ2V0X2V4cHIpOiBVc2UgaXQuCgoxOTk5LTExLTEzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByb3BhZ2F0ZSBERUNMX0RFRkVSX09VVFBVVC4KCSogZGVjbDIuYyAoY29tZGF0X2xpbmthZ2UpOiBTZXQgREVDTF9ERUZFUl9PVVRQVVQuCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuX3VudXNlZCk6IFNwbGl0IG91dCBmcm9tIGdldF90aW5mb19mbi4KCSogY2xhc3MuYyAoc2V0X3J0dGlfZW50cnkpOiBVc2UgaXQuCgoxOTk5LTExLTEyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcl9zdG10KTogRG9uJ3QgY2FsbCBicmVha19vdXRfY2xlYW51cHMKCWhlcmUuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfZXhwcl9zdG10KTogQ2FsbCBpdCBoZXJlIGluc3RlYWQuICBNb3ZlCglkZWZhdWx0X2NvbnZlcnNpb24gbG9naWMgdG8gc2VtYW50aWMtYW5hbHlzaXMgdGltZS4KCjE5OTktMTEtMTIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IFNldCBERUNMX0RFRkVSX09VVFBVVC4KCkZyaSBOb3YgMTIgMTI6NTY6MzIgTVNUIDE5OTkJRGllZ28gTm92aWxsbyA8ZG5vdmlsbG9AY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBSZS1pbnN0YXRlZCBOb3YgMTEgcGF0Y2ggYWZ0ZXIKCWFwcHJvdmFsLgoKRnJpIE5vdiAxMiAxMDo0MjowMiBNU1QgMTk5OQlEaWVnbyBOb3ZpbGxvIDxkbm92aWxsb0BjeWdudXMuY29tPgoKCSogaW5pdC5jIChpbml0X2luaXRfcHJvY2Vzc2luZyk6IFVuZG8gcGF0Y2ggZnJvbSBOb3YgMTEsIDE5OTkuCglQYXRjaCBoYWQgbm90IGJlZW4gYXBwcm92ZWQgeWV0LgoKMTk5OS0xMS0xMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoY29tcHV0ZV9hcnJheV9pbmRleF90eXBlKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbQoJZ3Jva2RlY2xhcmF0b3IuCgkoY3JlYXRlX2FycmF5X3R5cGVfZm9yX2RlY2wpOiBMaWtld2lzZS4KCShncm9rZGVjbGFyYXRvcik6IFVzZSB0aGVtLgoKCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10KTogRG9uJ3Qgc3VzcGVuZF9tb21lbnRhcnkgb3IKCXJlc3VtZV9tb21lbnRhcnkuCgpUaHUgTm92IDExIDEyOjQyOjExIE1TVCAxOTk5CURpZWdvIE5vdmlsbG8gPGRub3ZpbGxvQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGluaXRfaW5pdF9wcm9jZXNzaW5nKTogSGVhZGVyIGluZm9ybWF0aW9uIGZvcgoJYXJyYXlzIGFsbG9jYXRlZCB2aWEgYG5ldycgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50IHVzZWQgYnkKCW1hbGxvYy4KCjE5OTktMTEtMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX25hbWUpOiBEb24ndCBjcmFzaCBpZiBnaXZlbiBhIGZyaWVuZAoJcHNldWRvLWluc3RhbnRpYXRpb24uCgoJKiBjcC10cmVlLmggKGJ1aWxkX2VudW1lcmF0b3IpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBkZWNsLmMgKGVudW1fbmV4dF92YWx1ZSk6IFJlbW92ZS4KCShlbnVtX292ZXJmbG93KTogTGlrZXdpc2UuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCByZWdpc3RlciBlbnVtX25leHRfdmFsdWUgYXMgYSByb290LgoJKHN0YXJ0X2VudW0pOiBDbGVhciBUWVBFX1ZBTFVFUyBmb3IgYSByZWRlZmluZWQgZW51bS4KCShmaW5pc2hfZW51bSk6IFJlc2V0IHRoZSB0eXBlIG9mIGVudW1lcmF0aW9uIGNvbnN0YW50cy4KCShidWlsZF9lbnVtZXJhdG9yKTogRml4IGluZGVudGF0aW9uLiAgRG9uJ3QgY29weSBDT05TVF9ERUNMcyB3aGVuCgl3ZSBkb24ndCBuZWVkIHRvLiAgTWFpbnRhaW4gdGhlIFRZUEVfVkFMVUVTIGxpc3QgYW5kIGxvb2sgdGhlcmUKCWZvciB0aGUgcHJldmlvdXNseSBkZWZpbmVkIGVudW1lcmF0aW9uIGNvbnN0YW50LiAgTGV0IGVudW1lcmF0aW9uCgljb25zdGFudHMgaGF2ZSB0aGUgdHlwZSBvZiB0aGVpciB2YWx1ZXMgdW50aWwgdGhlIGVudW1lcmF0aW9uIHR5cGUKCWlzIGNvbXBsZXRlLgoJKiBwYXJzZS55IChlbnVtbGlzdF9vcHQsIGVudW1saXN0LCBlbnVtZXJhdG9yKTogRG9uJ3QgcmV0dXJuIGEgdmFsdWUuCgkoc3RydWN0c3ApOiBBZGp1c3QuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IEFkanVzdCBhY2NvcmRpbmcgdG8gYnVpbGRfZW51bWVyYXRvciBjaGFuZ2VzLgoJCldlZCBOb3YgMTAgMTI6NDM6MjEgMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgkgICAgICAgICAgICAgICAgICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcC10cmVlLmg6IFRlc3QgYEdDQ19WRVJTSU9OJywgbm90IGBIQVZFX0dDQ19WRVJTSU9OJy4KCjE5OTktMTEtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVtb3ZlIHhfbGFzdF9kdG9yX2luc24gYW5kCgl4X2xhc3RfcGFybV9jbGVhbnVwX2luc24uCgkqIGRlY2wuYyAobGFzdF9kdG9yX2luc24pOiBSZW1vdmUuCgkobGFzdF9wYXJtX2NsZWFudXBfaW5zbik6IExpa2V3aXNlLgoJKGV4cGFuZF9zdGFydF9lYXJseV90cnlfc3RtdHMpOiBEb24ndCBzZXQgdGhlbS4KCShzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoc2F2ZV9mdW5jdGlvbl9kYXRhKTogT3Igc2F2ZSB0aGVtLgoJKG1hcmtfbGFuZ19mdW5jdGlvbik6IE9yIG1hcmsgdGhlbS4KCjE5OTktMTEtMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBHZW5lcmF0ZSBjbGVhbnVwIGNvZGUgYXQKCXNlbWFudGljLWFuYWx5c2lzIHRpbWUuICBEZXN0cm95IG9iamVjdHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCgoxOTk5LTExLTA3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChiZWdpbl9uZXdfcGxhY2VtZW50KTogUmVtb3ZlLgoJKGZpbmlzaF9uZXdfcGxhY2VtZW50KTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHN1c3BlbmRfbW9tZW50YXJ5IG9yCglyZXN1bWVfbW9tZW50YXJ5LgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkobWF5YmVfYnVpbGRfY2xlYW51cF8xKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2NsZWFudXApOiBMaWtld2lzZS4KCShidWlsZF90ZXJtaW5hdGVfaGFuZGxlcik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHBhcnNlX2RlY2wpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGluaXRkZWNscywgbm90eXBlX2luaXRkZWNscywgaW5pdGRjbCk6IERvbid0IHJldHVybiBpbnQuCgkoaW5pdGRjbDAsIG5vdHlwZV9pbml0ZGNsMCwgaW5pdGRjbDBfaW5uYXJkcyk6IExpa2V3aXNlLgoJKC5iZWdpbl9uZXdfcGxhY2VtZW50KTogUmVtb3ZlLgoJKC5maW5pc2hfbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKG5vbm1vbWVudGFyeV9leHByKTogTGlrZXdpc2UuCgkoc3VzcGVuZF9tb20pOiBMaWtld2lzZS4KCShjb25kaXRpb24pOiBEb24ndCBzdXNwZW5kX21vbWVudGFyeSwgcmVzdW1lX21vbWVudGFyeSwgb3Iga2VlcAoJdHJhY2sgb2YgbmVlZCB0byByZXN1bWUuCgkodW5hcnlfZXhwcik6IExpa2V3aXNlLgoJKG5ld19wbGFjZW1lbnQpOiBMaWtld2lzZS4KCShkZWNsKTogTGlrZXdpc2UuCgkoc3RydWN0c3ApOiBMaWtld2lzZS4KCShuZXdfdHlwZV9pZCk6IExpa2V3aXNlLgoJKG1heWJlX3Bhcm1saXN0KTogTGlrZXdpc2UuCgkoZGlyZWN0X2FmdGVyX3R5cGVfZGVjbGFyYXRpb24pOiBMaWtld2lzZS4KCShkaXJlY3RfbmV3X2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShkaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRpb24pOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogRG9uJ3Qgc3VzcGVuZF9tb21lbnRhcnkgb3IgcmVzdW1lX21vbWVudGFyeS4KCSogc2VtYW50aWNzLmMgKGJlZ2luX25ld19wbGFjZW1lbnQpOiBSZW1vdmUuCgkoZmluaXNoX25ld19wbGFjZW1lbnQpOiBMaWtld2lzZS4KCQoxOTk5LTExLTA1ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBjcC10cmVlLmggKFZBUl9URU1QTF9UWVBFX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0spOiBOZXcgbWFjcm8uCgkoREVDTF9URU1QTEFURV9JTkZPKTogVXNlIGl0LgoJKiBkZWNsLmMgKHdhcm5fZXh0ZXJuX3JlZGVjbGFyZWRfc3RhdGljKTogRG8gbm90aGluZyBmb3IKCVRFTVBMQVRFX0RFQ0xzLgoJKiBkZWNsMi5jIChtYXJrX3VzZWQpOiBFeHBsaWNpdGx5IGNoZWNrIGZvciBmdW5jdGlvbiBvciB2YXJpYWJsZS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF91bmFyeV9vcF9leHByKTogQ2hlY2sgd2hldGhlciByZXN1bHQgaXMgYWxzbwoJYW4gSU5URUdFUl9DU1QuCgoxOTk5LTExLTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKHR5cGVjazIubyk6IERlcGVuZCBvbiBvdXRwdXQuaC4KCSogdHlwZWNrMi5jOiBJbmNsdWRlIG91dHB1dC5oLgoKCSogZGVjbC5jIChmbGFnX2Fuc2kpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgoJKiBwdC5jICh0aW5zdF9sZXZlbF90aWNrKTogTWFrZSBpdCBzdGF0aWMuCgkobGFzdF90ZW1wbGF0ZV9lcnJvcl90aWNrKTogTGlrZXdpc2UuCgkKCSogY3AtdHJlZS5oIChtYXBjYXIpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkoc2VhcmNoX3RyZWUpOiBMaWtld2lzZS4KCSh3YWxrX3RyZWVfZm4pOiBOZXcgdHlwZWRlZi4KCSh3YWxrX3RyZWUpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuYyAoYm90X21hbmlwKTogQ2hhbmdlIHByb3RvdHlwZS4gIEFkanVzdCB0byBiZSBjYWxsZWQgdmlhCgl3YWxrX3RyZWUuCgkoYm90X3JlcGxhY2UpOiBMaWtld2lzZS4KCShub19saW5rYWdlX2hlbHBlcik6IExpa2V3aXNlLgoJKGNvcHlfdHJlZV9yKTogTmV3IGZ1bmN0aW9uLgoJKHNlYXJjaF90cmVlKTogUmVuYW1lLCBhbmQgYWRqdXN0LCB0byBiZWNvbWUgLi4uCgkod2Fsa190cmVlKTogTmV3IGZ1bmN0aW9uLgoJKG1hcGNhcik6IFJlbW92ZS4KCSh0YXJnZXRfcmVtYXApOiBSZW1vdmUuCgkodGFyZ2V0X3JlbWFwX2NvdW50KTogTGlrZXdpc2UuCgkoYnJlYWtfb3V0X3RhcmdldF9leHBycyk6IFVzZSB3YWxrX3RyZWUuCgkqIGRlY2wuYyAobG9jYWxfdmFyaWFibGVfcCk6IENoYW5nZSBwcm90b3R5cGUuCgkoY2hlY2tfZGVmYXVsdF9hcmd1bWVudCk6IFVzZSB3YWxrX3RyZWUuCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm1fcik6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gLi4uCgkoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IEhlcmUuICBVc2UgaXQsIHZpYSB3YWxrX3RyZWUuCgkKMTk5OS0xMS0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNsYXNzLmMgKGNoZWNrX2JpdGZpZWxkX2RlY2wpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tCglmaW5pc2hfc3R1Y3RfMS4KCShjaGVja19maWVsZF9kZWNsKTogTGlrZXdpc2UuICBSZWN1cnNpdmVseSBleGFtaW5lIG1lbWJlcnMgb2YKCWFub255bW91cyBzdHJ1Y3RzLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IFVzZSB0aGVtLgoJKiBjcC10cmVlLmggKEFOT05fVU5JT05fVFlQRV9QKTogTmV3IG1hY3JvLgoJCjE5OTktMTEtMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBSZW1vdmUgZGVhZCBjb2RlLgoKCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogRml4IHRoaW5rbyBmb3IgY2F0Y2gtY2xhdXNlcy4KCjE5OTktMTEtMDIgIFNjb3R0IFNueWRlciAgPHNueWRlckBmbmFsLmdvdj4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogSGFuZGxlIFJFQUxQQVJUX0VYUFIgYW5kCglJTUFHUEFSVF9FWFBSLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoKMTk5OS0xMS0wMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobWF5YmVfbWFrZV9vbmVfb25seSk6IEFsd2F5cyBtYWtlIHRoaW5ncyBjb21kYXQgb24KCUVMRiB0YXJnZXRzLCB0b28uCgoxOTk5LTEwLTMxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBDYWxsIGZyZWVfYWZ0ZXJfcGFyc2luZyBmb3IgZnVuY3Rpb25zCgl3ZSBhcmUgbm90IGltbWVkaWF0ZWx5IHR1cm5pbmcgaW50byBSVEwuCgoxOTk5LTEwLTMxICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChmbGFnX2R1bXBfdHJhbnNsYXRpb25fdW5pdCk6IEFkZCBkZWNsLgoKU2F0IE9jdCAzMCAyMjo0Mjo1MCAxOTk5ICBTdGVwaGVuIEwgTW9zaGllciA8bW9zaGllckBtZWRpYW9uZS5uZXQ+CgoJKiBsZXguYyAoeXlsZXgpOiBBY2NlcHQgJ2YnIGluIG1hbnRpc3NhIG9mIGhleCBmbG9hdCBjb25zdGFudC4KCjE5OTktMTAtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3QgY2FsbCBmcmVlIG9uIGEgTlVMTAoJcG9pbnRlci4KCSogc2VtYW50aWNzLmM6IEluY2x1ZGUgZ2djLmguCgkoZXhwYW5kX2JvZHkpOiBEbyBnYXJiYWdlLWNvbGxlY3Rpb24gYWZ0ZXIgcHJvY2Vzc2luZyBhIHRlbXBsYXRlCglmdW5jdGlvbi4gIENsZWFyIERFQ0xfU0FWRURfVFJFRSBhZnRlciBnZW5lcmF0aW5nIFJUTCBmb3IgYQoJZnVuY3Rpb24uCgkqIE1ha2VmaWxlLmluIChzZW1hbnRpY3Mubyk6IERlcGVuZCBvbiBnZ2MuaC4KCQoxOTk5LTEwLTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IE9ubHkgY29tcGxhaW4gaWYgc28gcmVxdWVzdGVkLgoJKiBwYXJzZS55IChuZXN0ZWRfbmFtZV9zcGVjaWZpZXIpOiBBZGp1c3QgY2FsbHMuCgkodHlwZW5hbWVfc3ViMCk6IExpa2V3aXNlLgoJKHR5cGVuYW1lX3N1YjEpOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKGNvbnZlcnRfdGVtcGxhdGVfYXJndW1lbnQpOiBQYXNzIGNvbXBsYWluIHRvCgltYWtlX3R5cGVuYW1lX3R5cGUuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkKMTk5OS0xMC0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfaGFuZGxlcik6IEVuZCB0aGUgc2NvcGUgb2YgdGhlIGhhbmRsZXIKCWJlZm9yZSBhdHRhY2hpbmcgaXQgdG8gdGhlIHN0YXRlbWVudC10cmVlLgoKMTk5OS0xMC0yOCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkB6ZW1idS5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdF8xKTogR2l2ZSBhIGJldHRlciBlcnJvciBtZXNzYWdlIGZvcgoJYW4gYXR0ZW1wdCB0byBkeW5hbWljX2Nhc3QgZnJvbSBhIG5vbi1wb2x5bW9ycGhpYyB0eXBlLgoKMTk5OS0xMC0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobWFrZV90ZW1wX3ZlYyk6IFJlbW92ZS4KCShtYWtlX3NjcmF0Y2hfdmVjKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFVzZSBtYWtlX3RyZWVfdmVjLgoJKGFkZF9jb252X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZV9yZWFsKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBmb29sIHdpdGggdGhlIG1vbWVudGFyeSBvYnN0YWNrLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9kaXJlY3RfdnRibHNfaW5pdCk6IExpa2V3aXNlLgoJKGJlZ2luX2luaXRfc3RtdHMpOiBMaWtld2lzZS4KCShmaW5pc2hfaW5pdF9zdG10cyk6IExpa2V3aXNlLgoJKiBwdC5jIChhZGRfdG9fdGVtcGxhdGVfYXJncyk6IFVzZSBtYWtlX3RyZWVfdmVjLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRG9uJ3QgZm9vbCB3aXRoIHRoZSBtb21lbnRhcnkgb2JzdGFjay4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKHRzdWJzdF90ZW1wbGF0ZV9hcmdfdmVjdG9yKTogVXNlIG1ha2VfdHJlZV92ZWMuCgkodHN1YnN0X2FnZ3JfdHlwZSk6IERvbid0IGZvb2wgd2l0aCB0aGUgbW9tZW50YXJ5IG9ic3RhY2suCgkodHN1YnN0X2RlY2wpOiBMaWtld2lzZS4gIFVzZSBtYWtlX3RyZWVfdmVjLgoJKHRyeV9vbmVfb3ZlcmxvYWQpOiBMaWtld2lzZS4KCSh0cnlfY2xhc3NfdW5pZmljYXRpb24pOiAgRG9uJ3QgZm9vbCB3aXRoIHRoZSBtb21lbnRhcnkgb2JzdGFjay4KCShnZXRfYmluZGluZ3NfcmVhbCk6IFVzZSBtYWtlX3RyZWVfdmVjLgoJKHNldF9tYW5nbGVkX25hbWVfZm9yX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogRG9uJ3QgZm9vbCB3aXRoIHRoZSBtb21lbnRhcnkgb2JzdGFjay4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9leHByX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfZG9fc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfZXhwcik6IExpa2V3aXNlLgoJKGZpbmlzaF9zd2l0Y2hfY29uZCk6IExpa2V3aXNlLgoJKGRvX3B1c2hsZXZlbCk6IExpa2V3aXNlLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAobWFrZV90ZW1wX3ZlYyk6IFJlbW92ZS4KCQoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBEdW1wIEhBTkRMRVJzIGFuZCBTQVZFX0VYUFJzLiAgRHVtcAoJQ0xFQU5VUF9QIGZvciBhIFRSWV9CTE9DSy4KCSogaXIudGV4aTogRG9jdW1lbnQgU0FWRV9FWFBSLgoKVHVlIE9jdCAyNiAyMzoyOTo1NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6ICBDaGVjayB0aGF0IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBpcwoJb2YgY2xhc3MgQlVJTFRfSU5fTk9STUFMIGJlZm9yZSB0cnlpbmcgdG8gcmVjb25naXplIGl0IGFzIEJVSUxUX0lOX0FCUy4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IFNpbWlsYXJseS4gCgoxOTk5LTEwLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IERvbid0IHNldCBCTE9DS19UWVBFX1RBR1MuICBEb24ndCBjYWxsCglyZW1lbWJlcl9lbmRfbm90ZS4KCjE5OTktMTAtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsXzEpOiBVc2UgcHVzaGRlY2wuCgkKCSogZGVjbC5jIChhdXRvX2Z1bmN0aW9uKTogUmVwbGFjZSAjaWZkZWYnZCBfX2lubGluZSB3aXRoIGp1c3QKCXBsYWluIGlubGluZS4KCSogbGV4LmMgKG15X2dldF9ydW5fdGltZSk6IExpa2Vpc2UuCgkoeXlwcmludCk6IExpa2V3aXNlLgoJKGlkZW50aWZpZXJfdHlwZSk6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoc3RhcnRfc3F1YW5nbGluZyk6IExpa2V3aXNlLgoJKGVuZF9zcXVhbmdsaW5nKTogTGlrZXdpc2UuCgkoaWNhdCk6IExpa2V3aXNlLgoJKG9sZF9iYWNrcmVmX2luZGV4KTogTGlrZXdpc2UuCgkoZmx1c2hfcmVwZWF0cyk6IExpa2V3aXNlLgoJKGlzc3VlX2t0eXBlKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGVtcHR5X3Bhcm1zKTogTGlrZXdpc2UuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJCjE5OTktMTAtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBSZXBsYWNlIHNldmVyYWwgdXNlcyBvZgoJcXVldWVfYW5kX2R1bXBfaW5kZXggd2l0aCBkdW1wX2NoaWxkLgoKMTk5OS0xMC0yMSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhwci5jOiBJbmNsdWRlIHRtX3AuaC4KCjE5OTktMTAtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKFNDT1BFX1BBUlRJQUxfUCk6IE5ldyBtYWNyby4KCShwdXNobGV2ZWxfdGVtcG9yYXJ5KTogUmVtb3ZlLgoJKGFkZF9zY29wZV9zdG10KTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKHB1c2hsZXZlbF90ZW1wb3JhcnkpOiBSZW1vdmUuCgkocG9wbGV2ZWwpOiBVc2UgYWRkX3Njb3BlX3N0bXQuCgkoc3RhcnRfZGVjbF8xKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChhZGRfc2NvcGVfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCShkb19wdXNobGV2ZWwpOiBVc2UgaXQuCgkoZG9fcG9wbGV2ZWwpOiBVc2UgaXQuCgkoZXhwYW5kX3N0bXQpOiBDaGVjayBTQ09QRV9QQVJUSUFMX1AuCgkKCSogY3AtdHJlZS5kZWYgKEVNUFRZX0NMQVNTX0VYUFIpOiBOZXcgdHJlZSBub2RlLgoJKiBjYWxsLmMgKGJ1aWxkX2NhbGwpOiBVc2UgRU1QVFlfQ0xBU1NfRVhQUiBpbnN0ZWFkIG9mIFJUTF9FWFBSLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogRXhwYW5kIGl0LgoJKiBpci50ZXhpOiBEb2N1bWVudCBFTVBUWV9DTEFTU19FWFBSLgoJCjE5OTktMTAtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKERFQ0xfTkFNRVNQQUNFX1NDT1BFX1ApOiBEb24ndCB0cmVhdCB0ZW1wbGF0ZQoJcGFyYW1ldGVycyBhcyBoYXZpbmcgbmFtZXNwYWNlIHNjb3BlLgoKMTk5OS0xMC0xOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIG1ldGhvZC5jIChQQVJNX0NBTl9CRV9BUlJBWV9UWVBFKTogUmVtb3ZlLgoJKG1hbmdsaW5nX2ZsYWdzKTogTmV3IHR5cGUuCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogQ2hhbmdlIHByb3RvdHlwZS4KCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IExpa2V3aXNlLgoJKG51bWVyaWNfb3V0cHV0X25lZWRfYmFyKTogSW1wcm92ZSBjb21tZW50LgoJKG1hbmdsZV9leHByZXNzaW9uKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IGZyb20gLi4uCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogSGVyZS4KCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IEFkanVzdCBmb3IgdXNlIG9mIG1hbmdsaW5nIGZsYWdzLiAgRG9uJ3QKCXdhcm4gYWJvdXQgcmVhbC12YWx1ZWQgdGVtcGxhdGUgcGFyYW1ldGVycyBoZXJlLiAgRG8gaGFuZGxlCgljb21wbGV4IGV4cHJlc3Npb25zIGludm9sdmluZyByZWFsLXZhbHVlZCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKGJ1aWxkX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBFbmNhc2Ugbm9uLXR5cGUgdGVtcGxhdGUgcGFyYW1ldGVycwoJaW4gdW5kZXJzY29yZXMsIGlmIG5lY2Vzc2FyeS4KCShwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBSZW1vdmUgY29uZGl0aW9uYWwgb24KCVBBUk1fQ0FOX0JFX0FSUkFZX1RZUEUuCgoxOTk5LTEwLTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogSGFuZGxlIENMRUFOVVBfUE9JTlRfRVhQUi4KCgkqIGlyLnRleGk6IENsZWFuIHVwIGRvY3VtZW50YXRpb24gb2YgUkVUVVJOX0lOSVQuCgkKMTk5OS0xMC0xNSAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCgkqIGxleC5jIChsYW5nX2luaXRfb3B0aW9ucyk6IFNldCBmbGFnX2JvdW5kc19jaGVjayBhcyAidW5zcGVjaWZpZWQiLgoJKGxhbmdfaW5pdCk6IFNldCBkZWZhdWx0IGZvciBmbGFnX2JvdW5kc19jaGVjayBpZiBzdGlsbCAidW5zcGVjaWZpZWQiLgoKMTk5OS0xMC0xMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBGb3JjZSBhbGlnbm1lbnQgb2Ygbm9uLWJpdGZpZWxkcyB0bwoJQklUU19QRVJfVU5JVC4KCldlZCBPY3QgMTMgMjI6MDE6MzUgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBIYW5kbGUgZW1wdHkgY29uc3RydWN0b3JzLgoKMTk5OS0xMC0xMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsYW5nX21hcmtfdHJlZSk6IE1hcmsgTkFNRVNQQUNFX0xFVkVMLgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIElOVEVHRVJfVFlQRSk6IEJlIG1vcmUgZXhwbGljaXQgaW4gemVyby1zaXplCglhcnJheSBlcnJvci4KCjE5OTktMTAtMTMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKG1ha2VfcnRsX2Zvcl9sb2NhbF9zdGF0aWMpOiBEb24ndCBjcmVhdGUgcmVnaXN0ZXIgUlRMCglmb3IgYWRkcmVzc2FibGUgY29uc3RhbnRzLgoKMTk5OS0xMC0xMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfeF92YV9hcmcpOiBQcm90b3R5cGUgbmV3IGZ1bmN0aW9uLgoJKiBjYWxsLmMgKGJ1aWxkX3hfdmFfYXJnKTogRGVmaW5lIGl0LgoJKiBwYXJzZS55ICh1bmFyeV9leHByKTogQ2FsbCBidWlsZF94X3ZhX2FyZy4KCQoJKiBjcC10cmVlLmggKGNvbnZlcnRfdHlwZV9mcm9tX2VsbGlwc2lzKTogUHJvdG90eXBlIG5ldyBmdW5jdGlvbi4KCSogY2FsbC5jIChjb252ZXJ0X3R5cGVfZnJvbV9lbGxpcHNpcyk6IERlZmluZSBpdC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCBsYW5nX3R5cGVfcHJvbW90ZXNfdG8uCgoJKiB0cmVlLmMgKGx2YWx1ZV9wXzEpOiBBY2NlcHQgVkFfQVJHX0VYUFIgd2l0aCBhZ2dyZWdhdGVzLgoKMTk5OS0xMC0xMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZml4ZWRfdHlwZV9vcl9udWxsKTogQWx3YXlzIHNldCAqbm9ubnVsbC4KCjE5OTktMTAtMTAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLXRyZWUuaDogVXNlIEhBVkVfR0NDX1ZFUlNJT04gaW5zdGVhZCBvZiBleHBsaWNpdGx5IHRlc3RpbmcKCV9fR05VQ19fIGFuZCBfX0dOVUNfTUlOT1JfXy4KCjE5OTktMTAtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKG1ha2VfcnRsX2Zvcl9sb2NhbF9zdGF0aWMpOiBOZXcgZnVuY3Rpb24uICAKCSogZGVjbC5jIChtYWtlX3J0bF9mb3Jfbm9ubG9jYWxfZGVjbCk6IE1vdmUgY29kZSB0byBjcmVhdGUgUlRMIGZvcgoJbG9jYWwgc3RhdGljcyAuLi4KCShtYWtlX3J0bF9mb3JfbG9jYWxfc3RhdGljKTogSGVyZS4KCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10KTogVXNlIG1ha2VfcnRsX2Zvcl9sb2NhbF9zdGF0aWMuCgkKMTk5OS0xMC0wOCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWV0aG9kLmM6IEluY2x1ZGUgdG1fcC5oLgoKMTk5OS0xMC03ICAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogY3AtdHJlZS5oIChjcF9tYWtlX2xha2VfdHlwZSk6IFJlbmFtZWQgZnJvbSBtYWtlX2xhbmdfdHlwZS4KCSogbGV4LmMgKGNwX21ha2VfbGFrZV90eXBlKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoaW5pdF90cmVlKTogSW5pdCBtYWtlX2xhbmdfdHlwZV9mbi4KCQoxOTk5LTEwLTA3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBTZXQgREVDTF9URU1QTEFURV9JTlNUQU5USUFURUQgZm9yIGEgY2F0Y2gKCXBhcmFtdGVyLgoJCgkqIHNlbWFudGljcy5jIChleHBhbmRfc3RtdCk6IERvbid0IHByZXRlbmQgdG8gaGF2ZSBhc21zcGVjcyBmb3IKCWxvY2FsIHN0YXRpY3MgaWYgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdGhlbS4KCgkqIGlyLnRleGk6IEltcHJvdmUgZG9jdW1lbnRhdGlvbiBmb3IgU1RNVF9FWFBSLiAgRGVzY3JpYmUKCUNMRUFOVVBfUE9JTlRfRVhQUi4KCjE5OTktMTAtMDcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeV9yZWYpOiBVc2UgZmluaXNoX2FzbV9zdG10LgoKMTk5OS0xMC0wNyAgR3JlZyBNY0dhcnkgIDxna21AZ251Lm9yZz4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFVzZSBzaW1wbGVyIG1ldGhvZCBvZgoJcmVtb3ZpbmcgZWxlbWVudHMgb2YgYSBzaW5nbHktbGlua2VkIGxpc3Qgd2hpY2ggZG9lc24ndAoJbG9zZSBmb3IgY2xhc3NlcyB3aXRob3V0IGRhdGEgbWVtYmVycy4KCjE5OTktMTAtMDcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBmcmllbmQuYyAobWFrZV9mcmllbmRfY2xhc3MpOiBSb2J1c3RpZnkuCgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX29iamVjdF9jYWxsX2V4cHIpOiBSZWplY3QgY2FsbHMgdG8gdGVtcGxhdGUKCXR5cGVzLgoKMTk5OS0xMC0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGR1bXAuYyAoZGVxdWV1ZV9hbmRfZHVtcCk6IER1bXAgYWxsIHRocmVlIG9wZXJhbmRzIHRvIGEgQ09ORF9FWFBSLgoKCSogY3AtdHJlZS5oIChDTEFTU1RZUEVfVkZJRUxEKTogUmVtb3ZlLgoJKiBjYWxsLmMgKGJ1aWxkX3ZmaWVsZF9yZWYpOiBVc2UgVFlQRV9WRklFTEQsIG5vdAoJQ0xBU1NUWVBFX1ZGSUVMRC4KCSogY2xhc3MuYyAoZ2V0X3ZmaWVsZF9vZmZzZXQpOiBMaWtld2lzZS4KCShmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBMaWtld2lzZS4KCShtb2RpZnlfb25lX3Z0YWJsZSk6IExpa2V3aXNlLgoJKGZpeHVwX3Z0YWJsZV9kZWx0YXMpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfdmlydHVhbF9pbml0KTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfMSk6IExpa2V3aXNlLgoJKGV4cGFuZF91cGNhc3RfZml4dXBzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgoJCgkqIGR1bXAuYyAoZHF1ZXVlX2FuZF9kdW1wKTogRHVtcCBUWVBFX1ZGSUVMRC4KCSogaXIudGV4aTogRG9jdW1lbnQgVFlQRV9WRklFTEQuCgoxOTk5LTEwLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IE9ubHkgd2FybiBhYm91dCBub24temVybyBhcnJheXMgaWYKCSFpbl9zeXN0ZW1faGVhZGVyIChsaW51eCBzb2NrZXRiaXRzLmggY2FuIGdpdmUgdGhpcyBmb3IKCV9fY21zZ19kYXRhLCB3aGljaCBpcyB1c2luZyBhIEdOVSBleHRlbnNpb24pLgoKMTk5OS0xMC0wNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wyLmMgKHN0YXJ0X3N0YXRpY19zdG9yYWdlX2R1cmF0aW9uX2Z1bmN0aW9uKTogUHVzaCB0aGUKCWZ1bmN0aW9uIGRlY2xhcmF0aW9uIHNvIGl0IGVuZHMgdXAgaW4gbmFtZXNwYWNlIHNjb3BlLgoKCSogZHVtcC5jIChEVU1QX0NISUxEUkVOKTogUmVtb3ZlLgoJKERVTVBfQklORk8pOiBBZGp1c3QuCgkoc3RydWN0IGR1bXBfbm9kZV9pbmZvKTogUmVtb3ZlIGR1bXBfY2hpbGRyZW5fcC4KCShxdWV1ZV9hbmRfZHVtcF90eXBlKTogUmVtb3ZlIGR1bXBfY2hpbGRyZW5fcCBwYXJhbWV0ZXIuCgkocXVldWUpOiBEb24ndCBzZXQgZHVtcF9jaGlsZHJlbl9wLgoJKGR1bXBfY2hpbGQpOiBQYXNzIERVTVBfTk9ORSwgaW5zdGVhZCBvZiBEVU1QX0NISUxEUkVOLCB0bwoJcXVldWVfYW5kX2R1bXBfaW5kZXguCgkoZGVxdWV1ZV9hbmRfZHVtcCk6IFVuY29uZGl0aW9uYWxseSBwcmludCBjaGlsZHJlbi4gIEFkanVzdCBjYWxscwoJdG8gZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZS4KCShkdW1wX25vZGUpOiAgUGFzcyBEVU1QX05PTkUsIGluc3RlYWQgb2YgRFVNUF9DSElMRFJFTiB0byBxdWV1ZS4KCQoJKiBpci50ZXhpOiBEb2N1bWVudCBCSU5EX0VYUFIsIExPT1BfRVhQUiwgYW5kIEVYSVRfRVhQUi4KCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogRHVtcCB0aGVtLgoJCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IENhbGwgc2V0dXBfdnRibF9wdHIgZm9yIGRlc3RydWN0b3JzLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFNldCBjdXJyZW50X2luX2NoYXJnZV9wYXJtIGZvcgoJY29uc3RydWN0b3JzLCB0b28sIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBzZWFyY2guYyAoZml4dXBfYWxsX3ZpcnR1YWxfdXBjYXN0X29mZnNldHMpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2luZGlyZWN0X3Z0YmxzX2luaXQpOiBVc2UgaXQuCgkKMTk5OS0xMC0wNCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGRlY2wyLmMgKGdyb2tfYWxpZ25vZik6IERvbid0IGRlY2F5IGx2YWx1ZXMuCgkKCSogaW5pdC5jIChidWlsZF9uZXcpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKMTk5OS0xMC0wNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVtb3ZlIHN0YXRpY19sYWJlbG5vLgoJKHN0YXRpY19sYWJlbG5vKTogUmVtb3ZlIG1hY3JvLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBNYWtlIHN0YXRpY19sYWJlbG5vCglzdGF0aWMgaGVyZS4KCQoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogVXNlIERFQ0xfU0FWRURfVFJFRSwgbm90IERFQ0xfSU5JVElBTCwKCXRvIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCBhIGZ1bmN0aW9uIGlzIGRlZmluZWQuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvbid0IHNldCBUUkVFX1NJREVfRUZGRUNUUyBmb3IKCXNpdHVhdGlvbnMgd2hlcmUgbWFrZV9ub2RlIHdpbGwgZG8gaXQgYXV0b21hdGljYWxseS4KCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX3N0YXRpY19pbml0KTogTGlrZXdpc2UuCgkoZG9fc3RhdGljX2luaXRpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkqIGluaXQuYyAocGVyZm9ybV9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9hZ2dyX2luaXRfMSk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld18xKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCgkoZG9fYnVpbGRfYXNzaWduX3JlZik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBMaWtld2lzZS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9zdG10X2V4cHIpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkoY2hlY2tfcmV0dXJuX2V4cHIpOiBMaWtld2lzZS4KCjE5OTktMTAtMDQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZV8xKTogRm9sZCBDT05EX0VYUFJzLgoKMTk5OS0xMC0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuZGVmIChWRUNfSU5JVF9FWFBSKTogUmVtb3ZlLgoJKiBjcC10cmVlLmggKHN0cnVjdCBzdG10X3RyZWUpOiBOZXcgdHlwZS4KCShzdHJ1Y3Qgc2F2ZWRfc2NvcGUpOiBSZW1vdmUgZmlyc3RvYmouICBBZGQgeF9zYXZlZF90cmVlLAoJeF9zdG10X3RyZWUuCgkoY2xhc3NfY2FjaGVfZmlyc3RvYmopOiBSZW1vdmUuCgkoc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVtb3ZlIHN0bXRzX2FyZV9mdWxsX2V4cHJzX3AsCgl4X2xhc3RfdHJlZSwgYW5kIHhfbGFzdF9leHByX3R5cGUuICBBZGQgeF9zdG10X3RyZWUuCgkoY3VycmVudF9zdG10X3RyZWUpOiBOZXcgbWFjcm8uCgkobGFzdF90cmVlKTogQWRqdXN0LgoJKGxhc3RfZXhwcl90eXBlKTogTGlrZXdpc2UuCgkoZG9pbmdfc2VtYW50aWNfYW5hbHlzaXNfcCk6IFNpbXBsaWZ5LgoJKHN0bXRzX2FyZV9mdWxsX2V4cHJzX3ApOiBBZGp1c3QuCgkoYmVnaW5fdHJlZSk6IFJlbW92ZSBwcm90b3R5cGUuCgkoZW5kX3RyZWUpOiBMaWtld2lzZS4KCShiZWdpbl9zdG10X3RyZWUpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGZpbmlzaF9zdG10X3RyZWUpOiBMaWtld2lzZS4KCShidWlsZGluZ19zdG10X3RyZWUpOiBTaW1wbGlmeS4KCSogZGVjbC5jIChtYXJrX3N0bXRfdHJlZSk6IE5ldyBmdW5jdGlvbi4KCShtYXJrX3NhdmVkX3Njb3BlKTogVXNlIGl0LgoJKHN0YXJ0X2Z1bmN0aW9uKTogUmVhcnJhbmdlIHNsaWdodGx5IHRvIGNhbGwgYmVnaW5fc3RtdF90cmVlIAoJZWFybGllci4KCShzYXZlX2Z1bmN0aW9uX2RhdGEpOiBUd2Vhay4KCShmaW5pc2hfZnVuY3Rpb24pOiBBZGp1c3QgY2FsbCB0byBmaW5pc2hfc3RtdF90cmVlLgoJKG1hcmtfbGFuZ19mdW5jdGlvbik6IFVzZSBtYXJrX3N0bXRfdHJlZS4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IERvbid0IGhhbmRsZSBWRUNfSU5JVF9FWFBSLgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogUmVtb3ZlIGNyZWF0aW9uIG9mIFZFQ19JTklUX0VYUFIuCgkoYnVpbGRfdmVjX2luaXQpOiBSZW1vdmUgY3JlYXRpb24gb2Ygc3RhbmQtaW4gaW50aWFsaXplci4KCSogcHQuYyAoYmVnaW5fdHJlZSk6IFJlbW92ZS4KCShlbmRfdHJlZSk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoU0VUX0xBU1RfU1RNVCk6IE5ldyBtYWNyby4gIFVzZSBpdCB0aHJvdWdob3V0LgoJKGJlZ2luX2NvbXBvdW5kX3N0bXQpOiBIYW5kbGUgYSBjb21wb3VuZC1zdGF0ZW1lbnQgb3V0c2lkZSBvZiBhCglmdW5jdGlvbi4KCShiZWdpbl9zdG10X2V4cHIpOiBIYW5kbGUgYSBzdGF0ZW1lbnQtZXhwcmVzc2lvbiBvdXRzaWRlZiBvZiBhCglmdW5jdGlvbi4KCShmaW5pc2hfc3RtdF9leHByKTogTGlrZXdpc2UuCgkoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IERvbid0IGNhbGwgYmVnaW5fdHJlZS4KCShmaW5pc2hfaW5saW5lX2RlZmluaXRpb25zKTogRG9uJ3QgY2FsbCBlbmRfdHJlZS4KCShiZWdpbl9zdG10X3RyZWUpOiBUYWtlIGEgcG9pbnRlciB0byB0cmVlLCBub3QgYSBmdW5jdGlvbiBhcyBpbnB1dC4KCShmaW5pc2hfc3RtdF90cmVlKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoc2VhcmNoX3RyZWUpOiBEb24ndCBoYW5kbGUgVkVDX0lOSVRfRVhQUi4KCShtYXBjYXIpOiBMaWtld2lzZS4KCQoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IERvbid0IGNhbGwgZmluaXNoX3N0bXQgdW5uZWNlc3NhcmlseS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkKCSogZHVtcC5jIChkcXVldWVfYW5kX2R1bXApOiBEdW1wIGJpdGZpZWxkbmVzcy4KCQoJKiB0cmVlLmMgKGx2YWx1ZV9wXzEpOiBVc2UgREVDTF9DX0JJVF9GSUVMRCB0byBjaGVjayBmb3IKCWJpdGZpZWxkcywgcmF0aGVyIHRoYW4gREVDTF9CSVRfRklFTEQuCgkqIGlyLnRleGk6IERvY3VtZW50IGhvdyB0byB0ZWxsIHdoZXRoZXIgb3Igbm90IGEgZmllbGQgaXMgYQoJYml0ZmllbGQuCgkKCSogbGV4LmMgKG1ha2VfbGFuZ190eXBlKTogRml4IHR5cG8gaW4gY29tbWVudC4KCjE5OTktMTAtMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogU3RyaXAgY3YtcXVhbHMgZnJvbSBub24tY2xhc3MgcnZhbHVlcy4KCjE5OTktMTAtMDEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IElmIHRoZSB0eXBlIG9mIGEgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiBpcwoJYm9ndXMsIHNvIGlzIHRoZSB3aG9sZSBpbnN0YW50aWF0aW9uLgoKMTk5OS0wOS0zMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoaW5pdGlhbGl6ZV9sb2NhbF92YXIpOiBIYW5kbGUgc3RhdGljIHZhcmlhYmxlcyBoZXJlLgoJKGNwX2ZpbmlzaF9kZWNsKTogVHdlYWsgaGFuZGxpbmcgb2YgZnVuY3Rpb24tc2NvcGUgc3RhdGljCgl2YXJpYWJsZXMuCgkqIHNlbWFudGljcy5jIChleHBhbmRfc3RtdCk6IEhhbmRsZSBERUNMX1NUTVRzIGZvciBzdGF0aWMKCXZhcmlhYmxlcy4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogRG9uJ3QgY3Jhc2ggd2hlbiAtZnN5bnRheC1vbmx5LgoKCSogY3AtdHJlZS5oIChsYW5nX2RlY2xfZmxhZ3MpOiBBZGQgZ2xvYmFsX2N0b3JfcCBhbmQKCWdsb2JhbF9kdG9yX3AuICBBZGQgaW5pdF9wcmlvcml0eS4KCShERUNMX0FDQ0VTUyk6IEFkanVzdCBhY2NvcmRpbmdseS4KCShERUNMX0dMT0JBTF9DVE9SX1AsIERFQ0xfR0xPQkFMX0RUT1JfUCk6IE5ldyBtYWNyb3MuCgkoR0xPQkFMX0lOSVRfUFJJT1JJVFkpOiBMaWtld2lzZS4KCSogZGVjbC5jIChsYW5nX21hcmtfdHJlZSk6IEFkanVzdCBhY2NvcmRpbmdseS4KCShzdGFydF9vYmplY3RzKTogU2V0IERFQ0xfR0xPQkFMX0NUT1JfUCwgREVDTF9HTE9CQUxfRFRPUl9QLCAKCWFuZCBHTE9CQUxfSU5JVF9QUklPUklUWS4KCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogUHJpbnQgdGhlbS4KCSogaXIudGV4aTogRG9jdW1lbnQgdGhlbS4KCgkqIGRlY2wyLmMgKHN0cnVjdCBwcmlvcml0eV9pbmZvX3MpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb25fc2VxdWVuY2UKCWFuZCBkZXN0cnVjdGlvbl9zZXF1ZW5jZS4KCShzdGFydF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IFJldHVybiB0aGUgYm9keSBvZiB0aGUKCWZ1bmN0aW9uLiAgQ29udmVydCBmb3IgZnVuY3Rpb24tYXQtYS10aW1lIG1vZGUuCgkoZ2VuZXJhdGVfaW5pdHNfZm9yX3ByaW9yaXR5KTogUmVtb3ZlLgoJKGZpbmlzaF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IENoYW5nZSBwcm90b3R5cGUuCglBZGp1c3QgZm9yIGZ1bmN0aW9uLWF0LWEtdGltZSBtb2RlLgoJKGRvX3N0YXRpY19pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGRvX3N0YXRpY19kZXN0cnVjdGlvbik6IExpa2V3aXNlLgoJKGRvX3N0YXRpY19pbml0aWFsaXphdGlvbl9hbmRfZGVzdHJ1Y3Rpb24pOiBSZW1vdmUuCgkoc3RhcnRfc3RhdGljX2luaXRpYWxpemF0aW9uX29yX2Rlc3RydWN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9zdGF0aWNfaW5pdGlhbGl6YXRpb25fb3JfZGVzdHJ1Y3Rpb24pOiBMaWtld2lzZS4KCShnZXRfcHJpb3JpdHlfaW5mbyk6IERvbid0IG1hbmlwdWxhdGlvbiBpbml0aWFsaXphdGlvbl9zZXF1ZW5jZSBvcgoJZGVzdHJ1Y3Rpb25fc2VxdWVuY2UuCgkocHJ1bmVfdmFyc19uZWVkaW5nX25vX2luaXRpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHdyaXRlX291dF92YXJzKTogTGlrZXdpc2UuCgkoZmluaXNoX2ZpbGUpOiBVc2UgdGhlIHZhcmlvdXMgbmV3IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBvbGQuCgkKVGh1IFNlcCAzMCAwMDoxMzoyNyAxOTk5ICBEaXJrIFpvbGxlciAgPGR1ekBydHNmZm0uY29tPgoKCSogY3AtdHJlZS5oICh3YXJuX2Zsb2F0X2VxdWFsKTogRGVjbGFyZS4KCSogZGVjbDIuYyAod2Fybl9mbG9hdF9lcXVhbCk6IERlZmluZS4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBSZWNvZ25pemUgLVdbbm8tXWZsb2F0LWVxdWFsLgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENvbmRpdGlvbmFsbHkgd2FybgoJYWJvdXQgZXF1YWxpdHkgdGVzdHMgb2YgZmxvYXRpbmcgcG9pbnQgdHlwZXMuCgoxOTk5LTA5LTI5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJU3VwcG9ydCBub3JtYWwgdHlwZV9pbmZvLWJhc2VkIEVIIG1lY2hhbmlzbXMgd2l0aCAtZm5vLXJ0dGkuCgkqIGV4Y2VwdC5jIChidWlsZF9laF90eXBlX3R5cGUpOiBSZW1vdmUgc3BlY2lhbCAtZm5vLXJ0dGkgaGFuZGxpbmcuCgkoYnVpbGRfZWhfdHlwZV90eXBlX3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX2VoX3R5cGUpOiBSZW1vdmUuCgkoZXhwYW5kX3Rocm93KTogQ2FsbCBidWlsZF9laF90eXBlX3R5cGUsIG5vdCBidWlsZF9laF90eXBlLgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBEb24ndCBhc3NvY2lhdGUgdGhlIHRpbmZvIGZuIHdpdGgKCXRoZSB2dGFibGUgaWYgLWZuby1ydHRpLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWx3YXlzIGluaXRfcnR0aV9wcm9jZXNzaW5nLgoKCSogcnR0aS5jIChnZXRfdHlwZWlkKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgLWZuby1ydHRpLgoKCSogY2xhc3MuYyAoY2xhc3NfY2FjaGVfb2JzdGFjaywgY2xhc3Nfb2JzdGFjayk6IFJlbW92ZS4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBEb24ndCBpbml0aWFsaXplIGNsYXNzX29ic3RhY2suCgkocHVzaF9jYWNoZV9vYnN0YWNrKTogUmVtb3ZlLgoJKHB1c2hjbGFzcyk6IERvbid0IGNhbGwgaXQuCgkqIGNwLXRyZWUuaDogUmVtb3ZlIHByb3RvdHlwZSBmb3IgcHVzaF9jYWNoZV9vYnN0YWNrLgoJKiBkZWNsLmMgKGRlY2xfb2JzdGFjaywgZGVjbF9zdGFjaywgcHVzaF9kZWNsX2xldmVsKTogUmVtb3ZlLgoJKHB1c2hsZXZlbF9jbGFzcyk6IERvbid0IHB1c2hfZGVjbF9sZXZlbC4KCShwb3BsZXZlbF9jbGFzcyk6IERvbid0IHBvcF9zdGFja19sZXZlbC4KCShwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcpOiBEb24ndCBwdXNoX2NhY2hlX29ic3RhY2suCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEb24ndCBpbnRpYWxpemUgZGVjbF9vYnN0YWNrLgoJKiBzZWFyY2guYyAocHVzaF9jbGFzc19kZWNscyk6IERvbid0IHB1c2hfY2FjaGVfb2JzdGFjay4KCSogdHJlZS5jIChsaXN0X2hhc2hfYWRkKTogUHV0IGhhc2ggbm9kZSBvbiBwZXJtYW5lbnRfb2JzdGFjay4KCShoYXNoX3RyZWVfY29ucyk6IERvbid0IG1lc3Mgd2l0aCBvYnN0YWNrcy4KCShwcmludF9sYW5nX3N0YXRpc3RpY3MpOiBEb24ndCBwcmludCBzdGF0cyBmb3IgY2xhc3Nfb2JzdGFjayBhbmQKCWRlY2xfb2JzdGFjay4KCjE5OTktMDktMjkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBEdW1wIERFQ0xfRVhURVJOQUwuCgkqIGlyLnRleGk6IERvY3VtZW50IERFQ0xfRVhURVJOQUwuCgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBJbXByb3ZlIHN1cHBvcnQgZm9yIGR1bXBpbmcgVEhVTktfREVDTHMuCgkqIGlyLnRleGk6IERvY3VtZW50IFRIVU5LX0RFQ0xzLgoKCSogY3AtdHJlZS5oIChUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMpOiBNb3ZlIGhlcmUgZnJvbSBwdC5jLgoJKFRNUExfQVJHU19ERVBUSCwgVE1QTF9BUkdTX0xFVkVMLCBTRVRfVE1QTF9BUkdTX0xFVkVMKTogTGlrZXdpc2UuCgkoVE1QTF9BUkcsIFNFVF9UTVBMX0FSRywgTlVNX1RNUExfQVJHUywgVE1QTF9QQVJNU19ERVBUSCk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX3RlbXBsYXRlX2JpbmRpbmdzKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIuCglIYW5kbGUgbXVsdGlwbGUgbGV2ZWxzIG9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkoZHVtcF90ZW1wbGF0ZV9kZWNsKTogVXNlIGBwYXJtcycsIG5vdCBgYXJncycsIGZvciB0ZW1wbGF0ZQoJcGFyYW1ldGVycy4gIEZpeCB0aGlua28uCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogVXNlIERFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTi4gIERvbid0IHBhc3MKCWZsYWdzIHRvIGR1bXBfdGVtcGxhdGVfYmluZGluZ3MuCgkqIHB0LmMgKFRNUExfQVJHU19IQVZFX01VTFRJUExFX0xFVkVMUyk6IE1vdmUgdG8gY3AtdHJlZS5oLgoJKFRNUExfQVJHU19ERVBUSCwgVE1QTF9BUkdTX0xFVkVMLCBTRVRfVE1QTF9BUkdTX0xFVkVMKTogTGlrZXdpc2UuCgkoVE1QTF9BUkcsIFNFVF9UTVBMX0FSRywgTlVNX1RNUExfQVJHUywgVE1QTF9QQVJNU19ERVBUSCk6IExpa2V3aXNlLgoJKHRzdWJzdF9jb3B5KTogQ2xhcmlmeSB2YXJpYWJsZSBuYW1lLgoJKG1vc3RfZ2VuZXJhbF90ZW1wbGF0ZSk6IFJvYnVzdGlmeS4KCQoxOTk5LTA5LTI5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZXJyb3IuYyAoZHVtcF90ZW1wbGF0ZV9wYXJtcyk6IERvbid0IHVzZSBUU19QRURBTlRJQ19OQU1FCgl0byBjaGFuZ2UgcHJpbWFyeSB0ZW1wbGF0ZSByZW5kZXJpbmcuCgoxOTk5LTA5LTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChVUFRfVEVNUExBVEUpOiBSZW1vdmUuCgkoVVBUX1BBUk1TKTogTGlrZXdpc2UuCgkoREVDTF9ORUVERURfUCk6IE5ldyBtYWNyby4KCSogZGVjbDIuYyAoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogVXNlIGl0LgoJKGZpbmlzaF9vYmplY3RzKTogRG9uJ3QgY3Jhc2ggd2l0aCAtZnN5bnRheC1vbmx5LgoJKGZpbmlzaF9maWxlKTogVXNlIERFQ0xfTkVFREVEX1AuICBEb24ndCBwcnVuZSB2dGFibGVzIHdoZW4KCS1mc3ludGF4LW9ubHkuCgkqIHB0LmMgKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBSZW1vdmUgRklYTUUgdGhhdCB0YWxrcyBhYm91dAoJb2JzdGFja3MuCgkodHN1YnN0X2V4cHIpOiBDb3JyZWN0IGhhbmRsaW5nIG9mIGZ1bmN0aW9uIHRyeS1ibG9ja3MuCgkqIHNlbWFudGljcy5jOiBJbmNsdWRlIGZsYWdzLmguCgkoZXhwYW5kX2JvZHkpOiBEb24ndCBkbyBSVEwgZ2VuZXJhdGlvbiBpZiAtZnN5bnRheC1vbmx5LgoJKiBNYWtlZmlsZS5pbiAoc2VtYW50aWNzLm8pOiBEZXBlbmRzIG9uIGZsYWdzLmguCgkKMTk5OS0wOS0yOCAgR2FicmllbCBEb3MgUmVpcyAgPGdkckBjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAobW9zdF9nZW5lcmFsX3RlbXBsYXRlKTogQWRqdXN0IGRlY2xhcmF0aW9uLgoKCSogY3AtdHJlZS5oOiAobW9zdF9nZW5lcmFsX3RlbXBsYXRlKTogRGVjbGFyZS4KCgkqIGVycm9yLmMgKGR1bXBfdGVtcGxhdGVfdmFsdWUpOiBSZW5hbWUgdG8gLi4uCgkoZHVtcF90ZW1wbGF0ZV9hcmd1bWVudCk6IFRoaXMuCgkoZHVtcF90ZW1wbGF0ZV9hcmd1bWVudF9saXN0KTogTmV3IGZ1bmN0aW9uLgoJKGR1bXBfdHlwZSk6IFVzZSBpdC4KCShkdW1wX3RlbXBsYXRlX3BhcmFtZXRlcik6IE5ldyBmdW5jdGlvbi4KCShkdW1wX3RlbXBsYXRlX2RlY2wpOiBVc2UgaXQuCgkoZHVtcF90ZW1wbGF0ZV9iaW5kaW5ncyk6IE5ldyBmdW5jdGlvbi4KCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBVc2UgaXQuIFByZXR0eSBwcmludCBmdW5jdGlvbiB0ZW1wbGF0ZQoJaW5zdGFudGlhdGlvbnMuCgoxOTk5LTA5LTI4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERpc3Rpbmd1aXNoIHBhcmFtZXRlciBjb250ZXh0IGZvcgoJZGlhZ25vc3RpY3MuIFRpZHkgdXAgbWlzc2luZyB0eXBlIGRpYWdub3N0aWMuCglEaWFnbm9zZSBgZXhwbGljaXQnIGluIG9uZSBwbGFjZS4gRGlhZ25vc2UgYG11dGFibGUnIGluIG9uZSBwbGFjZS4KCjE5OTktMDktMjggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpci50ZXhpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIFRBUkdFVF9FWFBSLgoKMTk5OS0wOS0yNyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCglBdWdtZW50IHN0cmluZ2lmaWNhdGlvbiBvZiB0cmVlcy4KCSogY3AtdHJlZS5oICh0cmVlX3N0cmluZ19mbGFncyk6IE5ldyBlcnJvciBzdHJpbmdpZnlpbmcgZW51bWVyYXRpb24uCgkoZm5kZWNsX2FzX3N0cmluZywgdHlwZV9hc19zdHJpbmdfcmVhbCwgYXJnc19hc19zdHJpbmcsCgljb2RlX2FzX3N0cmluZywgbGFuZ3VhZ2VfYXNfc3RyaW5nLCBwYXJtX2FzX3N0cmluZywKCW9wX2FzX3N0cmluZywgYXNzb3BfYXNfc3RyaW5nLCBjdl9hc19zdHJpbmcpOiBSZW1vdmUuCgkodHlwZV9hc19zdHJpbmcsIGRlY2xfYXNfc3RyaW5nLCBleHByX2FzX3N0cmluZyk6IEFkanVzdCBwcm90b3R5cGUuCgkoY29udGV4dF9hc19zdHJpbmcpOiBEZWNsYXJlIG5ldyBmdW5jdGlvbi4KCSogZXJyb3IuYyAoY3BfcHJpbnRlcnMpOiBNb3ZlIGRlZmluaXRpb24uCgkoT0JfVU5QVVQpOiBSZW1vdmUuCgkoT0JfRU5EX1RFTVBMQVRFX0lEKTogQWRqdXN0LgoJKGludGVyZXN0aW5nX3Njb3BlX3ApOiBSZW1vdmUuCgkoZHVtcF9zY29wZSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZHVtcF9xdWFsaWZpZXJzKTogQWRqdXN0IHByb3RvdHlwZSwgcmVpbXBsZW1lbnQuCgkoZHVtcF90ZW1wbGF0ZV92YWx1ZSk6IFVzZSB0cmVlX3N0cmluZ19mbGFncy4KCShkdW1wX3R5cGVfcmVhbCk6IE1vdmUgYmFjayB0byBkdW1wX3R5cGUuCgkoZHVtcF90eXBlKTogQWRqdXN0IHByb3RvdHlwZS4gVXNlIHRyZWVfc3RyaW5nX2ZsYWdzLgoJKGR1bXBfYWdncl90eXBlKTogTGlrZXdpc2UuIFVzZSBkdW1wX3RlbXBsYXRlX3Bhcm1zLgoJKGR1bXBfdHlwZV9wcmVmaXgpOiBBZGp1c3QgcHJvdG90eXBlLiBVc2UgdHJlZV9zdHJpbmdfZmxhZ3MuCglSZXR1cm4gcGFkIGZsYWcuCgkoZHVtcF90eXBlX3N1ZmZpeCk6IEFkanVzdCBwcm90b3R5cGUuIFVzZSB0cmVlX3N0cmluZ19mbGFncy4KCShkdW1wX3NpbXBsZV9kZWNsKTogTGlrZXdpc2UuCgkoZHVtcF9kZWNsKTogTGlrZXdpc2UuIFVzZSBkdW1wX3RlbXBsYXRlX2RlY2wuCgkoZHVtcF90ZW1wbGF0ZV9kZWNsKTogTmV3IHN0YXRpYyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mIGR1bXBfZGVjbC4KCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBBZGp1c3QgcHJvdG90eXBlLiBVc2UgdHJlZV9zdHJpbmdfZmxhZ3MuCgkoZHVtcF9wYXJhbWV0ZXJzKTogTGlrZXdpc2UuIFByZWZpeCBzcGFjZS4KCShkdW1wX2V4Y2VwdGlvbl9zcGVjKTogQWRqdXN0IHByb3RvdHlwZS4gVXNlIHRyZWVfc3RyaW5nX2ZsYWdzLgoJKGR1bXBfZnVuY3Rpb25fbmFtZSk6IExpa2V3aXNlLiBVc2UgZHVtcF90ZW1wbGF0ZV9wYXJtcy4KCShkdW1wX3RlbXBsYXRlX3Bhcm1zKTogTmV3IHN0YXRpYyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mCglkdW1wX2Z1bmN0aW9uX25hbWUuCgkoZHVtcF9leHByX2xpc3QpOiBBZGp1c3QgcHJvdG90eXBlLiBVc2UgdHJlZV9zdHJpbmdfZmxhZ3MuCgkoZHVtcF9leHByKTogTGlrZXdpc2UuCgkoZm5kZWNsX2FzX3N0cmluZyk6IFJlbW92ZWQKCSh0eXBlX2FzX3N0cmluZ19yZWFsKTogUmVtb3ZlZAoJKGR1bXBfYmluYXJ5X29wKTogQWRqdXN0IHByb3RvdHlwZS4gVXNlIHRyZWVfc3RyaW5nX2ZsYWdzLgoJKGR1bXBfdW5hcnlfb3ApOiBMaWtld2lzZS4KCSh0eXBlX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKGV4cHJfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkoZGVjbF9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShjb250ZXh0X2FzX3N0cmluZyk6IE5ldyBmdW5jdGlvbi4KCShsYW5nX2RlY2xfbmFtZSk6IEFkanVzdC4KCShkZWNsX3RvX3N0cmluZyk6IE5ldyBzdGF0aWMgcHJpbnQgY2FsbGJhY2suCgkoZXhwcl90b19zdHJpbmcpOiBMaWtld2lzZS4KCShmbmRlY2xfdG9fc3RyaW5nKTogTGlrZXdpc2UuCgkoY29kZV9hc19zdHJpbmcpOiBSZW5hbWVkIHRvIC4uLgoJKGNvZGVfdG9fc3RyaW5nKTogLi4uIGhlcmUuIEFkanVzdC4KCShsYW5ndWFnZV9hc19zdHJpbmcpOiBSZW5hbWVkIHRvIC4uLgoJKGxhbmd1YWdlX3RvX3N0cmluZyk6IC4uLiBoZXJlLiBBZGp1c3QuCgkocGFybV9hc19zdHJpbmcpOiBSZW5hbWVkIHRvIC4uLgoJKHBhcm1fdG9fc3RyaW5nKTogLi4uIGhlcmUuCgkob3BfYXNfc3RyaW5nKTogUmVuYW1lZCB0byAuLi4KCShvcF90b19zdHJpbmcpOiAuLi4gaGVyZS4KCShhc3NvcF9hc19zdHJpbmcpOiBSZW5hbWVkIHRvIC4uLgoJKGFzc29wX3RvX3N0cmluZyk6IC4uLiBoZXJlLgoJKHR5cGVfdG9fc3RyaW5nKTogTmV3IHN0YXRpYyBwcmludCBjYWxsYmFjay4KCShhcmdzX2FzX3N0cmluZyk6IFJlbmFtZWQgdG8gLi4uCgkoYXJnc190b19zdHJpbmcpOiAuLi4gaGVyZS4gQWRqdXN0LgoJKGN2X2FzX3N0cmluZyk6IFJlbmFtZWQgdG8gLi4uCgkoY3ZfdG9fc3RyaW5nKTogLi4uIGhlcmUuIEFkanVzdC4KCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogVXNlIHRyZWVfc3RyaW5nX2ZsYWdzLgoJKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBMaWtld2lzZS4KCjE5OTktMDktMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGV4cGFuZF90aHJvdyk6IFJlbW92ZSBwcm90b3R5cGUuCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBNYWtlIGl0IHN0YXRpYy4gIFVzZSB0cmVlLWdlbmVyYXRpb24KCWZ1bmN0aW9ucywgcmF0aGVyIHRoYW4gUlRMLWdlbmVyYXRpb24gZnVuY3Rpb25zLgoJKGJ1aWxkX3Rocm93KTogVXNlIGl0LgoJKiBleHByLmM6IEluY2x1ZGUgZXhjZXB0LmguCgkoY3BsdXNfZXhwYW5kX2V4cHIpOiBEb24ndCBjYWxsIGV4cGFuZF90aHJvdyBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoZXhwci5vKTogRGVwZW5kIG9uIGV4Y2VwdC5oLgoJKiBpci50ZXhpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbiBmb3IgVEhST1dfRVhQUi4KCQoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogU2V0IHhfZG9udF9zYXZlX3BlbmRpbmdfc2l6ZXMgcmF0aGVyCgl0aGFuIGNhbGxpbmcgZ2V0X3BlbmRpbmdfc2l6ZXMuCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogRG9uJ3Qgc2F2ZSBhbmQgcmVzdG9yZQoJaW1tZWRpYXRlX3NpemVfZXhwYW5kOyBpbnN0ZWFkLCBhc3NlcnQgdGhhdCBpdCBoYXMgdGhlIGV4cGVjdGVkCgl2YWx1ZSBhbHJlYWR5LgoKMTk5OS0wOS0yNiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbGV4LmMgKGNvbXBpbGVyX2Vycm9yKTogQWRkIG1pc3NpbmcgY2FsbCB0byB2YV9lbmQoKS4KCjE5OTktMDktMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBIYW5kbGUgUkVTVUxUX0RFQ0wuCgkqIGlyLnRleGk6IERvY3VtZW50IFJFU1VMVF9ERUNMIGFuZCBERUNMX1JFU1VMVC4KCgkqIGNwLXRyZWUuaCAoY2hlY2tfcmV0dXJuX2V4cHIpOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoZmluaXNoX2NvbnN0cnVjdG9yX2JvZHkpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGRlY2wpOiBQdXQgZ2xvYmFsIGZyaWVuZCBmdW5jdGlvbnMgaW4gbmFtZXNwYWNlIGJpbmRpbmcKCWxldmVsLCBub3QgdGhlIGNsYXNzIGJpbmRpbmcgbGV2ZWwuCgkoZmluaXNoX2Rlc3RydWN0b3JfYm9keSk6IE1ha2Ugc3VyZSB0aGUgZHRvcl9sYWJlbCBpcyBhbHdheXMKCWRlZmluZWQuICBGaXggdHlwbyBpbiBjb21tZW50LgoJKGZpbmlzaF9mdW5jdGlvbik6IE1vdmUgZ2VuZXJhdGlvbiBvZiBjb25zdHJ1Y3Rvci10ZXJtaW5hdGlvbiBjb2RlCgl0byBzZW1hbnRpYy1hbmFseXNpcyB0aW1lLiAgTW92ZSBnZW5lcmF0aW9uIG9mIGltcGxpY2l0IGBtYWluJwoJcmV0dXJuIHZhbHVlIHRvIHNlbWFudGljLWFuYWx5c2lzIHRpbWUuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfcmV0dXJuX3N0bXQpOiBHZW5lcmF0ZSBnb3RvJ3MgdG8KCWN0b3JfbGFiZWwvZHRvcl9sYWJlbCBoZXJlLiAgVXNlIGNoZWNrX3JldHVybl9leHByIHRvIGRvIHNlbWFudGljCglhbmFseXNpcyBvbiB0aGUgcmV0dXJuZWQgZXhwcmVzc2lvbi4KCSogdHlwZWNrLmMgKG1heWJlX3dhcm5fYWJvdXRfcmV0dXJuaW5nX2FkZHJlc3Nfb2ZfbG9jYWwpOiBOZXcKCWZ1bmN0aW9uIHNwbGl0IG91dCBmcm9tIGNfZXhwYW5kX3JldHVybi4KCShjaGVja19yZXR1cm5fZXhwcik6IExpa2V3aXNlLgoJKGNfZXhwYW5kX3JldHVybik6IEp1c3QgZ2VuZXJhdGUgdGhlIFJUTCBmb3IgdGhlIHJldHVybi4KCQoxOTk5LTA5LTI0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChDUFRJX0NMRUFOVVBfVFlQRSk6IE5ldyBtYWNyby4KCShjbGVhbnVwX3R5cGUpOiBMaWtld2lzZS4KCShzZWFyY2hfdHJlZSk6IENoYW5nZSBwcm90b3R5cGUuCgkqIGRlY2wuYyAobG9jYWxfdmFyaWFibGVfcCk6IEFkanVzdCBmb3IgbmV3IGludGVyZmFjZSB0bwoJc2VhcmNoX3RyZWUuCgkoY2hlY2tfZGVmYXVsdF9hcmd1bWVudCk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgSU5JVF9FWFBSLgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogRG9uJ3QgbWFrZSBjbGVhbnVwX3R5cGUgYSBsb2NhbCBzdGF0aWMuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBEb24ndCBoYW5kbGUgTkVXX0VYUFIuCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogQ2FsbCBidWlsZF9uZXdfMSBkaXJlY3RseSwgcmF0aGVyIHRoYW4KCWJ1aWxkaW5nIGEgTkVXX0VYUFIuCgkoYnVpbGRfbmV3XzEpOiBUaWR5LiAgRG9uJ3QgYnVpbGQgYSBWRUNfSU5JVF9FWFBSIGV4Y2VwdCB3aGVuCglwcm9jZXNzaW5nIGZpbGUtc2NvcGUgaW5pdGlhbGl6ZXJzLgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IEFkZCBhbiBvcG5hbWVfdGFiIGVudHJ5IGZvciBJTklUX0VYUFIuCgkqIHRyZWUuYzogSW5jbHVkZSBzcGxheS10cmVlLmgKCShub19saW5rYWdlX2hlbHBlcik6IEFkanVzdCBmb3IgbmV3IGludGVyZmFjZSB0byBzZWFyY2hfdHJlZS4KCShzZWFyY2hfdHJlZSk6IFBhc3MgYXJvdW5kIHBvaW50ZXJzIHRvIHRyZWUgbm9kZXMsIHJhdGhlciB0aGFuIHRoZQoJbm9kZXMgdGhlbXNlbHZlcy4gIEhhbmRsZSBWRUNfSU5JVF9FWFBSLgoJKG5vX2xpbmthZ2VfY2hlY2spOiBBZGp1c3QgZm9yIG5ldyBpbnRlcmZhY2UgdG8gc2VhcmNoX3RyZWUuCgkobWFwY2FyKTogSGFuZGxlIFZFQ19JTklUX0VYUFIuCgkodGFyZ2V0X3JlbWFwKTogTmV3IHZhcmlhYmxlLgoJKGJvdF9tYW5pcCk6IFVzZSBpdC4KCShib3RfcmVwbGFjZSk6IE5ldyBmdW5jdGlvbi4KCShicmVha19vdXRfdGFyZ2V0X2V4cHJzKTogVXNlIGl0IHRvIHJlbWFwIGFsbCB2YXJpYWJsZXMgdXNlZCBpbiBhCglkZWZhdWx0IGFyZ3VtZW50IGV4cHJlc3Npb24uCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IERvbid0IGNyYXNoIHdoZW4gb3V0c2lkZSBhCglmdW5jdGlvbiBhbmQgcHJlc2VudGVkIHdpdGggYW4gSU5JVF9FWFBSIGFzc2lnbm1lbnQKCSogTWFrZWZpbGUuaW4gKHRyZWUubyk6IERlcGVuZCBvbiBzcGxheS10cmVlLmguCgpGcmkgU2VwIDI0IDEwOjQ4OjEwIDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBVc2UgREVDTF9CVUlMVF9JTl9DTEFTUyByYXRoZXIgdGhhbgoJREVDTF9CVUlMVF9JTi4KCShidWlsdGluX2Z1bmN0aW9uKTogTmV3IGFyZyBDTEFTUy4gIEFyZyBDT0RFIG5vdyBvZiB0eXBlIGludC4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJU2V0IHRoZSBidWlsdGluJ3MgREVDTF9CVUlMVF9JTl9DTEFTUy4KCjE5OTktMDktMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3QgbWFrZSBsb2NhbCBkZWNsYXJhdGlvbnMgb2YgZXh0ZXJuCgl2YXJpYWJsZXMgZ2l2ZSB0aGUgdmFyaWFibGUgYSBERUNMX0NPTlRFWFQgZm9yIHRoZSBmdW5jdGlvbi4KCShtYWtlX3J0bF9mb3Jfbm9ubG9jYWxfZGVjbCk6IERvbid0IGZ1c3Mgd2l0aCBvYnN0YWNrcy4gIFNpbXBsaWZ5LgoJRG9uJ3QgYWNjaWRlbnRhbGx5IG1ha2UgUlRMIGZvciBsb2NhbCBkZWNsYXJhdGlvbnMuCgkoZW1pdF9sb2NhbF92YXIpOiBIYW5kbGUgZGVjbGFyYXRpb25zIHdpdGggYXNtLXNwZWNpZmllcnMgaGVyZS4KCQoxOTk5LTA5LTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaXIudGV4aTogSW1wcm92ZSBkb2N1bWVudGF0aW9uIGZvciBUQVJHRVRfRVhQUnMuICBEaXNjdXNzCglTVE1UX0lTX0ZVTExfRVhQUl9QLgoKCSogY3AtdHJlZS5oIChsYW5ndWFnZV9mdW5jdGlvbik6IEFkZCBjYW5ub3RfaW5saW5lLgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogUmVzdG9yZSBjdXJyZW50X2Z1bmN0aW9uX2Nhbm5vdF9pbmxpbmUKCWZyb20gdGhlIHNhdmVkIHZhbHVlLgoJKHNhdmVfZnVuY3Rpb25fZGF0YSk6IFNhdmUgY3VycmVudF9mdW5jdGlvbl9jYW5ub3RfaW5saW5lLgoJKiBkZWNsMi5jIChzdGFydF9vYmplY3RzKTogQ2hhbmdlIHByb3RvdHlwZS4gIEJ1aWxkIHRoZSBmdW5jdGlvbgoJaW4gZnVuY3Rpb24tYXQtYS10aW1lIG1vZGUuCgkoZmluaXNoX29iamVjdHMpOiBMaWtld2lzZS4KCShnZW5lcmF0ZV9jdG9yX29yX2R0b3JfZnVuY3Rpb24pOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkKCSogY3AtdHJlZS5oIChERUNMX0FOT05fVU5JT05fRUxFTVMpOiBOZXcgbWFjcm8uCgkqIGRlY2wyLmMgKGZpbmlzaF9hbm9uX3VuaW9uKTogU2V0IERFQ0xfQU5PTl9VTklPTl9FTEVNUy4KCURvbid0IGNhbGwgZXhwYW5kX2Fub25fdW5pb25fZGVjbCBoZXJlCgkqIHNlbWFudGljcy5jIChleGFwbmRfc3RtdCk6IENhbGwgaXQgaGVyZSwgaW5zdGVhZC4KCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBBZGRyZXNzZWQgdmFyaWFibGVzIGFyZSBpbXBsaWNpdGx5Cgl1c2VkLgoJCjE5OTktMDktMjMgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuaCAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xfQ0hFQ0spOiBOZXcgbWFjcm8uCgkoUkVDT1JEX09SX1VOSU9OX1RZUEVfQ0hFQ0ssIExBTkdfSURFTlRJRklFUl9DQVNUKTogTGlrZXdpc2UuCgkoREVGQVJHX05PREVfQ0hFQ0spOiBSZW1vdmU7IHJlcGxhY2Ugd2l0aCBERUZBVUxUX0FSR19DSEVDSy4KCSogY3AtdHJlZS5oOiBBZGQgdHJlZSBjaGVja2luZyBtYWNyb3MgdG8gdmFyaW91cyB0cmVlIGFjY2VzcwoJbWFjcm9zLgkKCSogcHRyZWUuYyAocHJpbnRfbGFuZ19kZWNsKTogVGVzdCBmb3IgZnVuY3Rpb24gb3IgdmFyaWFibGUKCWJlZm9yZSBhY2Nlc3NpbmcgdGVtcGxhdGUgaW5mby4KCjE5OTktMDktMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jOiBHZXQgV0NIQVJfVFlQRV9TSVpFIGZyb20gd2NoYXJfdHlwZV9ub2RlLgoJKiBsYW5nLXNwZWNzLmg6IElmIC1mc2hvcnQtd2NoYXIsIG92ZXJyaWRlIF9fV0NIQVJfVFlQRV9fLgoJKiBkZWNsMi5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZCAtZnNob3J0LXdjaGFyLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ19zaG9ydF93Y2hhci4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IElmIC1mc2hvcnQtd2NoYXIsIHVzZSAnc2hvcnQgdW5zaWduZWQgCglpbnQnIGZvciB3Y2hhcl90LgoKMTk5OS0wOS0yMyAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogaXIudGV4aTogRml4IGZvcm1hdHRpbmcgZXJyb3JzIGFuZCB0eXBvcy4KCjE5OTktMDktMjIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpci50ZXhpOiBEb2N1bWVudCBDTEVBTlVQX1NUTVQsIFNDT1BFX1NUTVQsIGFuZCBTVEFSVF9DQVRDSF9TVE1ULgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IERvIGNyZWF0ZSBhIGJpbmRpbmcgZm9yIGV4dGVybiAiQyIgZnVuY3Rpb25zLAoJYnV0IG5vdCBmb3IgdGhlaXIgREVDTF9BU1NFTUJMRVJfTkFNRXMuCgkobG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IEZpeCBmb3JtYXR0aW5nLgoJKHhyZWZfdGFnKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKHN0YXJ0X29iamVjdHMpOiBNYXJrIHN0YXRpYyBjb25zdHJ1Y3RvcnMgYW5kCglkZXN0cnVjdG9ycyBhcyB1c2VkLgoKMTk5OS0wOS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkZWZpbmVfY2FzZV9sYWJlbCk6IERvbid0IGNyYXNoIGlmIHdlJ3JlIG5vdCBpbiBhIHN3aXRjaC4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IERvbid0IGJvdGhlciBleHBsaWNpdGx5IGlnbm9yaW5nIGZsYWdzLgoJKiBsYW5nLW9wdGlvbnMuaDogUmVzdG9yZSAtZnRoaXMtaXMtdmFyaWFibGUuICBSZW1vdmUgaGVscCBzdHJpbmdzCglmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MuCgoxOTk5LTA5LTIxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBY2NlcHQgYW5kIGlnbm9yZSAtZmluaXQtcHJpb3JpdHkuCglBY2NlcHQgYW5kIHdhcm4gYWJvdXQgLWZ0aGlzLWlzLXZhcmlhYmxlLgoKMTk5OS0wOS0yMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGR1bXAuYyAoZGVxdWV1ZV9hbmRfZHVtcCk6IEhhbmRsZSBTVEFSVF9DQVRDSF9TVE1ULAoJQ0xFQU5VUF9TVE1ULCBhbmQgU0NPUEVfU1RNVC4KCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkanVzdCwgaW4gdGhlIHdha2Ugb2YgcmVjZW50CgljaGFuZ2VzIHRvIG9wdGlvbiBwcm9jZXNzaW5nLgoKMTk5OS0wOS0yMSAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogQWxsb3cgZXh0cmFjdGlvbiBvZgoJZnVuY3Rpb24gcG9pbnRlciBmcm9tIHBtZnMgd2l0aCBubyBvYmplY3QgZ2l2ZW4uCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IERvIG5vdCByZXR1cm4gZXJyb3Igd2hlbiBjb252ZXJ0aW5nCglwbWZzLgoKMTk5OS0wOS0yMSAgQWxleCBTYW11ZWwgIDxzYW11ZWxAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGxleC5jIChpbnRlcm5hbF9maWxlbmFtZSk6IE5ldyB2YXJpYWJsZS4KCShJTlRFUk5BTF9GSUxFTkFNRSk6IE5ldyBtYWNyby4KCShpbml0X3BhcnNlKTogQWxsb2NhdGUgaW50ZXJuYWxfZmlsZW5hbWUgYW5kIG1hcmsgYXMgcm9vdC4gIFVzZSBpdAoJaW5zdGVhZCBvZiBhIHN0cmluZyBjb25zdGFudC4KCjE5OTktMDktMjEgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJUmVpbXBsZW1lbnQgZHluYW1pYyBjYXN0IGFuZCBjYXRjaCBtYXRjaGluZy4KCSogY3AtdHJlZS5oIChnZXRfZHluYW1pY19jYXN0X2Jhc2VfdHlwZSk6IFByb3RvdHlwZSBuZXcgZnVuY3Rpb24KCSogc2VhcmNoLmMgKGR5bmFtaWNfY2FzdF9iYXNlX3JlY3Vyc2UpOiBOZXcgZnVuY3Rpb24uCgkoZ2V0X2R5bmFtaWNfY2FzdF9iYXNlX3R5cGUpOiBOZXcgZnVuY3Rpb24gZm9yIGR5bmFtaWMgY2FzdC4KCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3RfMSk6IERldGVybWluZSBzb3VyY2UgYW5kIHRhcmdldAoJY2xhc3MgcmVsYXRpb25zaGlwLiBDYWxsIF9fZHluYW1pY19jYXN0XzIuCgkqIHRpbmZvLmggKF9fdXNlcl90eXBlX2luZm86OnVwY2FzdCk6IE5ldyBjYXRjaCBkaXNwYXRjaGVyLgoJKF9fdXNlcl90eXBlX2luZm86OmR5bmNhc3QpOiBOZXcgZHluYW1pYyBjYXN0IGRpc3BhdGNoZXIuCgkoX191c2VyX3R5cGVfaW5mbzo6c3ViX2tpbmQpOiBOZXcgbmVzdGVkIGVudW1lcmF0aW9uLgoJKF9fdXNlcl90eXBlX2luZm86OmNvbnRhaW5lZF9wKTogc3ViX2tpbmQgcHJlZGljYXRlLgoJKF9fdXNlcl90eXBlX2luZm86OmNvbnRhaW5lZF9wdWJsaWNfcCk6IExpa2V3aXNlLgoJKF9fdXNlcl90eXBlX2luZm86OmNvbnRhaW5lZF9ub25wdWJsaWNfcCk6IExpa2V3aXNlLgoJKF9fdXNlcl90eXBlX2luZm86OmNvbnRhaW5lZF9ub252aXJ0dWFsX3A6IExpa2V3aXNlLgoJKF9fdXNlcl90eXBlX2luZm86OnVwY2FzdF9yZXN1bHQpOiBOZXcgbmVzdGVkIHN0cnVjdC4KCShfX3VzZXJfdHlwZV9pbmZvOjpkeW5jYXN0X3Jlc3VsdCk6IE5ldyBuZXN0ZWQgc3RydWN0LgoJKCo6OmRvX3VwY2FzdCk6IE5ldyBjYXRjaCBmdW5jdGlvbi4KCSgqOjpkb19keW5jYXN0KTogTmV3IGR5bmFtaWMgY2FzdCBmdW5jdGlvbi4KCShfX3VzZXJfdHlwZV9pbmZvOjpmaW5kX3B1YmxpY19zdWJvYmopOiBOZXcgZHluYW1pYyBjYXN0CgloZWxwZXIgZGlzcGF0Y2hlci4KCSgqOjpkb19maW5kX3B1YmxpY19zdWJvYmopOiBOZXcgZHluYW1pYyBjYXN0IGhlbHBlciBmdW5jdGlvbi4KCSogdGluZm8uY2MgKF9fdXNlcl90eXBlX2luZm86OnVwY2FzdCk6IERlZmluZSBjYXRjaCBkaXNwYXRjaGVyLgoJKF9fdXNlcl90eXBlX2luZm86OmR5bmNhc3QpOiBEZWZpbmUgZHluYW1pYyBjYXN0IGRpc3BhdGNoZXIuCgkoKjo6ZG9fdXBjYXN0KTogRGVmaW5lIGNhdGNoIGZ1bmN0aW9uLgoJKCo6OmRvX2R5bmNhc3QpOiBEZWZpbmUgZHluYW1pYyBjYXN0IGZ1bmN0aW9uLgoJKCo6OmRvX2ZpbmRfcHVibGljX3N1Ym9iaik6IERlZmluZSBkeW5hbWljIGNhc3QgaGVscGVyIGZ1bmN0aW9uLgoJKiB0aW5mbzIuY2MgKF9fdGhyb3dfdHlwZV9tYXRjaF9ydHRpXzIpOiBVc2UgdXBjYXN0LgoJKF9fZHluYW1pY19jYXN0KTogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd3JhcHBlci4gVXNlIGR5bmNhc3QuCgkoX19keW5hbWljX2Nhc3RfMik6IE5ldyBkeW5hbWljIGNhc3QgcnVudGltZS4KCjE5OTktMDktMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9zdG10X2V4cHIpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogQWRqdXN0IGNhbGwgYWNjb3JkaW5nbHkuCgkqIGluaXQuYyAoZmluaXNoX2luaXRfc3RtdHMpOiBMaWtld2lzZS4KCSogcGFyc2UueSAocHJpbWFyeSk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3N0bXRfZXhwcik6IERvbid0IHRha2UgdHdvIHBhcmFtZXRlcnMuCglEb24ndCByZW1vdmUgZ2VuZXJhdGVkIEJMT0NLcyBmcm9tIHRoZSBibG9jay10cmVlLgoKCVJlbW92ZSBzdXBwb3J0IGZvciBhc3NpZ25pbmcgdG8gYHRoaXMnLgoJKiBORVdTOiBOb3RlIHRoYXQgZmFjdC4KCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IERvbid0IGNoZWNrIGZsYWdfdGhpc19pc192YXJpYWJsZS4KCSogY3AtdHJlZS5oIChFWFBSX1NUTVRfQVNTSUdOU19USElTKTogUmVtb3ZlLgoJKGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVtb3ZlIGFzc2lnbnNfdGhpcywganVzdF9hc3NpZ25lZF90aGlzLCBhbmQKCXhfYmFzZV9pbml0X2V4cHIuICBBZGQgeF92Y2FsbHNfcG9zc2libGVfcC4gIEFkZCB2dGJsc19zZXRfdXBfcC4KCShiYXNlX2luaXRfZXhwcik6IFJlbW92ZS4KCShjdXJyZW50X3ZjYWxsc19wb3NzaWJsZV9wKTogTmV3IG1hY3JvLgoJKHZ0YmxzX3NldF91cF9wKTogTGlrZXdpc2UuCgkoZW1pdF9iYXNlX2luaXQpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBkZWNsLmMgKGZpbmlzaF9kZXN0cnVjdG9yX2JvZHkpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tCglmaW5pc2hfZnVuY3Rpb24uCgkoY3VycmVudF9mdW5jdGlvbl9hc3NpZ25zX3RoaXMpOiBSZW1vdmUuCgkoY3VycmVudF9mdW5jdGlvbl9qdXN0X2Fzc2lnbmVkX3RoaXMpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IERvbid0IHNldCB0aGVtLgoJKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGNoZWNrIHRoZW0uICBEb24ndCBlbWl0CgliYXNlLWluaXRpYWxpemF0aW9uIGNvZGUgaGVyZS4gIEdlbmVyYXRlIGNvZGUgZm9yIGRlc3RydWN0b3JzIHdoZW4KCWRvaW5nIHNlbWFudGljIGFuYWx5c2lzLgoJKGZpbmlzaF9zdG10KTogRG9uJ3QgY2hlY2sgY3VycmVudF9mdW5jdGlvbl9qdXN0X2Fzc2lnbmVkX3RoaXMuCgkqIGRlY2wyLmMgKGxhbmdfZl9vcHRpb25zKTogUmVtb3ZlIHRoaXMtaXMtdmFyaWFibGUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogTGlrZXdpc2UuCgkoZ3Jva2NsYXNzZm4pOiBEb24ndCBjaGVjayBmbGFnX3RoaXNfaXNfdmFyaWFibGUuCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZ2VuZXJhdGVkLgoJKGNvbnN0cnVjdF92aXJ0dWFsX2Jhc2VzKTogRG9uJ3QgcHVzaC9wb3Agb2JzdGFja3MuICBGaXgKCXR5cG8uCgkoYnVpbGRfbmV3XzEpOiBEb24ndCBjaGVjayBmbGFnX3RoaXNfaXNfdmFyaWFibGUuCgkoZ2V0X3RlbXBfcmVndmFyKTogRG9uJ3Qgc2V0IERFQ0xfUkVHSVNURVIuCgkoYnVpbGRfdmVjX2luaXQpOiBEb24ndCBjYWxsIHVzZV92YXJpYWJsZS4KCSogbGFuZy1vcHRpb25zLmg6IFJlbW92ZSAiLWZ0aGlzLWlzLXZhcmlhYmxlIiBhbmQKCSItZm5vLXRoaXMtaXMtdmFyaWFibGUiLgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IERvbid0IGNoZWNrIEVYUFJfU1RNVF9BU1NJR05TX1RISVMuCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IFVzZSBmaW5pc2hfZXhwcl9zdG10LCBub3QKCWV4cGFuZF9leHByX3N0bXQuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfZXhwcl9zdG10X3JlYWwpOiBSZW5hbWUgdG8gLi4uCgkoZmluaXNoX2V4cHJfc3RtdCk6IFRoaXMuICBSZW1vdmUgYXNzaWduZWRfdGhpcyBwYXJhbWV0ZXIuCgkoYmVnaW5faWZfc3RtdCk6IENhbGwgZG9fcHVzaGxldmVsIGJlZm9yZSBzdGFydGluZyB0aGUgc3RhdGVtZW50LgoJKGJlZ2luX2NvbXBvdW5kX3N0bXQpOiBEb24ndCBkZWNsYXJlIF9fRlVOQ1RJT05fXyBpbiBzY29wZS1sZXNzCglibG9ja3MuCgkoc2V0dXBfdnRibF9wdHIpOiBFbWl0IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGJhc2VzIGFuZCBtZW1iZXJzCglhdCBzZW1hbnRpYy1hbmFseXNpcyB0aW1lLiAgRW1pdCBjb2RlIHRvIGluaXRpYWxpemUgdnRhYmxlcyBpbgoJZGVzdHJ1Y3RvcnMgaGVyZS4KCShleHBhbmRfc3RtdCk6IFVzZSBmaW5pc2hfZXhwcl9zdG10LCBub3QgZmluaXNoX2V4cHJfc3RtdF9yZWFsLgoJRG9uJ3QgaGFuZGxlIENUT1JfSU5JVElBTElaRVIgYW55IG1vcmUuCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IERvbid0IGNoZWNrIGZvciBhc3NpZ25tZW50cyB0bwoJdGhpcy4KCShjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCBzdWdnZXN0IGFzc2lnbmluZyB0byBgdGhpcycuCgkKCSogTWFrZWZpbGUuaW4gKGRlY2wubyk6IERlcGVuZCBvbiBSVExfSC4KCShkZWNsMi5vKTogTGlrZXdpc2UuCgkoY2xhc3Mubyk6IExpa2V3aXNlLgoJKGNhbGwubyk6IExpa2V3aXNlLgoJKG1ldGhvZC5vKTogTGlrZXdpc2UuCgkoc2VhcmNoLm8pOiBMaWtld2lzZS4KCSh0cmVlLm8pOiBMaWtld2lzZS4KCShwdC5vKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFdoZW4gYSBidWlsdGluIGZ1bmN0aW9uIGlzIHJlZGVjbGFyZWQKCWFzIHN0YXRpYywgbWFrZSBzdXJlIGl0IGlzIG1hbmdsZWQgY29ycmVjdGx5LgoKCSogaXIudGV4aSAoQ1RPUl9JTklUSUFMSVpFUik6IFJlbW92ZSBtZW50aW9uLiAgRml4IHR5cG8uICBBZGQKCWRldGFpbCBhYm91dCB0aGUgc3RhdGVtZW50LXRyZWUuCgkKMTk5OS0wOS0yMCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBVc2UgYnVpbGRfZnVuY3Rpb25hbF9jYXN0IGZvciBDVl9RVUFMSUZJRVIuCgoxOTk5LTA5LTIwICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogRXh0ZW5kIGNvbW1lbnQuCgpNb24gU2VwIDIwIDEwOjQ5OjA1IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogdHlwZWNrLmM6IEluY2x1ZGUgInRtX3AuaCIuCgoxOTk5LTA5LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaXIudGV4aTogTmV3IGZpbGUuCgoxOTk5LTA5LTE5ICBQYXVsIEJ1cmNoYXJkIDxidXJjaGFyZEBwb2JveC5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZXhwYW5kX3N0bXQpOiBJbml0aWFsaXplIHJldHVybiB2YWx1ZS4KCjE5OTktMDktMTggIFBhdWwgQnVyY2hhcmQgPGJ1cmNoYXJkQHBvYm94LmNvbT4KCgkqIGd4eGludC50ZXhpOiBHKysgbm93IGltcGxlbWVudHMgbmFtZXNwYWNlcy4KCQoxOTk5LTA5LTE4ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChwb3BfbGFiZWwpOiBEb24ndCB3YXJuIGFib3V0IHVudXNlZCBsYWJlbHMgbW9yZSB0aGFuCglvbmNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2dvdG9fc3RtdCk6IEFsd2F5cyBtYXJrZWQgdXNlZCBsYWJlbHMgYXMKCXVzZWQuCgoJKiBkZWNsLmMgKGxheW91dF92YXJfZGVjbCk6IENoYW5nZSBwcm90b3R5cGUuICBDYWxsIGxheW91dF9kZWNsCglldmVuIHdoZW4gdGhlIGRlY2xhcmF0aW9uIGlzIGV4dGVybmFsLgoJKGNwX2ZpbmlzaF9kZWNsKTogQWRqdXN0IGNhbGwgdG8gbGF5b3V0X3Zhcl9kZWNsLgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IE1ha2Ugc3VyZSB0byBpbml0aWFsaXplIHN0bXQgYmVmb3JlIHVzaW5nIGl0LgoKMTk5OS0wOS0xOCAgTWFydGluIHZvbiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBBbHdheXMgY29uc2lkZXIKCXZpcnR1YWxpdHkgaW5zaWRlIG1lbWJlciBwb2ludGVyLgoKMTk5OS0wOS0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCglUdXJuIG9uIGZ1bmN0aW9uLWF0LWEtdGltZSBwcm9jZXNzaW5nLiAgCgkqIGNwLXRyZWUuaCAoZG9pbmdfc2VtYW50aWNfYW5hbHlzaXNfcCk6IE5ldyBtYWNyby4KCShTRl9ERUZBVUxUKTogRGVmaW5lIHRvIHplcm8sIG5vdCBTRl9FWFBBTkQuCgkoc3RhcnRfaGFuZGxlcl9wYXJtcyk6IENoYW5nZSBwcm90b3R5cGUuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLgoJKGV4cGFuZF9zdGFydF9laF9zcGVjKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogRGVjbGFyZS4KCShmaW5pc2hfaGFuZGxlcl9wYXJtcyk6IENoYW5nZSBwcm90b3R5cGUuCgkoYmVnaW5fY2F0Y2hfYmxvY2spOiBEZWNsYXJlLgoJKGZpbmlzaF9oYW5kbGVyKTogQ2hhbmdlIHByb3RvdHlwZS4KCShkb19wdXNobGV2ZWwpOiBEZWNsYXJlLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuICAKCSogZGVjbC5jIChwdXNobGV2ZWwpOiBEb24ndCBjcmVhdGUKCWJpbmRpbmcgbGV2ZWxzIHdoZW4gbm90IGRvaW5nIHNlbWFudGljIGFuYWx5c2lzLgoJKHBvcGxldmVsKTogRG9uJ3QgcG9wIHRoZW0uCgkocHVzaGRlY2wpOiBBc3NlcnQgdGhhdCB3ZSBhcmUgbmV2ZXIgY2FsbGVkIHdoZW4gbm90IGRvaW5nCglzZW1hbnRpYyBhbmFseXNpcy4KCShwdXNoZGVjbF90b3BfbGV2ZWwpOiBVc2UgcHVzaF90b190b3BfbGV2ZWwuCgkobWFrZV9sYWJlbF9kZWNsKTogRG9uJ3QgZmlkZGxlIHdpdGggb2JzdGFja3MuICBNYWtlIFJUTCBGb3IgdGhlCglsYWJlbCB3aGVuIGV4cGFuZGluZy4KCShjcF9maW5pc2hfZGVjbCk6IE9ubHkgaW5qZWN0IGZvci1zY29wZSB2YXJpYWJsZXMgd2hlbiBkb2luZwoJc2VtYW50aWMgYW5hbHlzaXMuICBBZGQgY29tbWVudHMuCgkoc3RhcnRfaGFuZGxlcl9wYXJtcyk6IFJldHVybiB0aGUgaGFuZGxlciBwYXJtLgoJKHN0YXJ0X2Z1bmN0aW9uKTogUmVvcmdhbml6ZS4gIERvbid0IGNsZWFyIERFQ0xfSU5JVElBTCBpZiBpdCBpcwoJYWxyZWFkeSBzZXQuICBSZWluaXRpYWxpemUgZnJvbSBzYXZlZCBmdW5jdGlvbiBkYXRhIGlmIGF2YWlsYWJsZS4KCURvbid0IHB1c2hsZXZlbCB3aGVuIG5vdCBkb2luZyBzZW1hbnRpYyBhbmFseXNpcy4KCShzdG9yZV9wYXJtX2RlY2xzKTogT25seSBnZW5lcmF0ZSBSVEwgd2hlbiBleHBhbmRpbmcuICBPbmx5CglwdXNoZGVjbCB3aGVuIGRvaW5nIHNlbWFudGljIGFuYWx5c2lzLiAgU2V0CgljdXJyZW50X2VoX3NwZWNfdHJ5X2Jsb2NrIGlmIGFwcHJvcHJpYXRlLgoJKGZpbmlzaF9mdW5jdGlvbik6IFNpbXBsaWZ5LiAgVXNlIGRvX3B1c2hsZXZlbCBhbmQgZG9fcG9wbGV2ZWwuCglDb21iaW5lIGNvbW1vbiBjb2RlLiAgRG9uJ3QgcG9wbGV2ZWwgd2hlbiBub3QgZG9pbmcgc2VtYW50aWMKCWFuYWx5c2lzLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IERvbid0IGV4cGFuZCBmdW5jdGlvbnMgd2l0aG91dCBhbgoJZXhwbGljaXQgY2FsbCB0byBleHBhbmRfYm9keS4KCShtYXJrX2xhbmdfZnVuY3Rpb24pOiBNYWtlIGVoX3NwZWNfdHJ5X2Jsb2NrIGFuZAoJeF9zY29wZV9zdG10X3N0YWNrLiAgCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2VoX3NwZWMpOiBEb24ndAoJZGVjbGFyZS4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkocHVzaF9laF9jbGVhbnVwKTogVXNlIGZpbmlzaF9kZWNsX2NsZWFudXAuCgkoaW5pdGlhbGl6ZV9oYW5kbGVyX3Bhcm0pOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogVXNlIGl0LgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBVc2UgdHJlZS1nZW5lcmF0aW9uIGZ1bmN0aW9ucywgbm90CglSVEwtZ2VuZXJhdGlvbiBmdW5jdGlvbnMuCgkoZXhwYW5kX3N0YXJ0X2VoX3NwZWMpOiBMaWtld2lzZS4KCShleHBhbmRfZW5kX2VoX3NwZWMpOiBMaWtld2lzZS4KCShleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IFNpbXBsaWZ5LgoJKHN0YXJ0X2Fub25fZnVuYyk6IFVzZSBkb19wdXNobGV2ZWwuCgkoZW5kX2Fub25fZnVuYyk6IFVzZSBkb19wb3BsdmVsLiAgQ2FsbCBleHBhbmRfYm9keSBmb3IgdGhlCglmdW5jdGlvbi4gIAoJKiBleHByLmMgKGRvX2Nhc2UpOiBEb24ndCBjYWxsIGRlZmluZV9jYXNlX2xhYmVsLiAgCgkqIGluaXQuYyAoY3JlYXRlX3RlbXBvcmFyeV92YXIpOiBTZXQgREVDTF9DT05URVhUIGZvciBsb2NhbAoJdmFyaWFibGVzLiAgCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogQ2FsbCBleHBhbmRfYm9keSBmb3IgdGhlCgl0aHVuay4KCShzeXRoZXNpemVfbWV0aG9kKTogTGlrZXdpc2UuICAKCSogcGFyc2UueSAoaGFuZGxlcl9hcmdzKTogR2l2ZSBpdCB0dHlwZS4KCShlYXRfc2F2ZWRfaW5wdXQpOiBDYWxsIGV4cGFuZF9ib2R5LgoJKGJhc2VfaW5pdCk6IFVzZSBkb19wdXNobGV2ZWwuCgkocGVuZGluZ19pbmxpbmUpOiBDYWxsIGV4cGFuZF9ib2R5LgoJKGhhbmRsZXIpOiBBZGp1c3QgY2FsbHMgdG8gZmluaXNoX2hhbmRsZXJfcGFybXMgYW5kCglmaW5pc2hfaGFuZGxlci4KCShoYW5kbGVyX2FyZ3MpOiBEb24ndCBjYWxsIGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jay4gIFJldHVybiB0aGUKCWNhdGNoIHBhcmFtZXRlci4gICogcHQuYyAodHN1YnN0X2V4cHIpOiBBZGp1c3QgSEFORExFUiBoYW5kbGluZy4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IENhbGwgZmluaXNoX2Z1bmN0aW9uLiAgCgkqIHNlbWFudGljcy5jIChkb19wdXNobGV2ZWwpOiBHaXZlIGl0IGV4dGVybmFsIGxpbmthZ2UuICBCdWlsZAoJU0NPUEVfU1RNVHMuCgkoZG9fcG9wbGV2ZWwpOiBMaWtld2lzZS4KCShmaW5pc2hfY2FzZV9sYWJlbCk6IENhbGwgZGVmaW5lX2Nhc2VfbGFiZWwgd2hlbiBkb2luZyBzZW1hbnRpYwoJYW5hbHlzaXMuCgkoZmluaXNoX2dvdG9fc3RtdCk6IENyZWF0ZSBSVEwgZm9yIGxhYmVscy4KCShmaW5pc2hfZnVuY3Rpb25fdHJ5X2Jsb2NrKTogU2V0IGluX2Z1bmN0aW9uX3RyeV9oYW5kbGVyCgl1bmNvbmRpdGlvbmFsbHkuCgkoZmluaXNoX2Z1bmN0aW9uX2hhbmRsZXJfc2VxdWVuY2UpOiBVbnNldCBpdC4KCShmaW5pc2hfaGFuZGxlcl9wYXJtcyk6IFVzZSBleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2sgZXZlbiB3aGVuCglidWlsZGluZyBhIHN0YXRlbWVudC10cmVlLgoJKGJlZ2luX2NhdGNoX2Jsb2NrKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9oYW5kbGVyKTogTW92ZSBhIGxpdHRsZSBSVEwtZ2VuZXJhdGlvbiBsb2dpYyBoZXJlLgoJKGZpbmlzaF9kZWNsX2NsZWFudXApOiBBbGxvdyBjbGVhbnVwcyBmb3IgZW1wdHkgZGVjbGFyYXRpb25zLgoJKGZpbmlzaF9uYW1lZF9yZXR1cm5fdmFsdWUpOiBEb24ndCBwdXNoZGVjbCB3aGVuIG5vdCBkb2luZwoJc2VtYW50aWMgYW5hbHlzaXMuCgkoZXhwYW5kX3N0bXQpOiBEb24ndCBkbyBzZW1hbnRpYyBhbmFseXNpcyBmb3IgdmFyaWFibGUKCWRlY2xhcmF0aW9ucy4gIEhhbmRsZSBTVEFSVF9DQVRDSF9TVE1ULiAgQ2FsbCBleHBhbmRfbGFiZWwKCWRpcmVjdGx5IGZvciBhIExBQkVMX1NUTVQuICBUd2VhayBoYW5kbGluZyBvZiBHT1RPX1NUTVQuICBBZGp1c3QKCUhBTkRMRVJzLiAgSGFuZGxlIFNDT1BFX1NUTVQsIENUT1JfSU5JVElBTElaRVIsIGFuZCBSRVRVUk5fSU5JVC4KCShleHBhbmRfYm9keSk6IExldCBleHBhbmRfc3RtdCBoYW5kbGUgQ1RPUl9JTklUSUFMSVpFUiwKCVJFVFVSTl9JTklUIGFuZCBmdW5jdGlvbiB0cnkgYmxvY2tzLgoJCgkqIGNwLXRyZWUuaCAobGFuZ3VhZ2VfZnVuY3Rpb24pOiBBZGQgeF9laF9zcGVjX3RyeV9ibG9jay4gIEFkZAoJeF9zY29wZV9zdG10X3N0YWNrLiAgQWRkIHhfaW5fY2hhcmdlX3Bhcm0uCgkoY3VycmVudF9laF9zcGVjX3RyeV9ibG9jayk6IE5ldyBtYWNyby4KCShjdXJyZW50X3Njb3BlX3N0bXRfc3RhY2spOiBMaWtld2lzZS4KCShjdXJyZW50X2luX2NoYXJnZV9wYXJtKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBJbml0aWFsaXplIGN1cnJlbnRfaW5fY2hhcmdlX3Bhcm0uCgkoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGN1cnJlbnRfaW5fY2hhcmdlX3Bhcm0gcmF0aGVyIHRoYW4gbG9va2luZwoJdXAgX19pbl9jaHJnLgoJKiBzZWFyY2guYyAoZXhwYW5kX2luZGlyZWN0X3Z0YmxzX2luaXQpOiBMaWtld2lzZS4KCgkqIGNwLXRyZWUuZGVmIChDTEVBTlVQX1NUTVQpOiBGaXggc3BlbGxpbmcgaW4gZHVtcHMuCgkoVFJZX0JMT0NLKTogTGlrZXdpc2UuCgkoSEFORExFUik6IExpa2V3aXNlLgoJKFNUQVJUX0NBVENIX1NUTVQpOiBOZXcgdHJlZSBub2RlLgoJKFNDT1BFX1NUTVQpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChTQ09QRV9CRUdJTl9QKTogTmV3IG1hY3JvLgoJKFNDT1BFX05VTExJRklFRF9QKTogTGlrZXdpc2UuCgkoc3RydWN0IGxhbmdfZGVjbF9mbGFncyk6IEFkZCBwZW5kaW5nX2lubGluZV9wLiAgQWRqdXN0IGR1bW15LgoJKHN0cnVjdCBsYW5nX2RlY2wpOiBBZGQgc2F2ZWRfbGFuZ3VhZ2VfZnVuY3Rpb24uCgkoREVDTF9QRU5ESU5HX0lOTElORV9JTkZPKTogQWRqdXN0IGRvY3VtZW50YXRpb24uCgkoREVDTF9QRU5ESU5HX0lOTElORV9QKTogTmV3IG1hY3JvLgoJKFRZUEVfVElfQVJHUyk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkoREVDTF9TQVZFRF9UUkVFKTogQWRkIHRvIGRvY3VtZW50YXRpb24uCgkoREVDTF9TQVZFRF9GVU5DVElPTl9EQVRBKTogTmV3IG1hY3JvLgoJKFNUQVJUX0NBVENIX1RZUEUpOiBMaWtld2lzZS4KCShTQ09QRV9FTkRfUCk6IE5ldyBtYWNyby4KCShkZWNsYXJlX3Bhcm1fbGV2ZWwpOiBEb24ndCBkZWNsYXJlLgoJKiBkZWNsLmMgKG1hcmtfbGFuZ19mdW5jdGlvbik6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20KCW1hcmtfY3BfZnVuY3Rpb25fY29udGV4dC4KCShzYXZlX2Z1bmN0aW9uX2RhdGEpOiBOZXcgZnVuY3Rpb24uCgkoZGVjbGFyZV9wYXJtX2xldmVsKTogUmVtb3ZlLgoJKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBzYXZlX2Z1bmN0aW9uX2RhdGEgdG8gc3F1aXJyZWwgYXdheQoJaW1wb3J0YW50IHN0dWZmIGZvciBsYXRlciB1c2UuCgkobWFya19jcF9mdW5jdGlvbl9jb250ZXh0KTogVXNlIG1hcmtfZnVuY3Rpb25fZGF0YS4KCShsYW5nX21hcmtfdHJlZSk6IExpa2V3aXNlLgoJKiBsZXguYyAoYmVnaW5fZGVmaW5pdGlvbl9vZl9pbmNsYXNzX2lubGluZSk6IFNldAoJREVDTF9QRU5ESU5HX0lOTElORV9QLgoJKHN0b3JlX3BlbmRpbmdfaW5saW5lKTogQ2xlYXIgaXQuCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogTGlrZXdpc2UuCgoxOTk5LTA5LTE3ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY2FsbC5jIChwZXJmb3JtX2ltcGxpY2l0X2NvbnZlcnNpb24pOiBEZWFsIHdpdGggZXJyb3JfbWFya19ub2RlLgoKMTk5OS0wOS0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAod2Fybl9leHRlcm5fcmVkZWNsYXJlZF9zdGF0aWMpOiBEb24ndCBnZXQgY29uZnVzZWQgYnkKCXN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLgoJKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIERFQ0xfVEhJU19TVEFUSUMuCgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IE1ha2Ugc3VyZSBhc3NpZ25tZW50cyB0byBsb2NhbAoJc3RhdGljcyBhY3R1YWxseSBvY2N1ci4KCjE5OTktMDktMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKHBvcGxldmVsX2NsYXNzKTogRGVjbGFyZS4KCSogY2xhc3MuYyAocG9wY2xhc3MpOiBVc2UgcG9wbGV2ZWxfY2xhc3MsIG5vdCBwb3BsZXZlbC4KCSogZGVjbC5jIChwb3BsZXZlbF9jbGFzcyk6IERvbid0IG1ha2UgaXQgc3RhdGljLiAgRG9uJ3QgcmV0dXJuIGEKCXZhbHVlLgoJKHBvcGxldmVsKTogRG9uJ3QgY2FsbCBwb3BsZXZlbF9jbGFzczsgYWJvcnQgaW4gYSBjbGFzcwoJYmluZGluZyBsZXZlbCBpcyBzZWVuLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3RyYW5zbGF0aW9uX3VuaXQpOiBVc2UgcG9wX2V2ZXJ5dGhpbmcuCgkqIHBhcnNlLnkgKG1lbWJlcl9pbml0KTogQWxsb3cgZXJyb3JzLgoJKHBlbmRpbmdfaW5saW5lKTogQ2FsbCBmaW5pc2hfZnVuY3Rpb24uCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogQWRqdXN0LgoKMTk5OS0wOS0xNyAgR2FicmllbCBEb3MgUmVpcyAgPGdkckBjb2Rlc291cmNlcnkuY29tPgoJCgkqIGVycm9yLmM6IFJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uLgoJKGR1bXBfdGVtcGxhdGVfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkoZHVtcF90eXBlX3JlYWwpOiBVc2UgaXQuCgkoZHVtcF9kZWNsKTogTGlrZXdpc2UuCgkoZHVtcF9mdW5jdGlvbl9uYW1lKTogTGlrZXdpc2UuCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogRG9uJ3QgYmUgdG9vIHRhbGthdGl2ZSBhYm91dCBmdW5jdGlvbiByZXR1cm4KCXR5cGUgdmFyaWV0eS4KCjE5OTktMDktMTYgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGxleC5jIChpbml0X2NwcF9wYXJzZSk6IENhbGwgeGNhbGxvYywgbm90IG1hbGxvYy9iemVyby4KCgkqIHhyZWYuYyAoU0FMTE9DKTogQ2FsbCB4c3RyZHVwLCBub3QgeG1hbGxvYy9zdHJjcHkuCgoxOTk5LTA5LTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEFsc28gY2FsbCBjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zIGZvcgoJdGhlIHBlbmRpbmdfc3RhdGljcyBsaXN0LgoKMTk5OS0wOS0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGNwX3ByYWdtYV9pbXBsZW1lbnRhdGlvbik6IEFsbG93ICNwcmFnbWEgaW1wbGVtZW50YXRpb24KCWluIGhlYWRlciBmaWxlcy4KCjE5OTktMDktMTUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsZXguYyAobWFya19pbXBsX2ZpbGVfY2hhaW4pOiBGb2xsb3cgdGhlIG5leHQgY2hhaW4uCgoxOTk5LTA5LTE1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jICh3YXJuX2V4dGVybl9yZWRlY2xhcmVkX3N0YXRpYyk6IFNpbXBsaWZ5LiAgQ2F0Y2gKCXByb2JsZW1zIHdpdGggZXh0ZXJuICJDIiBmdW5jdGlvbnMgcmVkZWNsYXJlZCBhcyBzdGF0aWMuCgkoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBhIGJ1aWx0aW4gaXMgcmVkZWNsYXJlZCBzdGF0aWMsIG1ha2UgdGhlCgluZXcgZnVuY3Rpb24gaGF2ZSBpbnRlcm5hbCBsaW5rYWdlLgoJCjE5OTktMDktMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBWQV9BUkdfRVhQUi4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSogdHJlZS5jIChzZWFyY2hfdHJlZSk6IExpa2V3aXNlLgoJKG1hcGNhcik6IExpa2V3aXNlLgoKMTk5OS0wOS0xNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogdHlwZWNrMi5jIChhY2spOiBEb24ndCBkZWNsYXJlIHByb2duYW1lLgoKMTk5OS0wOS0xNCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAbHNkLmljLnVuaWNhbXAuYnI+CgoJKiBsZXguYyAoY3BfcHJhZ21hX2ludGVyZmFjZSwgY3BfcHJhZ21hX2ltcGxlbWVudGF0aW9uKTogQ29weQoJZmlsZW5hbWVzIHdpdGggZ2djX2FsbG9jX3N0cmluZy4KCjE5OTktMDktMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX3RhcmdldF9leHByKTogU2V0IFRSRUVfU0lERV9FRkZFQ1RTIG9uIHRoZSAKCVRBUkdFVF9FWFBSLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvbid0IHNldCBUUkVFX1NJREVfRUZGRUNUUyBvbgoJdGhlIFRBUkdFVF9FWFBSLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfbmV3KTogTGlrZXdpc2UuCgkoZ2V0X3RhcmdldF9leHByKTogTGlrZXdpc2UuCgkKVHVlIFNlcCAxNCAwMTo0NToxMCAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBNYWtlZmlsZS5pbjogIFByZXBlbmQgJChTSEVMTCkgdG8gbW92ZS1pZi1jaGFuZ2UgY2FsbHMuCgoxOTk5LTA5LTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChidWlsZF90YXJnZXRfZXhwcik6IE5ldyBmdW5jdGlvbi4KCSogY2FsbC5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogVXNlIGJ1aWxkX3RhcmdldF9leHByLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoYnVpbGRfY2xlYW51cF9vbl9zYWZlX29ic3RhY2spOiBGb2xkIGludG8gLi4uCgkoZGVzdHJveV9sb2NhbF92YXIpOiBIZXJlLgoJKGJ1aWxkX3RhcmdldF9leHByKTogTmV3IGZ1bmN0aW9uLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IFVzZSBpdC4KCShnZXRfdGFyZ2V0X2V4cHIpOiBMaWtld2lzZS4KCjE5OTktMDktMTMgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiB0eXBlY2suYyAoZXhwcl9zaXplb2YpOiBEb24ndCBkZWNheSBhcnJheXMgYW5kIGZ1bmN0aW9ucy4KCVJlbW92ZSBtaXNsZWFkaW5nIGNvbW1lbnQuCgkoYnVpbGRfY29tcG91bmRfZXhwcik6IERvbid0IGRlY2F5IGFycmF5cy4KCjE5OTktMDktMTMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IEFsd2F5cyB1c2UgYSBUQVJHRVRfRVhQUiBmb3IKCWNsYXNzIHJ2YWx1ZXMgYWdhaW4uCgpTdW4gU2VwIDEyIDIzOjI5OjA3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoZysrc3BlYy5vKTogRGVwZW5kIG9uIHN5c3RlbS5oIGFuZCBnY2MuaC4KCgkqIGcrK3NwZWMuYzogSW5jbHVkZSBnY2MuaC4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IENvbnN0aWZ5IGEgY2hhciouICBDYWxsIHhjYWxsb2MsIG5vdAogCXhtYWxsb2MvYnplcm8uICBBbGwgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgcGFyYW1ldGVyIG5vdwogCWV4cGxpY2l0bHkgY2FsbCBgZmF0YWwnLgoKMTk5OS0wOS0xMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNhbGwuYyAoaW1wbGljaXRfY29udmVyc2lvbik6IFJvYnVzdGlmeS4gIEhhbmRsZSBPRkZTRVRfUkVGcy4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogQ29tcGxldGUgdGhlIGZyb20gYW5kIGRlc3RpbmF0aW9uIHR5cGVzLgoJQWRqdXN0IHdhcm5pbmcgYWJvdXQgZnVuY3Rpb25zIGFsd2F5cyBiZWluZyBgdHJ1ZScgaW4gY29uZGl0aW9uYWxzLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IHBsYXkgZnVubnkgZ2FtZXMgd2l0aCBhYm9ydC4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogSGFuZGxlIE9WRVJMT0FEcy4KCSogc3Bldy5jIChwcm9iZV9vYnN0YWNrKTogUmVtb3ZlLgoJKiB0eXBlY2suYyAoY29uZGl0aW9uX2NvbnZlcnNpb24pOiBVc2UgcGVyZm9ybV9pbXBsaWNpdF9jb252ZXJzaW9uLgoJCjE5OTktMDktMTIgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogY3AtdHJlZS5oIChhdXRvX2Z1bmN0aW9uLCBkZWZpbmVfZnVuY3Rpb24pOiBBZGp1c3QgcHJvdG90eXBlcy4KCSogZGVjbC5jIChkZWZpbmVfZnVuY3Rpb24pOiBMb3NlIEZVTkNUSU9OX0NPREUgYXJnLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoYXV0b19mdW5jdGlvbik6IExpa2V3aXNlLCBmb3IgQ09ERSBhcmcuCglNb3ZlIGNvZGUgdG8gc2V0IERFQ0xfQlVJTFRfSU4gYW5kIERFQ0xfRlVOQ1RJT05fQ09ERSB0by4uLgoJKGJ1aWx0aW5fZnVuY3Rpb24pOiAuLi4gaGVyZS4KCjE5OTktMDktMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGFkZF9kZWNsX3RvX2xldmVsKTogUmVtb3ZlIFRSRUVfUEVSTUFORU5UIGFzc2VydGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IHNldCBUUkVFX1BFUk1BTkVOVCBmb3IgdGhlCgllcnJvcl9tYXJrX25vZGUuCgkoc3RhcnRfZGVjbCk6IERvbid0IHJlYnVpbGQgbm9uLXBlcm1hbmVudCBBUlJBWV9UWVBFcy4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGdyb2twYXJtcyk6IERvbid0IGNoZWNrIFRSRUVfUEVSTUFORU5UIHdoZW4gYnVpbGRpbmcgdXAgbGlzdHMuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IERvbid0IGFzc2VydCBUUkVFX1BFUk1BTkVOVC4KCShtYXJrX2lubGluZV9mb3Jfb3V0cHV0KTogTGlrZXdpc2UuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBEb24ndCBjaGVjayBUUkVFX1BFUk1BTkVOVC4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogRG9uJ3QgY2hlY2sgVFJFRV9QRVJNQU5FTlQuCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogRG9uJ3QgY2hlY2sgZ2djX3A7IGl0IGlzIGFsd2F5cyBvbmUuCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IERvbid0IGNoZWNrIFRSRUVfUEVSTUFORU5ULgoJKiBzcGV3LmMgKHl5bGV4KTogRG9uJ3QgY29weV9ub2RlIG9yIHByb2JlX29ic3RhY2tzIGZvcgoJbm9uLXBlcm1hbmVudCBDT05TVEFOVHMgYW5kIFNUUklOR3MuCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogRG9uJ3QgZnVzcyB3aXRoCglUUkVFX1BFUk1BTkVOVCBvbiBBUlJBWV9UWVBFcy4KCQoJKiBjcC10cmVlLmRlZiAoQ0xFQU5VUF9TVE1UKTogTmV3IG5vZGUuCgkqIGNwLXRyZWUuaCAobGFuZ3VhZ2VfZnVuY3Rpb24pOiBBZGQgbmFtZV9kZWNsYXJlZC4KCShjdXJyZW50X2Z1bmN0aW9uX25hbWVfZGVjbGFyZWQpOiBOZXcgbWFjcm8uCgkoQ0xFQU5VUF9ERUNMKTogTmV3IG1hY3JvLgoJKENMRUFOVVBfRVhQUik6IExpa2V3aXNlLgoJKGVtaXRfbG9jYWxfdmFyKTogTGlrZXdpc2UuCgkoZmluaXNoX2RlY2xfY2xlYW51cCk6IE5ldyBmdW5jdGlvbi4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFNpbXBsaWZ5LgoJKG9jcF9jb252ZXJ0KTogUmVtb3ZlIGRlYWQgY29kZS4KCSogZGVjbC5jIChzdGFydF9kZWNsKTogUmVtb3ZlIGNhbGwgdG8gYWRkX2RlY2xfc3RtdC4KCShncm9rX3JlZmVyZW5jZV9pbml0KTogQWRqdXN0LCB0byBoYW5kbGUgYmluZGluZ3MgdGVtcG9yYXJpZXMgdG8KCXJlZmVyZW5jZXMuICBSZW1vdmUgZGVhZCBjb2RlLgoJKGluaXRpYWxpemVfbG9jYWxfdmFyKTogRG9uJ3QgZ2VuZXJhdGUgUlRMIGZvcgoJZGVjbGFyYXRpb25zIGhlcmUsIG9yIGJ1aWxkIGNsZWFudXBzIGhlcmUuICBEb24ndCBmdXNzIHdpdGgKCW9ic3RhY2tzLiAgUmVwbGFjZSBleHBhbmRfc3RhcnRfdGFyZ2V0X3RlbXBzIGNhbGxzIHdpdGggZXhwbGljaXQKCXNldHRpbmcgb2Ygc3Rtc19hcmVfZnVsbF9leHByc19wLgoJKGRlc3Ryb3lfbG9jYWxfdmFyKTogTmV3IGZ1bmN0aW9uLgoJKGVtaXRfbG9jYWxfdmFyKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBVc2UgdGhlbSwgYXMgYXBwcm9wcmlhdGUuCgkoc3RhcnRfZnVuY3Rpb24pOiBBbm5vdW5jZSB0ZW1wbGF0ZSBmdW5jdGlvbnMuCgkoc3RvcmVfcGFybV9kZWNscyk6IERvbid0IGNhbGwgZGVjbGFyZV9mdW5jdGlvbl9uYW1lIGhlcmUuCgkoZmluaXNoX3N0bXQpOiBEb24ndCBzdGFydCBlbWl0IGJhc2UtaW5pdGlhbGl6YXRpb24gY29kZSB3aGVuIGp1c3QKCWJ1aWxkaW5nIHRoZSBzdGF0ZW1lbnQtdHJlZS4KCSogaW5pdC5jIChjcmVhdGVfdGVtcG9yYXJ5X3Zhcik6IE1vdmUgYWRkX2RlY2xfc3RtdCBjYWxsIC4uLgoJKGdldF90ZW1wX3JlZ3Zhcik6IEhlcmUuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogTWFrZSBERUNMX0lOSVRJQUwgbG9vayBsaWtlIHdoYXQKCWNwX2ZpbmlzaF9kZWNsIHdvdWxkIGV4cGVjdC4gIERvbid0IGNhbGwgYWRkX2RlY2xfc3RtdC4KCSogc2VtYW50aWNzLmMgKGJlZ2luX2NvbXBvdW5kX3N0bXQpOiBDYWxsIGRlY2xhcmVfZnVuY3Rpb25fbmFtZSwKCWlmIGFwcHJvcHJpYXRlLgoJKGZpbmlzaF9kZWNsX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX3N0bXQpOiBVc2UgZW1pdF9sb2NhbF92YXIgdG8gb3V0cHV0IHZhcmlhYmxlcy4JCQoJKGV4cGFuZF9ib2R5KTogU2V0IGN1cnJlbnRfZnVudGlvbl9uYW1lX2RlY2xhcmVkLgoJCjE5OTktMDktMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9jbGVhbnVwX3RyeV9ibG9jayk6IE5ldyBmdW5jdGlvbi4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9jbGVhbnVwX3RyeV9ibG9jayk6IEFkZCBjb21tZW50LgoKRnJpIFNlcCAxMCAxMDozMjozMiAxOTk5ICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGNwLXRyZWUuaDogRGVsZXRlIGRlY2xhcmF0aW9ucyBmb3IgYWxsIHRyZWUgbm9kZXMgbm93IG1vdmVkIHRvCglnbG9iYWxfdHJlZXMuCgkqIGRlY2wuYzogRGVsZXRlIHRoZWlyIGRlZmluaXRpb25zLgoJKFNIT1JUX1RZUEVfU0laRSwgSU5UX1RZUEVfU0laRSwgTE9OR19UWVBFX1NJWkUsIExPTkdfTE9OR19UWVBFX1NJWkUsCglGTE9BVF9UWVBFX1NJWkUsIERPVUJMRV9UWVBFX1NJWkUsIExPTkdfRE9VQkxFX1RZUEVfU0laRSk6IERvbid0Cglwcm92aWRlIGRlZmF1bHRzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ2FsbCBidWlsZF9jb21tb25fdHJlZV9ub2RlcyBhbmQKCWJ1aWxkX2NvbW1vbl90cmVlX25vZGVzXzIgaW5zdGVhZCBvZiBidWlsZGluZyB0aGVpciBub2RlcyBoZXJlLgoJRG9uJ3QgYWRkIGdjIHJvb3RzIGZvciB0aGVtLgoKMTk5OS0wOS0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ3VhZ2VfZnVuY3Rpb24pOiBSZW5hbWUgZXhwYW5kaW5nX3AgdG8KCXhfZXhwYW5kaW5nX3AuICBSZW5hbWUgbmFtZWRfbGFiZWxfdXNlcyB0byB4X25hbWVkX2xhYmVsX3VzZXMuCgkoZXhwYW5kaW5nX3ApOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkoVFJFRV9WSUFfUFJJVkFURSk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkoREVDTF9SRUZFUkVOQ0VfU0xPVCk6IFJlbW92ZS4KCShTRVRfREVDTF9SRUZFUkVOQ0VfU0xPVCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKG5hbWVkX2xhYmVsX3VzZXMpOiBBZGp1c3QuIFJlbW92ZSBjaGlja2VuIGNvbW1lbnQuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBEb24ndCB0cnVuY2F0ZSB0aGUgY2hhaW4gb2YgYmluZGluZ3Mgd2hlbgoJYWRkaW5nIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24uCgkoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IERvbid0IHVzZSBERUNMX1JFRkVSRU5DRV9TTE9ULgoJKGluaXRpYWxpemVfbG9jYWxfdmFyKTogRml4IHR5cG8gaW4gY29tbWVudC4KCShzdG9yZV9wYXJtX2RlY2xzKTogRG9uJ3Qgc2V0IERFQ0xfUkVGRVJFTkNFX1NMT1QuICBUaWR5IHVwLgoJKiBkZWNsMi5jIChzdGFydF9vYmplY3RzKTogTWFrZSB0aGUgZmFjdCB0aGF0IHdlIGFyZSBleHBhbmRpbmcKCXRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gcmlnaHQgYXdheSBleHBsaWNpdC4KCShzdGFydF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9maWxlKTogRml4IHR5cG8gaW4gY29tbWVudC4KCSogaW5pdC5jIChidWlsZF92ZWNfaW5pdCk6IENvcnJlY3QgYnVncyBpbiBoYW5kbGluZyBjbGVhbnVwcy4KCSogc2VtYW50aWNzLmMgKG1heWJlX2NvbnZlcnRfY29uZCk6IE5ldyBmdW5jdGlvbi4KCShGSU5JU0hfQ09ORCk6IEFsd2F5cyBzdG9yZSB0aGUgY29uZGl0aW9uLCBldmVuIGlmIHRoZXJlJ3MKCWEgZGVjbGFyYXRpb24uCgkoZmluaXNoX2lmX3N0bXRfY29uZCk6IFVzZSBtYXliZV9jb252ZXJ0X2NvbmQuCgkoZmluaXNoX3doaWxlX3N0bXRfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9kb19zdG10KTogTGlrZXdpc2UuCgkoZmluaXNoX2Zvcl9jb25kKTogTGlrZXdpc2UuCgkoZXhwYW5kX2NvbmQpOiBBZGp1c3QuCgkKCSogY3AtdHJlZS5oIChGTl9UUllfQkxPQ0tfUCk6IE5ldyBtYWNyby4KCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogUmVtb3ZlIG9ic3RhY2sgbWFjaGluYXRpb25zLgoJKGV4cGFuZF9jbGVhbnVwX2Zvcl9iYXNlKTogTGlrZXdpc2UuCgkoZmluaXNoX2luaXRfc3RtdHMpOiBNYXJrIHRoZSBzdGF0ZW1lbnQtZXhwcmVzc2lvbiBhcyB1c2VkLgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFVzZSB0cmVlLWdlbmVyYXRpbmcgZnVuY3Rpb25zLCBub3QKCVJUTC4KCShkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCgkoZG9fYnVpbGRfYXNzaWduX3JlZik6IExpa2V3aXNlLgoJKHN5bnRoZXNpemVfbWV0aG9kKTogTGlrZXdpc2UuICBLZWVwIHRyYWNrIG9mIGxpbmUgbnVtYmVycy4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBIYW5kbGUgdmFyaW91cyBraW5kcyBvZiB0cnkgYmxvY2tzLgoJKiBzZW1hbnRpY3MuYyAoZXhwYW5kX3N0bXRzKTogUmVtb3ZlLgoJKGJlZ2luX2Z1bmN0aW9uX3RyeV9ibG9jayk6IFNldCBGTl9UUllfQkxPQ0tfUC4KCShmaW5pc2hfZnVuY3Rpb25fdHJ5X2Jsb2NrKTogQmUgY2FyZWZ1bCByZWNoYWluaW5nIAoJZnVuY3Rpb24gdHJ5IGJsb2Nrcy4KCShleHBhbmRfc3RtdCk6IExvb3AgdGhyb3VnaCBhbGwgdGhlIHN0YXRlbWVudHMgYXQgYSBnaXZlbiBsZXZlbC4KCShleGFwbmRfYm9keSk6IEJlIGNhcmVmdWwgd2l0aCBsaW5lLW51bWJlcnMgaGVyZSB0b28uICBQcmVwYXJlIGZvcgoJYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIHBhcnNlci4KCgkqIGNwLXRyZWUuaCAoZmluaXNoX2Z1bmN0aW9uKTogQWRqdXN0IHByb3RvdHlwZS4KCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBSZXR1cm4gdGhlIGZ1bmN0aW9uIGNvbXBpbGVkLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG9uJ3QgcGxheSBnYW1lcyB3aXRoIG9ic3RhY2tzLgoJKiB0cmVlLmMgKG1hcGNhcik6IEhhbmRsZSBPRkZTRVRfUkVGIGFuZCBCSVRfRklFTERfUkVGLgoJKHNlYXJjaF90cmVlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKiB0eXBlY2syLmMgKHN0b3JlX2luaXRfdmFsdWUpOiBBZGQgY29tbWVudC4KCgkqIGNwLXRyZWUuaCAoQ1BUSV9BVEVYSVQpOiBOZXcgbWFjcm8uCgkoYXRleGl0X25vZGUpOiBMaWtld2lzZS4KCSogZGVjbC5jIChkZXN0cm95X2xvY2FsX3N0YXRpYyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBmcm9tIC4uLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IEhlcmUuCgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBUaGVzZSBzaG91bGQgYWx3YXlzIGJlIGdsb2JhbAoJKGV4cGFuZF9zaV9kZXNjKTogVXNlIHRyZWUsIG5vdCBSVEwsIGZ1bmN0aW9ucyB0byBnZW5lcmF0ZSBjb2RlLgoJKGV4cGFuZF9jbGFzc19kZXNjKTogTGlrZXdpc2UuCgkoZXhwYW5kX3B0cl9kZXNjKTogTGlrZXdpc2UuCgkoZXhwYW5kX2F0dHJfZGVzYyk6IExpa2V3aXNlLgoJKGV4cGFuZF9nZW5lcmljX2Rlc2MpOiBMaWtld2lzZS4KCShzeW50aGVzaXplX3RpbmZvX2ZuKTogTGlrZXdpc2UuCgoxOTk5LTA5LTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc2VtYW50aWNzLmMgKFJFQ0hBSU5fU1RNVFMpOiBSZW1vdmUgYGxhc3QnIHBhcmFtZXRlci4KCShSRUNIQUlOX1NUTVRTX0ZST01fTEFTVCk6IFJlbW92ZS4gIFJlcGxhY2UgYWxsIHVzZXMgd2l0aAoJUkVDSEFJTl9TVE1UUy4gCgkoUkVDSEFJTl9TVE1TVF9GUk9NX0NIQUlOKTogTGlrZXdpc2UuCgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IEZpeCB0eXBvIGluIGxhc3QgY2hhbmdlLgoKCSogY3AtdHJlZS5oIChFWFBSX1NUTVRfQVNTSUdOU19USElTKTogTmV3IG1hY3JvLgoJKFNUTVRfSVNfRlVMTF9FWFBSX1ApOiBMaWtld2lzZS4KCShTVE1UX0xJTkVOT19GT1JfRk5fUCk6IExpa2V3aXNlLgoJKHByZXBfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZGluZ19zdG10X3RyZWUpOiBUd2VhayBmb3Igc2FmZXR5LgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFVzZSBwcmVwX3N0bXQgdGhyb3VnaG91dC4KCShhZGRfdHJlZSk6IE1vdmUgaXQgdG8gc2VtYW50aWNzLmMKCSogc2VtYW50aWNzLmMgKGFkZF90cmVlKTogTW92ZSBpdCBoZXJlLgoJKGZpbmlzaF9leHByX3N0bXRfcmVhbCk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfZXhwcl9zdG10KTogVXNlIGl0LgoJKGZpbmlzaF9pZl9zdG10X2NvbmQpOiBVc2UgRklOSVNIX0NPTkQuCgkoZmluaXNoX3doaWxlX3N0bXRfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdG10X3RyZWUpOiBUd2VhayBsaW5lLW51bWJlciBoYW5kbGluZy4KCShwcmVwX3N0bXQpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX3N0bXQpOiBVc2UgaXQuCgkKCSogY3AtdHJlZS5oIChiZWdpbl9zd2l0Y2hfc3RtdCk6IEFkanVzdCBwcm90b3R5cGUuCgkoZmluaXNoX3N3aXRjaF9jb25kKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHNpbXBsZV9zdG10KTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkqIHNlbWFudGljcy5jIChleHBhbmRfY29uZCk6IE5ldyBmdW5jdGlvbi4KCShGSU5JU0hfQ09ORCk6IE5ldyBtYWNyby4KCShiZWdpbl9zd2l0Y2hfc3RtdCk6IEJ1aWxkIHRoZSBTV0lUQ0hfU1RNVCBoZXJlLgoJKGZpbmlzaF9zd2l0Y2hfc3RtdF9jb25kKTogTm90IGhlcmUuCgkoZXhwYW5kX3N0bXQpOiBBZGp1c3QgY2FsbHMgdG8gYmVnaW5fc3dpdGNoX3N0bXQgYW5kCglmaW5pc2hfc3dpdGNoX2NvbmQuICBVc2UgZXhwYW5kX2NvbmQgdGhyb3VnaG91dC4KCgkqIGR1bXAuYyAoZGVxdWV1ZV9hbmRfZHVtcCk6IER1bXAgdHlwZXMgZm9yIGNvbnN0YW50cy4KCURlc2NyaWJlIERFQ0xfQVJHX1RZUEUgbW9yZSBpbnR1aXRpdmVseS4KCUhhbmRsZSBBUlJBWV9SRUYuCgoJKiBkZWNsLmMgKGxhbmdfbWFya190cmVlKTogTWFyayBUWVBFX0xBTkdfU1BFQ0lGSUMuCgkobGFuZ19jbGVhbnVwX3RyZWUpOiBSZW1vdmUuCgkqIGxleC5jIChtYWtlX2xhbmdfdHlwZSk6IFVzZSBnZ2NfYWxsb2MgdG8gYWxsb2NhdGUKCVRZUEVfTEFOR19TUEVDSUZJQy4KCglSZW9yZ2FuaXplIHBlci1mdW5jdGlvbiBkYXRhLgoJKiBjcC10cmVlLmggKHNhdmVkX3Njb3BlKTogQWRkIGZ1bmN0aW9uX2RlY2wsIGJpbmRpbmdzLgoJKGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVuYW1lIGJpbmRpbmdfbGV2ZWwgdG8gYmluZGluZ3MuCgkoY3BfZnVuY3Rpb25fY2hhaW4pOiBVc2UgdGhlIGN1cnJlbnRfZnVuY3Rpb24sIG5vdCB0aGUKCW91dGVyX2Z1bmN0aW9uX2NoYWluLgoJKGN1cnJlbnRfY2xhc3NfcHRyKTogTWFrZSBpdCB3b3JrLCBldmVuIHdoZW4gdGhlcmUncyBubyAKCWN1cnJlbnQgZnVuY3Rpb24uCgkoY3VycmVudF9jbGFzc19yZWYpOiBMaWtld2lzZS4KCShTRl9ERUZBVUxULCBTRl9QUkVfUEFSU0VELCBTRl9JTkNMQVNTX0lOTElORSwgU0ZfRVhQQU5EKTogTmV3IAoJbWFjcm9zLgoJKGNsZWFyX3RlbXBfbmFtZSk6IFJlbW92ZS4KCSogZGVjbC5jIChjaGVja19mdW5jdGlvbl90eXBlKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IGZyb20KCXN0YXJ0X2Z1bmN0aW9uLgoJKGN1cnJlbnRfYmluZGluZ19sZXZlbCk6IEFkanVzdCBkZWZpbml0aW9uLgoJKHB1c2hsZXZlbCk6IFNpbXBsaWZ5LgoJKHBvcGxldmVsKTogRG9uJ3QgdXNlIG5hbWVkX2xhYmVsX3VzZXMgd2hlbiB3ZSdyZSBvdXRzaWRlCglhIGZ1bmN0aW9uIHNjb3BlLgoJKG1hcmtfc2F2ZWRfc2NvcGUpOiBNYXJrIGZ1bmN0aW9uX2RlY2wgYW5kIGJpbmRpbmdzLgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3QgdW5jb25kaXRpb25hbGx5IHB1c2ggYSBuZXcKCWZ1bmN0aW9uIGNvbnRleHQuICBTYXZlIGJpbmRpbmdzIGFuZCB0aGUgY3VycmVudF9mdW5jdGlvbl9kZWNsLgoJRG9uJ3QgY2xlYXIgbmFtZWRfbGFiZWxzLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFBvcCBmdW5jdGlvbiBjb250ZXh0IGlmIGFwcHJvcHJpYXRlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IGluaXRfbGFuZ19zdGF0dXMgYW5kIGZyZWVfbGFuZ19zdGF0dXMsCglyYXRoZXIgdGhhbiBzYXZlX2xhbmdfc3RhdHVzIGFuZCByZXN0b3JlX2xhbmdfc3RhdHVzLgoJKHN0YXJ0X2Z1bmN0aW9uKTogVGFrZSBTRl8qIGZsYWdzLiAgRG9uJ3QgY2xlYXIgcGVyLWZ1bmN0aW9uIGRhdGEuCglSZW9yZGVyIGFuZCBzaW1wbGlmeSB0byB1c2UgbmV3IHBlci1mdW5jdGlvbiBkYXRhIGNvZGUuICBBZGQKCWFzc2VydHMuCgkoc3RvcmVfcGFybV9kZWNscyk6IERvbid0IGNhbGwgaW5pdF9mdW5jdGlvbl9zdGFydCBoZXJlLgoJKGZpbmlzaF9mdW5jdGlvbik6IEFkanVzdCBmb3IgbmV3IGhhbmRsaW5nIG9mIHBlci1mdW5jdGlvbiBkYXRhLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IFNpbXBsaWZ5LgoJKG1hcmtfY3BfZnVuY3Rpb25fY29udGV4dCk6IENoYW5nZSBiaW5kaW5nX2xldmVsIHRvIGJpbmRpbmdzLgoJKiBkZWNsMi5jIChjbGVhcl90ZW1wX25hbWUpOiBSZW1vdmUuCgkoc3RhcnRfb2JqZWN0cyk6IFVzZSBTRiBmbGFncyB0byBzdGFydF9mdW5jdGlvbi4KCShzdGFydF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBleGNlcHQuYyAoc3RhcnRfYW5vbl9mdW5jKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxscyB0byAKCXB1c2hfZnVuY3Rpb25fY29udGV4dF90by4gIFVzZSBTRiBmbGFncyB0byBzdGFydCBmdW5jdGlvbi4KCShlbmRfYW5vbl9mdW5jKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIHRvIHBvcF9mdW5jdGlvbl9jb250ZXh0Cglmcm9tLgoJKiBsZXguYyAocmVpbml0X3BhcnNlX2Zvcl9mdW5jdGlvbik6IERvbid0IGluaXRpYWxpemUgcGVyLWZ1bmN0aW9uIAoJZGF0YS4KCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBDbGVhciBjdXJyZW50X2Z1bmN0aW9uIGFmdGVyIGNhbGxpbmcKCWFzc2VtYmxlX2VuZF9mdW5jdGlvbi4gIFVzZSBTRiBmbGFncyBmb3Igc3RhcnRfZnVuY3Rpb24uCgkoc3ludGhlc2l6ZV9tZXRob2QpOiBVc2UgU0YgZmxhZ3MgZm9yIHN0YXJ0X2Z1bmN0aW9uLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogcGFyc2UueSAoZm4uZGVmcGVuKTogTGlrZXdpc2UuCgkocGVuZGluZ19pbmxpbmUpOiBDbGVhciBjdXJyZW50X2Z1bmN0aW9uLCBldmVuIGlmIHNvbWV0aGluZyBnb2VzCgl3cm9uZy4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IFVzZSBTRiBmbGFncyB0byBzdGFydF9mdW5jdGlvbi4KCURvbid0IHNhdmUgYW5kIHJlc3RvcmUgZXhwYW5kaW5nX3AuCgkoYWRkX3RyZWUpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIG91dHNpZGUgYW55IGZ1bmN0aW9uLgoJKGVuZF90cmVlKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoc3l0aGVzaXplX3RpbmZvX2ZuKTogVXNlIFNGIGZsYWdzIHRvIHN0YXJ0X2Z1bmN0aW9uLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fZnVuY3Rpb25fZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGV4cGFuZF9ib2R5KTogTGlrZXdpc2UuCgkKMTk5OS0wOS0wOSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNwLXRyZWUuaCAoY29udmVydF90b192b2lkKTogUHJvdG90eXBlIG5ldyBmdW5jdGlvbi4KCShyZXF1aXJlX2NvbXBsZXRlX3R5cGVfaW5fdm9pZCk6IFJlbW92ZSBwcm90b3R5cGUuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3ZvaWQpOiBOZXcgZnVuY3Rpb24uCgkob2NwX2NvbnZlcnQpOiBVc2UgY29udmVydF90b192b2lkLgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBMaWtld2lzZSwgZm9yIGNvbXBsZXRlCglleHByZXNzaW9ucy4KCSogdHlwZWNrLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZV9pbl92b2lkKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKGJ1aWxkX2NvbXBvdW5kX2V4cHIpOiBVc2UgY29udmVydF90b192b2lkLgoJKGJ1aWxkX3N0YXRpY19jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfY19jYXN0KTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfZXhwcl9zdG10KTogRG8gbm90IGRlY2F5IGZ1bGwgZXhwcmVzc2lvbnMuCgkKCSogdHlwZWNrLmMgKGJ1aWxkX3hfY29tcG91bmRfZXhwcik6IEFkZCBGSVhNRS4KCjE5OTktMDktMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKHNjcmF0Y2hfdHJlZV9jb25zKTogUmVtb3ZlLgoJKiBjYWxsLmM6IFJlcGxhY2UgYWxsIHVzZXMgb2YgZXhwcl90cmVlX2NvbnMsIHNhdmVhYmxlX3RyZWVfY29ucywKCWFuZCBwZXJtX3RyZWVfY29ucyB3aXRoIHBsYWluIHRyZWVfY29ucy4KCSogY2xhc3MuYzogTGlrZXdpc2UuCgkqIGRlY2wuYzogTGlrZXdpc2UuCgkqIGRlY2wyLmM6IExpa2V3aXNlLgoJKiBleGNlcHQuYzogTGlrZXdpc2UuCgkqIGV4cHIuYzogTGlrZXdpc2UuCgkqIGluaXQuYzogTGlrZXdpc2UuCgkqIGxleC5jOiBMaWtld2lzZS4KCSogbWV0aG9kLmM6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCSogcHQuYzogTGlrZXdpc2UuCgkqIHJlcG8uYzogTGlrZXdpc2UuCgkqIHJ0dGkuYzogTGlrZXdpc2UuCgkqIHNlYXJjaC5jOiBMaWtld2lzZS4KCSogdHlwZWNrLmM6IExpa2V3aXNlLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogdHJlZS5jIChidWlsZF9zcmNsb2MpOiBTaW1wbGlmeS4KCQoxOTk5LTA5LTA4ICBCcnVjZSBLb3JiICBhdXRvZ2VuQGxpbnV4Ym94LmNvbQoKCSogTWFrZWZpbGUuaW46IEdpdmUgdGhlIGdwZXJmIHVzZXIgYSBoaW50IGFib3V0IHdoeSAiZ3BlcmYgLUYiIGZhaWxzLgoKMTk5OS0wOS0wOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ19kZWNsX2ZsYWdzKTogUmVtb3ZlIHBlcm1hbmVudF9hdHRyLgoJUmVtb3ZlIG5leHQuCgkoTEFOR19ERUNMX1BFUk1BTkVOVCk6IFJlbW92ZS4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBtZXNzIGFib3V0IHdpdGggb2JzdGFja3MgdHJ5aW5nCgl0byBmcmVlIG1lbW9yeS4KCShsYW5nX21hcmtfdHJlZSk6IE1hcmsgREVDTF9MQU5HX1NQRUNJRklDLgoJKiBsZXguYyAoZnJlZV9sYW5nX2RlY2xfY2hhaW4pOiBSZW1vdmUuCgkoYnVpbGRfbGFuZ19kZWNsKTogRG9uJ3QgdXNlIG9ic3RhY2tzLgoJKHJldHJvZml0X2xhbmdfZGVjbCk6IExpa2V3aXNlLgoJKGNvcHlfbGFuZ19kZWNsKTogTGlrZXdpc2UuCgoJKiBjcC10cmVlLmggKHNhdmVkX3Njb3BlKTogUmVtb3ZlIG9sZF9iaW5kaW5nX2xldmVsIGFuZCAKCWZ1bmN0aW9uX2RlY2wuICBUaWR5IHVwLgoJKiBkZWNsLmMgKG1hcmtfc2F2ZWRfc2NvcGUpOiBEb24ndCBzZXQgdGhlbS4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IENsZWFyIG1lbW9yeS4KCgkqIGRlY2wuYyAobGF5b3V0X3Zhcl9kZWNsKTogQ2hhbmdlIHByb3RvdHlwZS4gIERvbid0IGNvbXBsZXRlCgl0eXBlcyBmb3IgZXh0ZXJuYWwgb2JqZWN0cy4KCShjaGVja19pbml0aWFsaXplcik6IExpa2V3aXNlLiAgVGlkeS4KCShpbml0aWFsaXplX2xvY2FsX3Zhcik6IENvbXBsZXRlIHR5cGVzIGhlcmUuCgkoY3BfZmluaXNoX2RlY2wpOiBOb3QgaGVyZS4gIFJlb3JnYW5pemUgYSBsaXR0bGUuCgkoZ3Jva3ZhcmRlY2wpOiBEb24ndCBjb21wbGV0ZSB0eXBlcyBoZXJlLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IENsZWFyIGxhc3RfZHRvcl9pbnNuIGFuZAoJbGFzdF9wYXJtX2NsZWFudXBfaW5zbi4gCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogSnVzdCBjb3B5IG92ZXIgYSBsaXR0bGUgb2YKCXRoZSBvbGQgY29udGV4dCwgbm90IGFsbCBvZiBpdC4KCgkqIGNwLXRyZWUuaCAoY29weV90b19wZXJtYW5lbnQpOiBSZW1vdmUuCgkocGVybWFuZW50X3ApOiBMaWtld2lzZS4KCSogZGVjbC5jIChidWlsZGluZ190eXBlbmFtZV90eXBlKTogRG9uJ3QgdXNlIGNvcHlfdG9fcGVybWFuZW50LgoJKHN0YXJ0X2RlY2wpOiBMaWtld2lzZS4KCShncm9rX3JlZmVyZW5jZV9pbml0KTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IERvbid0IHVzZSBtYXBjYXIuCgkoYnVpbGRfdmVjX2RlbGV0ZV8xKTogRG9uJ3QgdXNlIGNvcHlfdG9fcGVybWFuZW50LgoJKGJ1aWxkX3ZlY19pbml0KTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogRG9uJ3QgdXNlIGNvcHlfdG9fcGVybWFuZW50LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKHRzdWJzdF9kZWNsKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCSh1bmlmeSk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IExpa2V3aXNlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2lmX3N0bXRfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF93aGlsZV9zdG10X2NvbmQpOiBMaWtld2lzZS4KCShmaW5pc2hfZG9fc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfZXhwcik6IExpa2V3aXNlLgoJKGZpbmlzaF9jbGVhbnVwKTogTGlrZXdpc2UuCgkoYWRkX2RlY2xfc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9uYW1lZF9yZXR1cm5fdmFsdWUpOiBMaWtld2lzZS4KCShmaW5pc2hfcXVhbGlmaWVkX2NhbGxfZXhwcik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHBlcm1fbWFuaXApOiBSZW1vdmUuCgkoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBEb24ndCB1c2UgY29weV90b19wZXJtYW5lbnQuCgkocGVybWFuZW50X3ApOiBSZW1vdmUuCgkoY29weV90b19wZXJtYW1lbnQpOiBSZW1vdmUuCgkoYnVpbGRfbWluX250KTogRG9uJ3QgdXNlIGNvcHlfdG9fcGVybWFuZW50LgoJKGJ1aWxkX21pbik6IExpa2V3aXNlLgoJKG1pbl90cmVlX2NvbnMpOiBMaWtld2lzZS4KCSogdHlwZWNrYy5jIChidWlsZF9zdGF0aWNfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9jb25zdF9jYXN0KTogTGlrZXdpc2UuCgkKMTk5OS0wOS0wNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoZ2djX3ApOiBTZXQgaXQgdG8gMS4KCShtYXJrX3NhdmVkX3Njb3BlKTogQWRkIHByb3RvdHlwZS4KCjE5OTktMDktMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKENfUFJPTU9USU5HX0lOVEVHRVJfVFlQRV9QKTogRGVsZXRlLgoJKiB0eXBlY2suYyAoc2VsZl9wcm9tb3RpbmdfYXJnc19wKTogRGVsZXRlLgoKMTk5OS0wOS0wNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGJpbmZvX2Zvcl92dGFibGUpOiBVc2UgQ0xBU1NUWVBFX1ZGSUVMRF9QQVJFTlQuCgkoZGZzX2Jmdl9xdWV1ZV9wLCBkZnNfYmZ2X2hlbHBlciwgc3RydWN0IGJmdl9pbmZvKTogUmVtb3ZlLgoKMTk5OS0wOS0wNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2VmaWxlLmluICh0cmVlLm8pOiBEZXBlbmQgb24gZ2djLmguCgkqIGNsYXNzLmMgKG1ha2VfbWV0aG9kX3ZlYyk6IFJlbW92ZS4KCShmcmVlX21ldGhvZF92ZWMpOiBMaWtld2lzZS4KCShmcmVlX21ldGhvZF92ZWNzKTogUmVtb3ZlLgoJKGFkZF9tZXRob2QpOiBEb24ndCB1c2UgdGhlbS4KCSogY3AtdHJlZS5kZWYgKFBUUk1FTV9DU1QpOiBNYWtlIGl0IGxvbmdlci4KCShURU1QTEFURV9QQVJNX0lOREVYKTogTWFrZSBpdCBzaG9ydGVyLgoJKiBjcC10cmVlLmggKEJJTkRJTkdfSEFTX0xFVkVMX1ApOiBOZXcgbWFjcm8uCgkodGVtcGxhdGVfcGFybV9pbmRleCk6IFJlbW92ZSBSVEwgZmllbGQuCgkocHRybWVtX2NzdCk6IEFkZCBSVEwgZmllbGQuCgkoZmluaXNoX2Z1bmN0aW9uKTogUmVtb3ZlZCBwYXJhbWV0ZXIuCgkocHJvY2Vzc19uZXh0X2lubGluZSk6IENoYW5nZSBwcm90b3R5cGUuCgkoaW5pdF9jcGx1c191bnNhdmUpOiBSZW5hbWUgdG8gaW5pdF90cmVlLgoJKGJpbmRpbmdfaW5pdCk6IFJlbW92ZS4KCSogZGVjbC5jIChmcmVlX2JpbmRpbmdfbm9kZXMpOiBSZW1vdmUuCgkocHVzaF9iaW5kaW5nKTogRG9uJ3QgdXNlIHRoZW0uICBTZXQgQklORElOR19IQVNfTEVWRUxfUC4KCShwb3BfYmluZGluZyk6IERvbid0IHVzZSBmcmVlX2JpbmRpbmdfbm9kZXMuCgkoZnJlZV9iaW5kaW5nX3ZlY3MpOiBSZW1vdmUuCgkoc3RvcmVfYmluZGluZ3MpOiBEb24ndCB1c2UgdGhlbS4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBMaWtld2lzZS4KCShsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBTaW1wbGlmeS4KCShidWlsZF90eXBlbmFtZV90eXBlKTogRG9uJ3QgdXNlIG9ic3RhY2tfZnJlZS4KCSh1bnF1YWxpZmllZF9uYW1lc3BhY2VfbG9va3VwKTogU2ltcGxpZnkuCgkobG9va3VwX25hbWVfcmVhbCk6IFNpbXBsaWZ5LgoJKHN0YXJ0X2Z1bmN0aW9uKTogUmVtb3ZlIGNvbW1lbnQgYWJvdXQgbGVha3MuCgkoZmluaXNoX2Z1bmN0aW9uKTogUmVtb3ZlZCBuZXN0ZWQgcGFyYW1ldGVyLiAgQ2FsbAoJZXhwYW5kX2VuZF9iaW5kaW5ncyBldmVuIHdoZW4gYnVpbGRpbmdfc3RtdF90cmVlLgoJQ2FsbCBnZ2NfcHVzaF9jb250ZXh0IGFuZCBnZ2NfcG9wX2NvbnRleHQgYXJvdW5kCglyZXN0X29mX2NvbXBpbGF0aW9uLCBpZiBuZWNlc3NhcnkuCgkobWFya19jcF9mdW5jdGlvbl9jb250ZXh0KTogSGFuZGxlIGEgTlVMTCBsYW5ndWFnZS1jb250ZXh0LgoJKGxhbmdfbWFya19mYWxzZV9sYWJlbF9zdGFjayk6IEZpeCB0eXBvLgoJKGxhbmdfbWFya190cmVlKTogSGFuZGxlIENQTFVTX0JJTkRJTkcsIE9WRVJMT0FELAoJVEVNUExBVEVfUEFSTV9JTkRFWC4gIEhhbmRsZSB0aGUgZnVubnkgVFlQRV9MQU5HX1NQRUNJRklDIG9uCglwb2ludGVyIHRvIG1ldGhvZCB0eXBlcy4KCShsYW5nX2NsZWFudXBfdHJlZSk6IFVzZSBmcmVlIHRvIGZyZWUgVFlQRV9MQU5HX1NQRUNJRklDLgoJKiBkZWNsMi5jIChmaW5pc2hfb2JqZWN0cyk6IEFkanVzdCBjYWxsIHRvIGZpbmlzaF9mdW5jdGlvbi4KCShmaW5pc2hfc3RhdGljX3N0b3JlX2R1cmF0aW9uX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoZG9fbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBSZW1vdmUgY2FsbCB0byBiaW5kaW5nX2luaXQuCgkqIGV4Y2VwdC5jIChlbmRfYW5vbl9mdW5jKTogQWRqdXN0IGNhbGwgdG8gZmluaXNoX2Z1bmN0aW9uLgoJKiBsZXguYyAobWFya19pbXBsX2ZpbGVfY2hhaW4pOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9wYXJzZSk6IENhbGwgaW5pdF90cmVlLCBub3QgaW5pdF9jcGx1c191bnNhdmUuCglBZGQgR0Mgcm9vdHMuCgkoY3BfcHJhbWdhX2ludGVyZmFjZSk6IFVzZSB4bWFsbG9jLCBub3QgcGVybWFsbG9jLgoJKGNwX3ByYWdtYV9pbXBsZW1lbnRhdGlvbik6IExpa2V3aXNlLgoJKGJlZ2luX2RlZmluaXRpb25fb2ZfaW5jbGFzc19pbmxpbmUpOiBTaW1wbGlmeS4KCShwcm9jZXNzX25leHRfaW5saW5lKTogQWRqdXN0IHByb3RvdHlwZS4KCShkb19zY29wZWRfaWQpOiBEb24ndCBjYWxsIGJpbmRpbmdfaW5pdC4KCShtYWtlX2xhbmdfdHlwZSk6IEFsbG9jYXRlIFRZUEVfTEFOR19TUEVDSUZJQyB3aXRoIHhtYWxsb2MuCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogQWRqdXN0IGNhbGwgdG8gZmluaXNoX2Z1bmN0aW9uLgoJKHN5bnRoZXNpemVfbWV0aG9kKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKCV1bmlvbik6IEFkZCBhIG5ldyBgcGknIHZhcmlhbnQuCgkoUFJFX1BBUlNFRF9GVU5DVElPTl9ERUNMKTogVXNlIGl0LgoJKGZuLmRlZnBlbik6IExpa2V3aXNlLgoJKGZuZGVmKTogQWRqdXN0IGNhbGwgdG8gZmluaXNoX2Z1bmN0aW9uLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoc3ludGhlaXN6ZV90aW5mb19mbik6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZXhwYW5kX2JvZHkpOiBMaWtld2lzZS4KCSogdHJlZS5jOiBJbmNsdWRlIGdnYy5oLgoJKG1hcmtfbGlzdF9oYXNoKTogTmV3IGZ1bmN0aW9uLgoJKGJpbmRpbmdfaW5pdCk6IFJlbW92ZS4KCShpbml0X2NwbHVzX3Vuc2F2ZSk6IFJlbmFtZSB0byAuLi4KCShpbml0X3RyZWUpOiBUaGlzLiAgQWRkIEdDIHJvb3RzLgoJCjE5OTktMDktMDUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJR2V0IHJlYWR5IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uCgkqIE1ha2VmaWxlLmluIChDWFhfVFJFRV9IKTogQWRkIHZhcnJheS5oCgkobGV4Lm8pOiBEZXBlbmQgb24gZ2djLmguCgkoZGVjbC5vKTogTGlrZXdpc2UuCgkoZGVjbDIubyk6IExpa2V3aXNlLgoJKG1ldGhvZC5vKTogTGlrZXdpc2UuCgkoc2VhcmNoLm8pOiBMaWtld2lzZS4KCShwdC5vKTogTGlrZXdpc2UuCgkocmVwby5vKTogTGlrZXdpc2UuCgkqIGNsYXNzLmM6IEluY2x1ZGUgZ2djLmguCgkoY3VycmVudF9jbGFzc19uYW1lKTogUmVtb3ZlLgoJKGN1cnJlbnRfY2xhc3NfdHlwZSk6IExpa2V3aXNlLgoJKGN1cnJlbnRfYWNjZXNzX3NwZWNpZmllcik6IExpa2V3aXNlLgoJKHByZXZpb3VzX2NsYXNzX3R5cGUpOiBMaWtld2lzZS4KCShwcmV2aW91c19jbGFzc192YWx1ZXMpOiBMaWtld2lzZS4KCShjbGFzc19jYWNoZV9maXJzdG9iaik6IExpa2V3aXNlLgoJKGN1cnJlbnRfbGFuZ19iYXNlKTogTGlrZXdpc2UuCgkoY3VycmVudF9sYW5nX3N0YWNrKTogTGlrZXdpc2UuCgkoY3VycmVudF9sYW5nX3N0YWNrc2l6ZSk6IExpa2V3aXNlLgoJKGxhbmdfbmFtZV9jKTogTGlrZXdpc2UuCgkobGFuZ19uYW1lX2NwbHVzcGx1cyk6IExpa2V3aXNlLgoJKGxhbmdfbmFtZV9qYXZhKTogTGlrZXdpc2UuCgkoY3VycmVudF9sYW5nX25hbWUpOiBMaWtld2lzZS4KCShiYXNlX2xheW91dF9kZWNsKTogTGlrZXdpc2UuCgkoYWNjZXNzX2RlZmF1bHRfbm9kZSk6IExpa2V3aXNlLgoJKGFjY2Vzc19wdWJsaWNfbm9kZSk6IExpa2V3aXNlLgoJKGFjY2Vzc19wcm90ZWN0ZWRfbm9kZSk6IExpa2V3aXNlLgoJKGFjY2Vzc19wcml2YXRlX25vZGUpOiBMaWtld2lzZS4KCShhY2Nlc3NfZGVmYXVsdF92aXJ0dWFsX25vZGUpOiBMaWtld2lzZS4KCShhY2Nlc3NfcHVibGljX3ZpcnR1YWxfbm9kZSk6IExpa2V3aXNlLgoJKGFjY2Vzc19wcm90ZWN0ZWRfdmlydHVhbF9ub2RlKTogTGlrZXdpc2UuCgkoYWNjZXNzX3ByaXZhdGVfdmlydHVhbF9ub2RlKTogTGlrZXdpc2UuCgkoc2lnbmVkX3plcm9fbm9kZSk6IExpa2V3aXNlLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IERvbid0IGJ1aWxkIGJhc2VfbGF5b3V0X2RlY2wuCgkocHVzaF9sYW5nX2NvbnRleHQpOiBBZGp1c3Qgbm93IHRoYXQgY3VycmVudF9sYW5nX2Jhc2UgaXMgYSB2YXJyYXkuCgkocG9wX2xhbmdfY29udGV4dCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IEluY2x1ZGUgdmFycmF5LmguCgkoY3BfZ2xvYmFsX3RyZWVzKTogQWRkIGFjY2Vzc19kZWZhdWx0LCBhY2Nlc3NfcHVibGljLAoJYWNjZXNzX3Byb3RlY3RlZCwgYWNjZXNzX3ByaXZhdGUsIGFjY2Vzc19kZWZhdWx0X3ZpcnR1YWwsCglhY2Nlc3NfcHVibGljX3ZpcnR1YWwsIGFjY2Vzc19wcm90ZWN0ZWRfdmlydHVhbCwKCWFjY2Vzc19wcml2YXRlX3ZpcnR1YWwsIGN0b3JfaWRlbnRpZmllciwgZGVsdGEyX2lkZW50aWZpZXIsIAoJZGVsdGFfaWRlbnRpZmllciwgZHRvcl9pZGVudGlmaWVyLCBpbl9jaGFyZ2VfaWRlbnRpZmllciwKCWluZGV4X2lkZW50aWZpZXIsIG5lbHRzX2lkZW50aWZpZXIsIHRoaXNfaWRlbnRpZmllciwKCXBmbl9pZGVudGlmaWVyLCBwZm5fb3JfZGVsdGEyX2lkZW50aWZpZXIsIHZwdHJfaWRlbnRpZmllciwKCWxhbmdfbmFtZV9jLCBsYW5nX25hbWVfY3BsdXNwbHVzLCBsYW5nX25hbWVfamF2YSwKCWVtcHR5X2V4Y2VwdF9zcGVjLCBudWxsLCBqY2xhc3MsIG1pbnVzX29uZSwgdGVybWluYXRlLgoJKHNhdmVkX3Njb3BlKTogTW92ZSBoZXJlIGZyb20gZGVjbC5jLiAgRGVmaW5lIGdsb2JhbHMgaW4gdGVybXMgb2YKCXNhdmVkX3Njb3BlOiBjdXJyZW50X25hbWVzcGFjZSwgY3VycmVudF9jbGFzc19uYW1lLAoJY3VycmVudF9jbGFzc190eXBlLCBjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIsIGN1cnJlbnRfbGFuZ19zdGFjaywKCWN1cnJlbnRfbGFuZ19iYXNlLCBjdXJyZW50X2xhbmdfbmFtZSwgY3VycmVudF9mdW5jdGlvbl9wYXJtcywKCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMsIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCwKCXByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb24sIHByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbiwKCXByZXZpb3VzX2NsYXNzX3R5cGUsIHByZXZpb3VzX2NsYXNzX3ZhbHVlcywgY2xhc3NfY2FjaGVfZmlyc3RvYmouCgkoc2NvcGVfY2hhaW4pOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9wdCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChjdXJyZW50X25hbWVzcGFjZSk6IFJlbW92ZS4KCSh0aGlzX2lkZW50aWZpZXIsIGluX2NoYXJnZV9pZGVudGlmaWVyLCBjdG9yX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCShkdG9yX2lkZW50aWZpZXIsIHBmbl9pZGVudGlmaWVyLCBpbmRleF9pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoZGVsdGFfaWRlbnRpZmllciwgZGVsdGEyX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCShwZm5fb3JfZGVsdGEyX2lkZW50aWZpZXIsIHRhZ19pZGVudGlmaWVyKTogTGlrZXdpc2UKCSh2dF9vZmZfaWRlbnRpZmllciwgZW1wdHlfZXhjZXB0X3NwZWMsIG51bGxfbm9kZSk6IExpa2V3aXNlLgoJKGN1cnJlbnRfZnVuY3Rpb25fcGFybXMsIGN1cnJlbnRfbGFuZ19iYXNlKTogUmVtb3ZlLgoJKGN1cnJlbnRfbGFuZ19zdGFjaywgcHJldmlvdXNfY2xhc3NfdmFsdWVzKTogUmVtb3ZlLgoJKGNsYXNzX2JpbmRpbmdfbGV2ZWwpOiBNYWNyb2l6ZS4KCShzYXZlZF9zY29wZSk6IFJlbW92ZS4KCShjdXJyZW50X3NhdmVkX3Njb3BlKTogUmVuYW1lIHRvIHNjb3BlX2NoYWluLgoJKG1hcmtfc2F2ZWRfc2NvcGUpOiBBZGp1c3QgZm9yIG5ldyBzY29wZSBzdHJ1Y3R1cmUuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBMaWtld2lzZS4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBMaWtld2lzZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBBZGp1c3Qgbm93IHRoYXQgY3VycmVudF9sYW5nX2Jhc2UgaXMgYSB2YXJyYXkuCgkoYnVpbGRfdHlwZW5hbWVfdHlwZSk6IENhbGwgZ2djX2FkZF90cmVlX2hhc2hfdGFibGVfcm9vdC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaW5pdF9wdC4gIENhbGwgcHVzaF90b190b3BfbGV2ZWwgdG8KCXNldCB1cCBnbG9iYWxzLiAgQWRkIEdDIHJvb3RzLgoJKHhyZWZfYmFzZXR5cGVzKTogQWRqdXN0IG5vdyB0aGF0IGN1cnJlbnRfbGFuZ19iYXNlIGlzIGEgdmFycmF5LgoJKiBkZWNsLmggKHRoaXNfaWRlbnRpZmllcik6IFJlbW92ZS4KCShpbl9jaGFyZ2VfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKiBkZWNsMi5jOiBEb24ndCBpbmNsdWRlIHZhcnJheS5oLgoJKGN1cnJlbnRfbmFtZXNwYWNlKTogUmVtb3ZlLgoJKGluaXRfZGVjbDIpOiBBZGQgR0Mgcm9vdHMuCgkqIGV4Y2VwdC5jIChUZXJtaW5hdGUpOiBSZW1vdmUuIAoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBVc2UgdGVybWluYXRlX25vZGUgaW5zdGVhZC4KCShidWlsZF90ZXJtaW5hdGVfaGFuZGxlcik6IExpa2V3aXNlLgoJKiBpbml0LmMgKG5jX25lbHRzX2ZpZWxkX2lkKTogUmVtb3ZlLgoJKG1pbnVzX29uZSk6IExpa2V3aXNlLgoJKGluaXRfaW5pdF9wcm9jZXNzaW5nKTogVXNlIG1pbnVzX29uZV9ub2RlIGFuZCBuZWx0c19pZGVudGlmaWVyCglpbnN0ZWFkLiAgQWRkIEdDIHJvb3RzLgoJKGpjbGFzc19ub2RlKTogUmVtb3ZlLgoJKGJ1aWxkX25ld18xKTogVXNlIG5lbHRzX2lkZW50aWZpZXIuCgkoYnVpbGRfdmVjX2luaXQpOiBMaWtld2lzZS4KCShidWlsZF92ZWNfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGxleC5jOiBJbmNsdWRlIGdnYy5oLgoJKGRlZmFyZ19mbik6IE1vdmUgZGVjbGFyYXRpb24gZWFybHkuCgkoZGVmYXJnX3Bhcm1zKTogTGlrZXdpc2UuCgkoaW5pdF9wYXJzZSk6IEFkZCBHQyByb290cy4KCShoYW5kbGVfY3BfcHJhZ21hKTogUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbiBvZgoJcGVuZGluZ192dGFibGVzLgoJKiBtZXRob2QuYzogSW5jbHVkZSBnZ2MuaC4KCShidHlwZWxpc3QpOiBNYWtlIGl0IGEgdmFycmF5LiAgQWxsIHVzZXMgY2hhbmdlZC4KCShrdHlwZWxpc3QpOiBMaWtld2lzZS4KCShpbml0X21ldGhvZCk6IEFkZCBHQyByb290cy4KCSogcHQuYzogRG9uJ3QgaW5jbHVkZSB2YXJyYXkuaC4gIEluY2x1ZGUgZ2djLmguCgkoY3VycmVudF90ZW1wbGF0ZV9wYXJtcyk6IFJlbW92ZS4KCShwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCShwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocHJvY2Vzc2luZ19leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoaW5pdF9wdCk6IE5ldyBmdW5jdGlvbi4KCSogcmVwby5jOiBJbmNsdWRlIGdnYy5oLgoJKGluaXRfcmVwbyk6IEFkZCBHQyByb290cy4KCSogc2VhcmNoLmM6IERvbid0IGluY2x1ZGUgdmFycmF5LmguCgkoX3ZwdHJfbmFtZSk6IFJlbW92ZS4KCShsb29rdXBfZmllbGRfMSk6IFVzZSB2dHByX2lkZW50aWZpZXIgaW5zdGVhZC4KCShleHBhbmRfaW5kaXJlY3RfdnRibHNfaW5pdCk6IFJlbW92ZSByZWR1bmRhbnQgZGVjbGFyYXRpb24gb2YKCWluX2NoYXJnZV9pZGVudGlmaWVyLgoJKGluaXRfc2VhcmNoX3Byb2Nlc3NpbmcpOiBVc2UgdnB0cl9pZGVudGlmaWVyLgoJCjE5OTktMDktMDUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkgICAgQmVybmQgU2NobWlkdCA8YmVybmRzQGN5Z251cy5jby51az4KCSAgICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKHBhcnNlLm8pOiBEZXBlbmQgb24gZ2djLmguCgkoZGVjbDIubyk6IERlcGVuZCBvbiBnZ2MuaC4KCShpbml0Lm8pOiBEZXBlbmQgb24gZ2djLmguCgkqIGNwLXRyZWUuaCAoaW5pdF9kZWNsMik6IERlY2xhcmUuCgkoY3BfcGFyc2VfaW5pdCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdnY19wKTogRGVmaW5lIHRvIHplcm8uCgkobWFya19zYXZlZF9zY29wZSk6IE5ldyBmdW5jdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgY3BfcGFyc2VfaW5pdCwgYW5kIGNwX2RlY2wyLgoJUmVnaXN0ZXIgR0Mgcm9vdHMuCgkoZXhwYW5kX3N0YXRpY19pbml0KTogQWRkIEdDIHJvb3RzLgoJKiBkZWNsMi5jOiBJbmNsdWRlIGdnYy5oLgoJKGluaXRfZGVjbDIpOiBOZXcgZnVuY3Rpb24uCgkqIGluaXQuYzogSW5jbHVkZSBnZ2MuaC4KCShpbml0X2luaXRfcHJvY2Vzc2luZyk6IEFkZCBHQyByb290cy4KCSogcGFyc2UueTogSW5jbHVkZSBnZ2MuaC4KCShjcF9wYXJzZV9pbml0KTogTmV3IGZ1bmN0aW9uLgoJCjE5OTktMDktMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IG1hcmtfbGFuZ19zdGF0dXMuCgkobGFuZ19tYXJrX2ZhbHNlX2xhYmVsX3N0YWNrKTogQWRqdXN0IHByb3RvdHlwZS4KCSogZGVjbDIuYyAoZ3Jva19mdW5jdGlvbl9pbml0KTogUmVtb3ZlIGV4dHJhbmVvdXMgZGVjbGFyYXRpb24gb2YKCWFib3J0X2ZuZGVjbC4KCgkqIE1ha2UtbGFuZy5pbiAoY2MxcGx1cyk6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIEdHQy4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBEb24ndCBtZW50aW9uIGdnYy1zaW1wbGUuby4KCShPQkpERVBTKTogRG9uJ3QgbWVudGlvbiBnZ2Mtc2ltcGxlLm8uCgoJKiBNYWtlLWxhbmcuaW4gKGNjMXBsdXMpOiBEZXBlbmQgb24gJChHR0MpLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBnZ2Mtc2ltcGxlLm8uCgkoT0JKREVQUyk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGxhbmd1YWdlX2Z1bmN0aW9uKTogUmVuYW1lIG1lbWJlcnMgdG8gYHhfJyB2ZXJzaW9uczsKCXdlIG5vdyBoYXZlIHhfbmFtZWRfbGFiZWxzLCB4X2N0b3JfbGFiZWwsIHhfZHRvcl9sYWJlbCwKCXhfYmFzZV9pbml0X2xpc3QsIHhfbWVtYmVyX2luaXRfbGlzdCwgeF9iYXNlX2luaXRfZXhwciwKCXhfY3VycmVudF9jbGFzc19wdHIsIHhfY3VycmVudF9jbGFzc19yZWYsIHhfbGFzdF90cmVlLAoJeF9sYXN0X2V4cHJfdHlwZSwgeF9sYXN0X2R0b3JfaW5zbiwgeF9sYXN0X3Bhcm1fY2xlYW51cF9pbnNuLCBhbmQKCXhfcmVzdWx0X3J0eC4gCgkoZHRvcl9sYWJlbCwgY3Rvcl9sYWJlbCwgY3VycmVudF9iYXNlX2luaXRfbGlzdCwKCWN1cnJlbnRfbWVtYmVyX2luaXRfbGlzdCwgYmFzZV9pbml0X2V4cHIsIGN1cnJlbnRfY2xhc3NfcHRyLAoJY3VycmVudF9jbGFzc19yZWYsIGxhc3RfdHJlZSwgbGFzdF9leHByX3R5cGUpOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkqIGRlY2wuYzogSW5jbHVkZSBnZ2MuaC4KCShsYXN0X2R0b3JfaW5zbik6IEFkanVzdCB0byB1c2UgeF8gbmFtZXMuCgkobGFzdF9wYXJtX2NsZWFudXBfaW5zbik6IExpa2V3aXNlLgoJKG9yaWdpbmFsX3Jlc3VsdF9ydHgpOiBMaWtld2lzZS4KCShuYW1lZF9sYWJlbHMpOiBMaWtld2lzZS4KCShtYXJrX2JpbmRpbmdfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkobWFya19jcF9mdW5jdGlvbl9jb250ZXh0KTogTGlrZXdpc2UuCgkobWFya19mYWxzZV9sYWJlbF9zdGFjayk6IExpa2V3aXNlLgoJKGxhbmdfbWFya190cmVlKTogTGlrZXdpc2UuCgkobGFuZ19jbGVhbnVwX3RyZWUpOiBMaWtld2lzZS4KCQoxOTk5LTA5LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZWZpbGUuaW4gKENYWF9UUkVFX0gpOiBJbmNsdWRlIGZ1bmN0aW9uLmguCgkoZGVjbC5vKTogRG9uJ3QgZGVwZW5kIG9uIGZ1bmN0aW9uLmguCgkoZGVjbDIubyk6IExpa2V3aXNlLgoJKHR5cGVjay5vKTogTGlrZXdpc2UuCgkoaW5pdC5vKTogTGlrZXdpc2UuCgkobWV0aG9kLm8pOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBJbmNsdWRlIGZ1bmN0aW9uLmguCgkoY3BfZnVuY3Rpb24pOiBSZW5hbWUgdG8gbGFuZ3VhZ2VfZnVuY3Rpb24uICBSZW1vdmUgbmV4dC4KCShjcF9mdW5jdGlvbl9jaGFpbik6IE1ha2UgaXQgYSBtYWNybywgbm90IGEgdmFyaWFibGUuCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3QgZGVjbGFyZS4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoJKiBkZWNsLmM6IERvbid0IGluY2x1ZGUgZnVuY3Rpb24uaC4KCShwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBNYWtlIGl0IHN0YXRpYy4gIE1ha2UgaXQgc3VpdGFibGUgZm9yCglhIHNhdmVfbGFuZ19zdGF0dXMgY2FsbGJhY2suCgkocG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBMaWtld2lzZS4KCShtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IENhbGwgcHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvLCBub3QKCXB1c2hfY3BfZnVuY3Rpb25fY29udGV4dC4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBDYWxsIHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20sIG5vdAoJcG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiAgU2V0IHNhdmVfbGFuZ19zdGF0dXMgYW5kCglyZXN0b3JlX2xhbmdfc3RhdHVzLiAgQ2FsbCBwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8sIG5vdAoJcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKGNwX2Z1bmN0aW9uX2NoYWluKTogUmVtb3ZlLgoJKiBkZWNsMi5jOiBEb24ndCBpbmNsdWRlIGZ1bmN0aW9uLmguCgkqIGV4Y2VwdC5jOiBEb24ndCBpbmNsdWRlIGZ1bmN0aW9uLmguCgkoc3RhcnRfYW5vbl9mdW5jKTogQ2FsbCBwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8sIG5vdAoJcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKGVuZF9hbm9uX2Z1bmMpOiAgQ2FsbCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tLCBub3QKCXBvcF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKiBpbml0LmM6IERvbid0IGluY2x1ZGUgZnVuY3Rpb24uaC4KCSogbGV4LmMgKGJlZ2luX2RlZmluaXRpb25fb2ZfaW5jbGFzc19pbmxpbmUpOiBDYWxsCglwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8sIG5vdCBwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQuIAoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiAgQ2FsbCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tLCBub3QKCXBvcF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKiBtZXRob2QuYzogRG9uJ3QgaW5jbHVkZSBmdW5jdGlvbi5oLgoJKHN5bnRoZXNpemVfbWV0aG9kKTogQ2FsbCBwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8sIG5vdAoJcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0LiAgQ2FsbCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tLCBub3QKCXBvcF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKiB0eXBlY2suYzogRG9uJ3QgaW5jbHVkZSBmdW5jdGlvbi5oLgoJCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogVHdlYWsgaGFuZGxpbmcgb2Ygc3RhdGljCglpbml0aWFsaXphdGlvbnMgZm9yIG9iamVjdHMgd2l0aG91dCBjb25zdHJ1Y3RvcnMuCgoxOTk5LTA5LTAzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IFJlamVjdCBkZXJlZmVyZW5jZSBvZiBwb2ludGVyIHRvCgl2b2lkLgoKMTk5OS0wOS0wMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoY3BfZnVuY3Rpb24pOiBNb3ZlIGhlcmUsIGZyb20gZGVjbC5jLgoJKGNwX2Z1bmN0aW9uX2NoYWluKTogRGVjbGFyZS4KCShkdG9yX2xhYmVsKTogTmV3IG1hY3JvLCBpbnN0ZWFkIG9mIHZhcmlhYmxlLgoJKGN0b3JfbGFiZWwpOiBMaWtld2lzZS4KCShjdXJyZW50X2Jhc2VfaW5pdF9saXN0KTogTGlrZXdpc2UuCgkoY3VycmVudF9tZW1iZXJfaW5pdF9saXN0KTogTGlrZXdpc2UuCgkoYmFzZV9pbml0X2V4cHIpOiBMaWtld2lzZS4KCShjdXJyZW50X2NsYXNzX3B0cik6IExpa2V3aXNlLgoJKGN1cnJlbnRfY2xhc3NfcmVmKTogTGlrZXdpc2UuCgkobGFzdF90cmVlKTogTGlrZXdpc2UuCgkobGFzdF9leHByX3R5cGUpOiBMaWtld2lzZS4KCShjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfdmFsdWUpOiBMaWtld2lzZS4KCShjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfbnVsbCk6IExpa2V3aXNlLgoJKGN1cnJlbnRfZnVuY3Rpb25fanVzdF9hc3NpZ25lZF90aGlzKTogTGlrZXdpc2UuCgkoY3VycmVudF9mdW5jdGlvbl9wYXJtc19zdG9yZWQpOiBMaWtld2lzZS4KCSh0ZW1wX25hbWVfY291bnRlcik6IExpa2V3aXNlLgoJKHN0YXRpY19sYWJlbG5vKTogTGlrZXdpc2UuCgkoZXhwYW5kaW5nX3ApOiBMaWtld2lzZS4KCShzdG10c19hcmVfZnVsbF9leHByc19wKTogTGlrZXdpc2UuCgkoaW5fZnVuY3Rpb25fdHJ5X2hhbmRsZXIpOiBMaWtld2lzZS4KCShsYW5nX3R5cGUpOiBSZW1vdmUgbmVzdGVkIHR5cGVfZmxhZ3MuICBBbGwgdXNlcyBjaGFuZ2VkLgoJKiBjYWxsLmMgKGN0b3JfbGFiZWwpOiBSZW1vdmUuCgkoZHRvcl9sYWJlbCk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChjdXJyZW50X2NsYXNzX3B0cik6IFJlbW92ZS4KCShjdXJyZW50X2NsYXNzX3JlZik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHN0YXRpY19sYWJlbG5vKTogUmVtb3ZlLgoJKGR0b3JfbGFiZWwpOiBMaWtld2lzZS4KCShsYXN0X2R0b3JfaW5zbik6IE5ldyBtYWNybywgaW5zdGVhZCBvZiB2YXJpYWJsZS4KCShsYXN0X3Bhcm1fY2xlYW51cF9pbnNuKTogTGlrZXdpc2UuCgkob3JpZ2luYWxfcmVzdWx0X3J0eCk6IExpa2V3aXNlLgoJKGluX2Z1bmN0aW9uX3RyeV9oYW5kbGVyKTogUmVtb3ZlLgoJKG5hbWVkX2xhYmVsX3VzZXMpOiBOZXcgbWFjcm8sIGluc3RlYWQgb2YgdmFyaWFibGUuCgkobmFtZWRfbGFiZWxzKTogTGlrZXdpc2UuCgkoY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3ZhbHVlKTogUmVtb3ZlLgoJKGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19udWxsKTogTGlrZXdpc2UuCgkoY3VycmVudF9mdW5jdGlvbl9hc3NpZ25zX3RoaXMpOiBOZXcgbWFjcm8sIGluc3RlYWQgb2YgdmFyaWFibGUuCgkoY3VycmVudF9mdW5jdGlvbl9qdXN0X2Fzc2lnbmVkX3RoaXMpOiBMaWtld2lzZS4KCShjdXJyZW50X2JpbmRpbmdfbGV2ZWwpOiBMaWtld2lzZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKGNwX2Z1bmN0aW9uKTogTW92ZSB0byBjcC10cmVlLmgKCShjcF9mdW5jdGlvbl9jaGFpbik6IE1ha2UgaXQgZ2xvYmFsLgoJKHRlbXBfbmFtZV9jb3VudGVyKTogUmVtb3ZlLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IFNpbXBsaWZ5LgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKHRlbXBfbmFtZV9jb3VudGVyKTogUmVtb3ZlLgoJKiBpbml0X2MgKGN1cnJlbnRfYmFzZV9pbml0X2xpc3QpOiBMaWtld2lzZS4KCShjdXJyZW50X21lbWJlcl9pbml0X2xpc3QpOiBMaWtld2lzZS4KCShiYXNlX2luaXRfZXhwcik6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoc3RhdGljX2xhYmVsbm8pOiBMaWtld2lzZS4KCSogcHQuYyAobGFzdF90cmVlKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChleHBhbmRpbmdfcCk6IExpa2V3aXNlLgoJKHN0bXRzX2FyZV9mdWxsX2V4cHJzX3ApOiBMaWtld2lzZS4KCShsYXN0X2V4cHJfdHlwZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoZHRvcl9sYWJlbCk6IExpa2V3aXNlLgoJKGN0b3JfbGFiZWwpOiBMaWtld2lzZS4KCQoxOTk5LTA5LTAxICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX3RlbXBsYXRlX2FyZyk6IE5ldyBwcm90b3R5cGUuICBOZXcgZnVuY3Rpb24uCgkoYXJnX2Fzc29jX2NsYXNzKTogVXNlIGFyZ19hc3NvY190ZW1wbGF0ZV9hcmcgZm9yIHRlbXBsYXRlCglhcmd1bWVudHMuIAoJKGFyZ19hc3NvYyk6IExpa2V3aXNlLgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBBbGxvdyBtZW1iZXIgdGVtcGxhdGUKCXRlbXBsYXRlIGFyZ3VtZW50cy4KCjE5OTktMDktMDIgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjYWxsLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBXYXJuIG9uIGVudW0gbWlzbWF0Y2hlcy4KCShjb252ZXJ0X2FyZ190b19lbGxpcHNpcyk6IE1vdmUgbm9uLXBvZCBjaGVjayB0byBhZnRlcgoJY29udmVyc2lvbi4KCjE5OTktMDktMDEgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGd4eC5ncGVyZiAoaGFzaCwgaXNfcmVzZXJ2ZWRfd29yZCk6IEFkZCBwcm90b3R5cGVzLgoKCSogaW5pdC5jIChidWlsZF92ZWNfaW5pdCk6IEluaXRpYWxpemUgdmFyaWFibGUgYHRyeV9ibG9jaycuCgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IENhbGwgbWVtY3B5LCBub3QgYmNvcHksIHRvIGF2b2lkIGNhc3RzLgoJTGlrZXdpc2UgZm9yIGJ6ZXJvL21lbXNldC4KCSh0b2tlbl9nZXRjaCwgdG9rZW5fcHV0X2JhY2spOiBBZGQgc3RhdGljIHByb3RvdHlwZXMuICBSZW1vdmUKCWBpbmxpbmUnIGZyb20gdGhlIGRlZmluaXRpb25zLgoJKHJldHJvZml0X2xhbmdfZGVjbCk6IENhbGwgbWVtc2V0LCBub3QgYnplcm8sIHRvIGF2b2lkIGNhc3RzLgoKMTk5OS0wOS0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ190eXBlKTogTW92ZSBhbGlnbiBpbnRvIHR5cGVfZmxhZ3MuCgkoQ0xBU1NUWVBFX0FMSUdOKTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKiBjYWxsLmMgKGRpcmVjdF9yZWZlcmVuY2VfYmluZGluZyk6IFJlbW92ZSBtaXNsZWFkaW5nIGNvbW1lbnQuCgoxOTk5LTA4LTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBwYXJzZS55IChsYW5ndWFnZV9zdHJpbmcpOiBDb25zdGlmeS4KCjE5OTktMDgtMzAgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHJlcG8uYyAoZ2V0cHdkKTogRG9uJ3QgcHJvdG90eXBlLgoJKiB4cmVmLmMgKGdldHB3ZCk6IExpa2V3aXNlCgoxOTk5LTA4LTMwICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoTElCUywgTElCREVQUyk6IExpbmsgd2l0aCAmIGRlcGVuZCBvbiBsaWJpYmVydHkuYS4KCVJlbW92ZSBoYWNrcyBmb3Igc3R1ZmYgd2hpY2ggbm93IGNvbWVzIGZyb20gbGliaWJlcnR5LgoKMTk5OS0wOC0zMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChJU19BR0dSX1RZUEVfMik6IEZpeCB0eXBvLgoKMTk5OS0wOC0zMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoYmVnaW5faW5pdF9zdG10cyk6IERlY2xhcmUuCgkoZmluaXNoX2luaXRfc3RtdHMpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFdyYXAgdGhlIGRlY2xhcmF0aW9uIG9mIGEgdGVtcG9yYXJ5CglpbiBhIHN0YXRlbWVudC1leHByZXNzaW9uIHNvIHRoYXQgd2Ugd2lsbCBzZWUgaXQgd2hlbiBleHBhbmRpbmcKCXRyZWUgc3RydWN0dXJlIGxhdGVyLgoJKiBpbml0LmMgKGJlZ2luX2luaXRfc3RtdHMpOiBEb24ndCBtYWtlIGl0IHN0YXRpYy4KCShmaW5pc2hfaW5pdF9zdG10cyk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChzdGFydF9oYW5kbGVyX3Bhcm1zKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFRha2Ugb25seSBvbmUgcGFyYW1ldGVyLgoJKHN0YXJ0X2hhbmRsZXJfcGFybXMpOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoc3RhcnRfaGFuZGxlcl9wYXJtcyk6IERlZmluZSBpdC4KCSogZXhjZXB0LmMgKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2spOiBUYWtlIG9ubHkgb25lIHBhcmFtZXRlci4KCURvbid0IGNhbGwgZ3Jva2RlY2xhcmF0b3IgaGVyZS4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBEb24ndCBjYWxsIGdyb2tkZWNsYXJhdG9yIGhlcmUsCgllaXRoZXIuCgkqIHBhcnNlLnkgKGhhbmRsZXJfYXJncyk6IEFkanVzdCBjYWxsIHRvCglleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2suICBVc2Ugc3RhcnRfaGFuZGxlcl9wYXJtcy4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBNYWtlIHBlcm1hbmVudCBsaXN0cyBoYXZlCglwZXJtYW5lbnQgZWxlbWVudHMuCgkodHN1YnN0X2V4cHIpOiBBZGp1c3QgY2FsbHMgdG8gZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrCglhcHByb3ByaWF0ZWx5LgoJKiBzZW1hbnRpY3MuYyAoZXhwYW5kX3N0bXQpOiBMaWtld2lzZS4KCQoxOTk5LTA4LTI5ICBBbGV4IFNhbXVlbCAgPHNhbXVlbEBjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBVc2UgdGVtcGxhdGUgZGVjbGFyYXRpb24gZnJvbQoJY2xhc3MgdHlwZSBpZiBpdCBleGlzdHMuCgoxOTk5LTA4LTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChUWVBFX05FRURTX0NPTlNUUlVDVElORyk6IFJlbW92ZSAjaWYgMCdkIGRlZmluaXRpb24uCgkobWF5YmVfaW5qZWN0X2Zvcl9zY29wZV92YXIpOiBEZWNsYXJlIGl0LgoJKGluaXRpYWxpemVfbG9jYWxfdmFyKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAobWF5YmVfaW5qZWN0X2Zvcl9zY29wZV92YXIpOiBNYWtlIGl0IGdsb2JhbC4KCShpbml0aWFsaXplX2xvY2FsX3Zhcik6IExpa2V3aXNlLiAgTW92ZSBjbGVhbnVwIGhhbmRsaW5nIGhlcmUsCglmcm9tIGNwX2ZpbmlzaF9kZWNsLgoJKG1ha2VfcnRsX2Zvcl9ub25sb2NhbF9kZWNsKTogVXNlCglwdXNoX29ic3RhY2tzX25vY2hhbmdlL3BvcF9vYnN0YWNrcywgcmF0aGVyIHRoYW4KCWVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi9yZXN1bWVfdGVtcG9yYXJ5X2FsbG9jYXRpb24uCgkoY3BfZmluaXNoX2RlY2wpOiBUcnkgdG8gY29tcGxldGUgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZSB3aGVuIGl0CglpcyBkZWNsYXJlZC4gIE1vdmUgY2xlYW51cC1oYW5kbGluZyB0byBpbml0aWFsaXplX2xvY2FsX3Zhci4KCShleHBhbmRfc3RhdGljX2luaXQpOiBVc2UgdHJlZS1idWlsZGluZyBjb2RlLCByYXRoZXIgdGhhbgoJUlRMLWJ1aWxkaW5nIGNvZGUuCgkqIGRlY2wyLmMgKGdldF90ZW1wX25hbWUpOiBBc3NlcnQgbm9uLWluaXRpYWxpemVkbmVzcyBvZgoJdGVtcG9yYXJpZXMuCgkqIGluaXQuYyAoY3JlYXRlX3RlbXBvcmFyeV92YXIpOiBNb3ZlIFJUTC1hc3NpZ25pbmcgY29kZSB0byAuLi4KCShnZXRfdGVtcF9yZWd2YXIpOiBIZXJlLgoJKiBwdC5jICh0c2J1c3RfZXhwcik6IEZpeCBpbmRlbnRhdGlvbi4gIENhbGwgY3BfZmluaXNoX2RlY2wgaGVyZS4KCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10KTogRG9uJ3QgY2FsbCBjcF9maW5pc2hfZGVjbCBoZXJlLiAgSnVzdAoJY2FsbCBpbml0aWFsaXplX2xvY2FsX3ZhciB0byBnZW5lcmF0ZSBpbml0aWFsaXphdGlvbiBjb2RlLgoJCjE5OTktMDgtMjkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLXRyZWUuaCAoZm5kZWNsX2FzX3N0cmluZywgdHlwZV9hc19zdHJpbmcsCgl0eXBlX2FzX3N0cmluZ19yZWFsLCBhcmdzX2FzX3N0cmluZywgZGVjbF9hc19zdHJpbmcsCglleHByX2FzX3N0cmluZywgY29kZV9hc19zdHJpbmcsIGxhbmd1YWdlX2FzX3N0cmluZywKCXBhcm1fYXNfc3RyaW5nLCBvcF9hc19zdHJpbmcsIGFzc29wX2FzX3N0cmluZywgY3ZfYXNfc3RyaW5nLAoJbGFuZ19kZWNsX25hbWUsIGNwX2ZpbGVfb2YsIGxhbmdfcHJpbnRhYmxlX25hbWUpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZXJyZm4uYyAoY3BfcHJpbnRlcik6IExpa2V3aXNlLgoKCSogZXJyb3IuYyAoY3BfcHJpbnRlciwgZm5kZWNsX2FzX3N0cmluZywgdHlwZV9hc19zdHJpbmdfcmVhbCwKCXR5cGVfYXNfc3RyaW5nLCBleHByX2FzX3N0cmluZywgZGVjbF9hc19zdHJpbmcsIGxhbmdfZGVjbF9uYW1lLAoJY3BfZmlsZV9vZiwgY29kZV9hc19zdHJpbmcsIGxhbmd1YWdlX2FzX3N0cmluZywgcGFybV9hc19zdHJpbmcsCglvcF9hc19zdHJpbmcsIGFzc29wX2FzX3N0cmluZywgYXJnc19hc19zdHJpbmcsIGN2X2FzX3N0cmluZyk6CglMaWtld2lzZS4KCgkqIHRyZWUuYyAobGFuZ19wcmludGFibGVfbmFtZSk6IExpa2V3aXNlLgoKMTk5OS0wOC0yOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGFyZ19hc3NvY19jbGFzcyk6IEJhaWwgaWYgdGhlIGNsYXNzIGlzIGEgYnVpbHRpbiB0eXBlLgoKMTk5OS0wOC0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RyaXBfYXJyYXlfdHlwZXMpOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAobWF5YmVfZGVkdWNlX3NpemVfZnJvbV9hcnJheV9pbml0KTogTmV3IGZ1bmN0aW9uLCBzcGxpdAoJb3V0IGZyb20gY3BfZmluaXNoX2RlY2wuCgkobGF5b3V0X3Zhcl9kZWNsKTogTGlrZXdpc2UuCgkobWF5YmVfY29tbW9uaXplX3Zhcik6IExpa2V3aXNlLgoJKG1heWJlX2luamVjdF9mb3Jfc2NvcGVfdmFyKTogTGlrZXdpc2UuCgkoaW5pdGlhbGl6ZV9sb2NhbF92YXIpOiBMaWtld2lzZS4KCShidWlsZF9jbGVhbnVwX29uX3NhZmVfb2JzdGFjayk6IExpa2V3aXNlLgoJKGNoZWNrX2luaXRpYWxpemVyKTogTGlrZXdpc2UuCgkobWFrZV9ydGxfZm9yX25vbmxvY2FsX2RlY2wpOiBMaWtld2lzZS4KCShjcF9maW5pc2hfZGVjbCk6IFVzZSB0aGVtLgoJKiB0eXBlY2suYyAoc3RyaXBfYXJyYXlfdHlwZXMpOiBOZXcgZnVuY3Rpb24uCgkKCSogY3AtdHJlZS5kZWYgKExBQkVMX1NUTVQpOiBOZXcgdHJlZSBub2RlLgoJKiBjcC10cmVlLmggKExBQkVMX1NUTVRfTEFCRUwpOiBOZXcgbWFjcm8uCgkoc2hhZG93X2xhYmVsKTogUmVtb3ZlLgoJKGRlY2xhcmVfbG9jYWxfbGFiZWwpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX2xhYmVsX2RlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChtYWtlX2xhYmVsX2RlY2wpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tCglsb29rdXBfbGFiZWwuCgkoc2hhZG93ZWRfbGFiZWxzKTogUmVtb3ZlLgoJKGJpbmRpbmdfbGV2ZWwpOiBBZGQgc2hhZG93ZWRfbGFiZWxzLgoJKGNsZWFyX2JpbmRpbmdfbGV2ZWwpOiBSZW1vdmUuCgkocHVzaF9iaW5kaW5nX2xldmVsKTogSnVzdCBiemVybyB0aGUgbmV3IGJpbmRpbmcgbGV2ZWwuCgkocHVzaGxldmVsKTogRml4IGluZGVudGF0aW9uLgoJKHBvcF9sYWJlbCk6IE5ldyBmdW5jdGlvbi4KCShwb3BfbGFiZWxzKTogTGlrZXdpc2UsIHNwbGl0IG91dCBmcm9tIHBvcGxldmVsLgoJKHBvcGxldmVsKTogUG9wIGxvY2FsIGxhYmVscy4gIFVzZSBwb3BfbGFiZWxzLgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3QgY2xlYXIgc2hhZG93ZWRfbGFiZWxzLgoJKGxvb2t1cF9sYWJlbCk6IFVzZSBtYWtlX2xhYmVsX2RlY2wuCgkoc2hhZG93X2xhYmVsKTogUmVtb3ZlLgoJKGRlY2xhcmVfbG9jYWxfbGFiZWwpOiBOZXcgZnVuY3Rpb24uCgkoZGVmaW5lX2xhYmVsKTogU2ltcGxpZnkuCgkoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBjbGVhciBzaGFkb3dlZF9sYWJlbHMuCgkoY3BfZnVuY3Rpb24pOiBSZW1vdmUgc2hhZG93ZWRfbGFiZWxzLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IERvbid0IHNhdmUgc2hhZG93ZWRfbGFiZWxzLgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogRG9uJ3QgcmVzdG9yZSBpdC4KCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogSGFuZGxlIExBQkVMX1NUTVQuCgkqIHBhcnNlLnkgKGxhYmVsX2RlY2wpOiBVc2UgZmluaXNoX2xhYmVsX2RlY2wuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogSGFuZGxlIExBQkVMX1NUTVRzLCBhbmQgbG9jYWwgbGFiZWwKCWRlY2xhcmF0aW9ucy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9sYWJlbF9zdG10KTogQWRkIGEgTEFCRUxfU1RNVCB3aGVuCglidWlsZGluZ19zdG10X3RyZWUuCgkoZmluaXNoX2xhYmVsX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX3N0bXQpOiBIYW5kbGUgTEFCRUxfU1RNVHMgYW5kIGxvY2FsIGxhYmVsIGRlY2xhcmF0aW9ucy4KCQoxOTk5LTA4LTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbGFiZWwpOiBCdWlsZCBsYWJlbHMgb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrCgl3aGVuIGJ1aWxkaW5nIHN0YXRlbWVudCB0cmVlcy4gIERvbid0IGJ1aWxkIFJUTCBmb3IgbGFiZWxzIHdoZW4KCWJ1aWxkaW5nIHN0YXRlbWVudCB0cmVlcy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9nb3RvX3N0bXQpOiBVc2UgTEFCRUxfREVDTHMgZXZlbiB3aGVuCglidWlsZGluZyBzdGF0ZW1lbnQgdHJlZXMuCgkoZmluaXNoX2xhYmVsX3N0bXQpOiBMaWtld2lzZS4KCShleHBhbmRfc3RtdCk6IEFkanVzdCBhY2NvcmRpbmdseS4KCSogcHQuYyAodHN1YnN0X2V4cHIpOyBMaWtld2lzZS4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBSb2J1c3RpZnkuCgkKCSogY3AtdHJlZS5oIChBR0dSX0lOSVRfVklBX0NUT1JfUCk6IE5ldyBtYWNyby4KCSogdHJlZS5jIChidWlsZF9jcGx1c19uZXcpOiBTZXQgaXQuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBVc2UgaXQuCgkqIGR1bXAuYyAoZGVxdWVfYW5kX2R1bXApOiBIYW5kbGUgQUdHUl9JTklUX0VYUFIuCgkKCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogUmVzZXQgaW1tZWRpYXRlX3NpemVfZXhwYW5kLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJCgkqIHRyZWUuYyAoY3BsdXNfdW5zYXZlX2V4cHJfbm93KTogRG9uJ3QgcmV0dXJuIGEgdmFsdWUuCgoJKiBzZW1hbnRpY3MuYyAoZG9fcG9wbGV2ZWwpOiBBbHdheXMgaW5pdGlhbGl6ZSB0aGUgcmV0dXJuIHZhbHVlLgoKMTk5OS0wOC0yNiAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGNwbHVzX3Vuc2F2ZV9leHByX25vdykgOiBDb3JyZWN0IHJldHVybiB0eXBlLgoJKiB0cmVlLmggKGNwbHVzX3Vuc2F2ZV9leHByX25vdykgOiBTYW1lLgoKMTk5OS0wOC0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbWVuZCBjb21tZW50LgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogQ2FsbCBwdXNoX3RlbXBsYXRlX2RlY2wgZm9yCgljYXRjaC1ibG9jayBwYXJhbWV0ZXJzLgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBCdWlsZCBhbiBlbXB0eSBjb21wb3VuZCBzdGF0ZW1lbnQKCWZvciB0aGUgYm9keSBvZiBhIGNvbnN0cnVjdG9yLgoKMTk5OS0wOC0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChjcF9idWlsZF9xdWFsaWZpZWRfdHlwZV9yZWFsKTogSWYgd2UncmUgYXNraW5nIGZvciB0aGUKCXNhbWUgcXVhbHMgd2UgYWxyZWFkeSBoYXZlLCBqdXN0IHJldHVybi4KCjE5OTktMDgtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmRlZiAoU1VCT0JKRUNUKTogTmV3IHRyZWUgbm9kZS4KCSogY3AtdHJlZS5oIChDTEVBTlVQX1ApOiBOZXcgbWFjcm8uCgkoU1VCT0JKRUNUX0NMRUFOVVApOiBMaWtld2lzZS4KCShrZWVwX25leHRfbGV2ZWwpOiBBZGQgcGFyYW1ldGVyLgoJKGdldF90ZW1wX3JlZ3Zhcik6IERvbid0IGRlY2xhcmUuCgkoZW1pdF9iYXNlX2luaXQpOiBSZW1vdmUgcGFyYW1ldGVyLgoJKGV4cGFuZF9hZ2dyX2luaXQpOiBSZW5hbWUgdG8gYnVpbGRfYWdncl9pbml0LgoJKGV4cGFuZF92ZWNfaW5pdCk6IFJlbmFtZSB0byBidWlsZF92ZWNfaW5pdC4KCShkb19wdXNobGV2ZWwpOiBSZW1vdmUuCgkoZG9fcG9wbGV2ZWwpOiBMaWtld2lzZS4KCShmaW5pc2hfY2xlYW51cCk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfc3Vib2JqZWN0KTogTGlrZXdpc2UuCgkoc3RtdHNfYXJlX2Z1bGxfZXhwcnNfcCk6IE5ldyB2YXJpYWJsZS4KCSogZGVjbC5jIChrZWVwX25leHRfbGV2ZWwpOiBBZGQgcGFyYW1ldGVyLgoJKGNwX2ZpbmlzaF9kZWNsKTogVXNlIGJ1aWxkX2FnZ3JfaW5pdCwgbm90CglleHBhbmRfYWdncl9pbml0LiAgVXNlIGZpbmlzaF9leHByX3N0bXQgdG8gZXhwYW5kIHRoZSBjb2RlLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IFVzZSB0cmVlLWdlbmVyYXRpbmcsIG5vdCBSVEwtZ2VuZXJhdGluZywKCWZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGluaXRpYWxpemF0aW9uLgoJKHN0YXJ0X2Z1bmN0aW9uKTogUmVtb3ZlIGRlYWQgY29kZS4gIEFsd2F5cyBoYXZlIGEgbW9tZW50YXJ5CglvYnN0YWNrIGluc2lkZSB0aGUgZnVuY3Rpb24sIGV2ZW4gYmVmb3JlIGhpdHRpbmcgdGhlIGZpcnN0IGN1cmx5CglicmFjZS4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogTW92ZSBjYWxscyB0bwoJZXhwYW5kX3tzdGFydCxlbmR9X3RhcmdldF90ZW1wcyBpbnRvIHNlbWFudGljcy5jLgoJKGNwX2Z1bmN0aW9uKTogQWRkIHN0bXRzX2FyZV9mdWxsX2V4cHJzX3AuCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IFJlc3RvcmUgaXQuCgkqIGRlY2wyLmMgKGdldF90ZW1wX3JlZ3Zhcik6IE1vdmUgdG8gaW5pdC5jLgoJKGRvX3N0YXRpY19pbml0aWFsaXphdGlvbik6IFVzZSBidWlsZF97YWdncix2ZWN9X2luaXQuCgkoZG9fc3RhdGljX2Rlc3RydWN0aW9uKTogRml4IHR5cG8gaW4gY29tbWVudC4KCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogSGFuZGxlIElOSVRfRVhQUi4KCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IFVzZSBjcmVhdGVfdGVtcG9yYXJ5X3Zhci4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IFVzZSBidWlsZF97YWdncix2ZWN9X2luaXQuCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0X3RyeV9ibG9jayk6IFJlbW92ZS4KCShleHBhbmRfdmVjX2luaXRfY2F0Y2hfY2xhdXNlKTogTGlrZXdpc2UuCgkoZ2V0X3RlbXBfcmVndmFyKTogTmV3IGZ1bmN0aW9uLgoJKGJlZ2luX2luaXRfc3RtdHMpOiBMaWtld2lzZS4KCShmaW5pc2hfaW5pdF9zdG10cyk6IExpa2V3aXNlLgoJKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBVc2UgYnVpbGRfe2FnZ3IsdmVjfV9pbml0LiAgQnVpbGQgdXAgdHJlZQoJc3RydWN0dXJlIGhlcmUuCgkoZW1pdF9iYXNlX2luaXQpOiBMaWtld2lzZS4gIFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLgoJKGV4cGFuZF92aXJ0dWFsX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfY2xlYW51cF9mb3JfYmFzZSk6IFVzZSBmaW5pc2hfc3Vib2JqZWN0LgoJKGV4cGFuZF9hZ2dyX3ZiYXNlX2luaXRfMSk6IFNpbXBsaWZ5LgoJKGNvbnN0cnVjdF92aXJ0dWFsX2Jhc2VzKTogVXNlIHRyZWUtZ2VuZXJhdGluZyBmdW5jdGlvbnMgdG8gYnVpbGQKCXVwIGluaXRpYWxpemF0aW9uLgoJKGV4cGFuZF9hZ2dyX2luaXQpOiBMaWtld2lzZS4gIFJlbmFtZSB0byBidWlsZF9hZ2dyX2luaXQuCgkoZXhwYW5kX2RlZmF1bHRfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9hZ2dyX2luaXRfMSk6IExpa2V3aXNlLgoJKGV4cGFuZF92ZWNfaW5pdCk6IFJlbmFtZSB0byBidWlsZF92ZWNfaW5pdC4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBVc2UgdHJlZS1nZW5lcmF0aW5nCglmdW5jdGlvbnMuICBEb24ndCBjYWxsIGNsZWFyX2xhc3RfZXhwci4KCShkb19idWlsZF9hc3NpZ25fcmVmKTogTGlrZXdpc2UuCgkoc3ludGhlc2l6ZV9tZXRob2QpOiBDYWxsIGNsZWFyX2xhc3RfZXhwciBoZXJlLgoJKiBwYXJzZS55IChiYXNlX2luaXQpOiBEb24ndCBjYWxsIGNsZWFyX2xhc3RfZXhwciBoZXJlLgoJKG5vZGVjbHMpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBIYW5kbGUgYSBUUllfQkxPQ0sgd2l0aCBDTEVBTlVQX1Agc2V0LgoJKiBzZW1hbnRpY3MuYyAoZG9fcHVzaGxldmVsKTogTW92ZSB0byBoZXJlLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuCgkoc3RtdHNfYXJlX2Z1bGxfZXhwcnNfcCk6IE5ldyB2YXJpYWJsZS4KCShmaW5pc2hfZXhwcl9zdG10KTogSGFuZGxlIGxvZ2ljIGZvciB0ZW1vcHJhcnkgY2xlYW51cCBoZXJlLgoJKGZpbmlzaF9mb3Jfc3RtdCk6IFVzZSBmaW5pc2hfZXhwcl9zdG10LgoJKGZpbmlzaF9jbGVhbnVwKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9mdW5jdGlvbl90cnlfYmxvY2spOiBGaXggaW5kZW50YXRpb24uCgkoZmluaXNoX3N1Ym9iamVjdCk6IE5ldyBmdW5jdGlvbi4KCShzZXR1cF92dGJsX3B0cik6IENhbGwga2VlcF9uZXh0X2xldmVsIGhlcmUuCgkoZmluaXNoX3N0bXRfZXhwcik6IEhhbmRsZSBhIGJsb2NrIHdpdGggbm8gc2NvcGUgaW5zaWRlIHRoZQoJc3RhdGVtZW50LWV4cHJlc3Npb24uCgkoZXhwYW5kX3N0bXQpOiBIYW5kbGUgYSBUUllfQkxPQ0sgd2l0aCBDTEVBTlVQX1Agc2V0LiAgSGFuZGxlCglTVUJPQkpFQ1QuCgkqIHRyZWUuYyAoc2VhcmNoX3RyZWUpOiBIYW5kbGUgSU5JVF9FWFBSLgoJKG1hcGNhcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBEb24ndCBidWlsZCBhbiBSVExfRVhQUi4KCSogdHlwZWNrMi5jIChzdG9yZV9pbml0X3ZhbHVlKTogQ2hhbmdlIGV4cGFuZF9hZ2dyX2luaXQgdG8KCWJ1aWxkX2FnZ3JfaW5pdCBpbiBjb21tZW50LgoJCjE5OTktMDgtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBEdW1wIFRBUkdFVF9FWFBScy4KCjE5OTktMDgtMjUgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsMi5jIChoYW5kbGVfY2xhc3NfaGVhZCk6IEJlIGdyYWNlZnVsIGFib3V0IGFkZGl0aW9uYWwKCXNjb3BlIHF1YWxpZmllcnMuIEFkanVzdCBjb21tZW50cyB0byByZWZsZWN0IHJlYWxpdHkuCgoxOTk5LTA4LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBGaXggdHlwby4KCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByLCBDT05EX0VYUFIpOiBNYWtlIHN1cmUgd2UndmUgZ290IGFuCglsdmFsdWUgYmVmb3JlIHRyeWluZyB0byBtZXNzIHdpdGggdGhlIHNpZGVzLgoKCSogZXJyb3IuYyAoZHVtcF9leHByLCBDT05WRVJUX0VYUFIpOiBIYW5kbGUgKHZvaWQpIHByb3Blcmx5LgoKTW9uIEF1ZyAyMyAyMjoxNzoyMCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBBZGQgcm9vbSBmb3IgTlVMTCBpbiBhcmdsaXN0LgoKMTk5OS0wOC0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IENhbGwgX190aHJvd190eXBlX21hdGNoX3J0dGlfMi4KCVJldHVybiBhcmJpdHJhcnkgcG9pbnRlciBvciBOVUxMLgoJKGNoZWNrX2VoX3NwZWMpOiBDYWxsIF9fdGhyb3dfdHlwZV9tYXRjaF9ydHRpXzIuCgkqIHRpbmZvLmggKCo6OmRjYXN0KTogUmV0dXJuIGludC4gIEFkZCB2YWxwIHBhcm0uCgkqIHRpbmZvLmNjICgqOjpkY2FzdCk6IExpa2V3aXNlLiAgQWRqdXN0IHRvIGFsbG93IGZvciBudWxsIHBvaW50ZXJzLgoJKiB0aW5mbzIuY2MgKF9fdGhyb3dfdHlwZV9tYXRjaF9ydHRpXzIpOiBMaWtld2lzZS4KCShfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IE5vdyBqdXN0IGEgd3JhcHBlci4KCgkqIGV4Y2VwdC5jOiBMb3NlIENhdGNoTWF0Y2gsIEZpcnN0RXhjZXB0aW9uTWF0Y2gsIGFuZCBVbndpbmQuCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IERvbid0IGluaXRpYWxpemUgdGhlbS4KCjE5OTktMDgtMjMgIFBhdWwgQnVyY2hhcmQgPGJ1cmNoYXJkQHBvYm94LmNvbT4KCgkqIGRlY2wuYyAoY2hlY2tfZGVmYXVsdF9hcmd1bWVudCk6IEZpeCB0eXBvLgoKMTk5OS0wOC0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuZGVmIChTVE1UX0VYUFIpOiBGaXggdHlwbyBpbiBub2RlIG5hbWUuCgoJKiBkdW1wLmMgKGR1bXBfbmV4dF9zdG10KTogTmV3IGZ1bmN0aW9uLgoJKGRlcXVldWVfYW5kX2R1bXApOiBVc2UgaXQuCgkKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBNYWtlIHN1cmUgdG8gaW5pdGlhbGl6ZSByZXR1cm4gdmFsdWUgZm9yIGEKCVNUTVRfRVhQUiwgZXZlbiB3aGVuIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9zdG10X2V4cHIpOiBBIHN0YXRlbWVudC1leHByZXNzaW9uIHdob3NlCglsYXN0IHN0YXRlbWVudCBpcyBub3QgYW4gZXhwcmVzc2lvbi1zdGF0ZW1lbnQgaGFzIHR5cGUgYHZvaWQnLgkKCQoxOTk5LTA4LTIwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9zdG10X2V4cHIpOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogSGFuZGxlIEVYSVRfRVhQUiwgTE9PUF9FWFBSLgoJKG1hcGNhcik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX3ZlY19kZWxldGVfMSk6IE1ha2UgdGhlIGNoaWxkcmVuIG9mIGEgcGVybWFuZW50CglCSU5EX0VYUFIgcGVybWFuZW50LgoJKiBwdC5jIChyZWdpc3Rlcl9zcGVjaWFsaXphdGlvbik6IERvbid0IHJlZ2lzdGVyIGEgc3BlY2lhbGl6YXRpb24KCW1vcmUgdGhhbiBvbmNlLgoJCjE5OTktMDgtMTggIEFuZHJldyBIYWxleSAgPGFwaEBjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IENhbGwgYnVpbGRfbWFuZ2xlZF9DOXhfbmFtZSAoKQoJZm9yIGFsbCBpbnRlZ2VyIHBhcmFtZXRlciB0eXBlcyBsYXJnZXIgdGhhbiBsb25nIGxvbmcuCgoxOTk5LTA4LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogTWVyZ2UgZGVmYXVsdCB0ZW1wbGF0ZQoJYXJndW1lbnRzIGluIGJvdGggZGlyZWN0aW9ucy4KCgkqIHR5cGVjay5jIChjb21tb25fdHlwZSk6IFVuZG8gMTk5OS0wOC0xOCBjaGFuZ2UuICBSZW1vdmUKCWNvbXBpbGVyX2Vycm9yIG1lc3NhZ2UuCgoxOTk5LTA4LTE5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ191c2VfcmVwb3NpdG9yeS4KCSogcHQuYyAoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgZHVwbGljYXRlCglpbnN0YW50aWF0aW9uIHdpdGggLWZyZXBvLgoJKGRvX3R5cGVfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBDb21wbGFpbiBhYm91dCBldmVyeXRoaW5nCgl0aGF0IGlzbid0IGEgdmFsaWQgdGVtcGxhdGUuCgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBJZiAtZm5ldy1hYmksIGNsYXNzIGxpbmthZ2UgZG9lc24ndAoJYWZmZWN0IGlubGluZXMuCgoxOTk5LTA4LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5kZWYgKFBTRVVET19EVE9SX0VYUFIpOiBOZXcgdHJlZSBjb2RlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBpdC4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogTGlrZXdpc2UuCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBMaWtld2lzZS4KCSh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfcHNldWRvX2Rlc3RydWN0b3JfY2FsbCk6IENyZWF0ZSBpdC4KCQoxOTk5LTA4LTE4ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc2VhcmNoLmMgKHNldHVwX2NsYXNzX2JpbmRpbmdzKTogUm9idXN0aWZ5LgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBVc2Ugc2FtZV90eXBlX3AsIG5vdCBwb2ludGVyIGVxdWFsaXR5LAoJdG8gY29tcGFyZSB0eXBlcy4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfbGFuZ19maWVsZF9kZWNsKTogUmVtb3ZlLgoJKiBjbGFzcy5jIChidWlsZF92dGFibGUpOiBSZXBsYWNlIGNhbGxzIHRvIGJ1aWxkX2xhbmdfZmllbGRfZGVjbAoJd2l0aCBidWlsZF9sYW5nX2RlY2wuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoX3VzaW5nX2RlY2wpOiBMaWtld2lzZS4KCShpbml0X2RlY2xfcHJvY2Vzc3NpbmcpOiBMaWtld2lzZS4KCShncm9rdmFyZGVjbCk6IExpa2V3aXNlLgoJKGJ1aWxkX3B0cm1lbWZ1bmNfdHlwZSk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoYnVpbGRfZW51bWVyYXRvcik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IExpa2V3aXNlLgoJKGRvX2NsYXNzX3VzaW5nX2RlY2wpOiBMaWtld2lzZS4KCSogZXhjZXB0LmMgKGNhbGxfZWhfaW5mbyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGluaXRfaW5pdF9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoZXhwYW5kX2NsYXNzX2RlY2wpOiBMaWtld2lzZS4KCSogdHJlZS5jIChidWlsZF9iYXNlX2ZpZWxkcyk6IExpa2V3aXNlLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogTGlrZXdpc2UuCgkqIGxleC5jIChidWlsZF9sYW5nX2RlY2wpOiBCdWlsZCBkZWNsYXJhdGlvbnMgb24gdGhlIHBlcm1hbmVudAoJb2JzdGFjayBpZiB3ZSdyZSBidWlsZGluZyBzdGF0bWVlbnQgdHJlZXMuCgkocmV0cm9maXRfbGFuZ19kZWNsKTogSGFuZGxlIGJvdGggdGhlIGZ1bGwgbGFuZ19kZWNsIGFuZCBhbHNvIHRoZQoJc21hbGxlciBsYW5nX2RlY2xfZmxhZ3MgaGVyZS4KCShidWlsZF9sYW5nX2ZpZWxkX2RlY2wpOiBSZW1vdmUuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogSXNzdWUgZXJyb3JzIGZvciB2YXJpYWJsZQoJZGVjbGFyYXRpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMgbWVtYmVycy4KCjE5OTktMDgtMTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogSGFuZGxlIFRSVVRIX3tBTkQsT1IsWE9SfV9FWFBSIHRvby4KCShtYXBjYXIpOiBMaWtld2lzZS4KCjE5OTktMDgtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGJhY2tfZW5kX2hvb2spOiBOZXcgdmFyaWFibGUuCgkqIGRlY2wyLmMgKGJhY2tfZW5kX2hvb2spOiBEZWZpbmUgaXQuCgkoZmluaXNoX2ZpbGUpOiBJZiBpdCdzIG5vbi1OVUxMLCBjYWxsIGl0LgoKCSogZGVjbC5jIChhZGRfZGVjbF90b19sZXZlbCk6IE5ldyBmdW5jdGlvbi4KCShwdXNoX2xvY2FsX2JpbmRpbmcpOiBVc2UgaXQuCgkoZmluZF9iaW5kaW5nKTogRml4IHR5cG8gaW4gY29tbWVudC4KCShwdXNoZGVjbCk6IFVzZSBhZGRfZGVjbF90b19sZXZlbC4gIFB1dCB0ZW1wbGF0ZXMgb24gdGhlCgljb3JyZXNwb25kaW5nIG5hbWVzcGFjZS1zY29wZSBiaW5kaW5nIGxldmVscy4KCSogZHVtcC5jIChkZXF1ZXVlX2FuZF9kdW1wKTogUHJpbnQgdGhlIHNwZWNpYWxpemF0aW9ucyBvZiBhCgl0ZW1wbGF0ZS4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBEb24ndCBwdXNoIGEgdGVtcGxhdGUgbXVsdGlwbGUKCXRpbWVzLgoKMTk5OS0wOC0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoQ0FMTF9ERUNMQVJBVE9SX1BBUk1TKTogTmV3IG1hY3JvLgoJKENBTExfREVDTEFSQVRPUl9RVUFMUyk6IExpa2V3aXNlLgoJKENBTExfREVDQVJBVE9SX0VYQ0VQVElPTl9TUEVDKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBZGp1c3QgdG8gdXNlIHRoZW0uCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKHJlcGFyc2VfYWJzZGNsX2FzX2Nhc3RzKTogTGlrZXdpc2UuCgkqIGxleC5jIChtYWtlX2NhbGxfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKHNldF9xdWFsc19hbmRfc3BlYyk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCSogdHJlZS5jIChtYXBjYXIpOiBSZW1vdmUgc3BlY2lhbCBoYWNrIHRvIGhhbmRsZSB0aGlyZCBvcGVyYW5kIG9mCglhIENBTExfRVhQUi4KCjE5OTktMDgtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKENBTl9IQVZFX0ZVTExfTEFOR19ERUNMX1ApOiBOZXcgbWFjcm8uCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IFVzZSBidWlsZF9sYW5nX2ZpZWxkX2RlY2wgdG8gYnVpbGQgdGhlCglWQVJfREVDTHMgZm9yIHZ0YWJsZXMuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbmx5IGNvcHkgREVDTF9TQVZFRF9UUkVFIGlmCglDQU5fSEFWRV9GVUxMX0xBTkdfREVDTF9QLgoJKHB1c2hfdXNpbmdfZGVjbCk6IFVzZSBidWlsZF9sYW5nX2RlY2wgdG8gYnVpbGQgVVNJTkdfREVDTHMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgYnVpbGRfbGFuZ19kZWNsIHRvIGJ1aWxkIFRZUEVfREVDTHMuCgkqIGxleC5jIChyZXRyb2ZpdF9sYW5nX2RlY2wpOiBDaGVjayBDQU5fSEFWRV9GVUxMX0xBTkdfREVDTF9QLgoJKGJ1aWxkX2xhbmdfZmllbGRfZGVjbCk6IExpa2V3aXNlLgoJKGNvcHlfbGFuZ19kZWNsKTogVXNlIENBTl9IQVZFX0ZVTExMQU5HX0RFQ0xfUCB0byBkZWNpZGUgaG93IG11Y2gKCXRvIGNvcHkuCgkKCSogY3AtdHJlZS5kZWYgKFNUTVRfRVhQUik6IE5ldyB0cmVlIG5vZGUuCgkqIGNwLXRyZWUuaCAoU1RNVF9FWFBSX1NUTVQpOiBOZXcgbWFjcm8uCgkoc3RvcmVfcmV0dXJuX2luaXQpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGZpbmlzaF9uYW1lZF9yZXR1cm5fdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX3N0bXQpOiBMaWtld2lzZS4KCShleHBhbmRfYm9keSk6IExpa2V3aXNlLgoJKGJlZ2luX3N0bXRfdHJlZSk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdG10X3RyZWUpOiBMaWtld2lzZS4KCShleHBhbmRpbmdfcCk6IE5ldyB2YXJpYWJsZS4KCShsYXN0X2V4cHJfdHlwZSk6IExpa2V3aXNlLgoJKGJ1aWxkaW5nX3N0bXRfdHJlZSk6IE5ldyBtYWNyby4KCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFVzZSBidWlsZGluZ19zdG10X3RyZWUsIG5vdAoJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLCB3aGVyZSBhcHByb3ByaWF0ZS4KCShzdG9yZV9wYXJtX2RlY2xzKTogTGlrZXdpc2UuCgkoc3RvcmVfcmV0dXJuX2luaXQpOiBNb3ZlIG1vc3Qgb2YgdGhlIGJvZHkgdG8gc2VtYW50aWNzLmMuCgkoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGJ1aWxkaW5nX3N0bXRfdHJlZS4KCShmaW5pc2hfc3RtdCk6IENsZWFyIGxhc3RfZXhwcl90eXBlIGhlcmUuCgkoY3BfZnVuY3Rpb24pOiBBZGQgZXhwYW5kaW5nX3AsIGxhc3RfdHJlZSwgbGFzdF9leHByX3R5cGUuCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSB0aGVtLgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogUmVzdG9yZSB0aGVtLgoJKiBkZWNsMi5jIChzZXR1cF92dGJsX3B0cik6IE1vdmUgdG8gc2VtYW50aWNzLmMuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBTVE1UX0VYUFIuCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBVc2UgYnVpbGRpbmdfc3RtdF90cmVlLgoJVXNlIGFkZF9kZWNsX3N0bXQuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBIYW5kbGUgU1RNVF9FWFBSLgoJKGRvX2Nhc2UpOiBNb3ZlIGFkZF90cmVlIGNhbGwgdG8gc2VtYW50aWNzLmMuCgkqIHBhcnNlLnkgKHJldHVybl9pbml0KTogVXNlIGZpbmlzaF9uYW1lZF9yZXR1cm5fdmFsdWUuCgkoZm9yLmluaXQuc3RhdGVtZW50KTogVXNlIGZpbmlzaF9leHByX3N0bXQuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChkb19wdXNobGV2ZWwpOiBNb3ZlIHRvIHNlbWFudGljcy5jLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuCgkodHN1YnN0X2NvcHkpOiBIYW5kbGUgU1RNVF9FWFBSIGluc3RlYWQgb2YgQklORF9FWFBSLgoJKHRzdWJzdF9leHByKTogRG9uJ3QgZXhwYW5kIGFsbCB0aGUgd2F5IHRvIFJUTCBoZXJlLiAgSGFuZGxlCglSRVRVUk5fSU5JVCBhbmQgQ1RPUl9JTklUSUFMSVpFUi4KCShpbnN0YW50aWF0ZV9kZWNsKTogQ2FsbCBleHBhbmRfYm9keSBhZnRlciB0c3Vic3QnaW5nIGludG8KCURFQ0xfU0FWRURfVFJFRS4KCSogc2VtYW50aWNzLmMgKGV4cGFuZF9zdG10cyk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRpbmdfcCk6IE5ldyB2YXJpYWJsZS4KCShsYXN0X2V4cHJfdHlwZSk6IExpa2V3aXNlLgoJKGZpbmlzaF9leHByX3N0bXQpOiBVc2UgYnVpbGRpbmdfc3RtdF90cmVlLgoJKGJlZ2luX2lmX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfaWZfc3RtdF9jb25kKTogTGlrZXdpc2UuCgkoZmluaXNoX3RoZW5fY2xhdXNlKTogTGlrZXdpc2UuCgkoYmVnaW5fZWxzZV9jbGF1c2UpOiBMaWtld2lzZS4KCShmaW5pc2hfZWxzZV9jbGF1c2UpOiBMaWtld2lzZS4KCShiZWdpbl93aGlsZV9zdG10KTogTGlrZXdpc2UuCgkoZmluaXNoX3doaWxlX3N0bXRfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF93aGlsZV9zdG10KTogTGlrZXdpc2UuCgkoZmluaXNoX2RvX2JvZHkpOiBMaWtld2lzZS4KCShmaW5pc2hfZG9fc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9yZXR1cm5fc3RtdCk6IExpa2V3aXNlLgoJKGJlZ2luX2Zvcl9zdG10KTogTGlrZXdpc2UuCgkoZm5pc2hfZm9yX2luaXRfc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfY29uZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3JfZXhwcik6IExpa2V3aXNlLgoJKGZpbmlzaF9mb3Jfc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9icmVha19zdG10KTogTGlrZXdpc2UuCgkoZmluaXNoX2NvbnRpbnVlX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfc3dpdGNoX2NvbmQpOiBMaWtld2lzZS4KCShmaW5pc2hfc3dpdGNoX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfY2FzZV9sYWJlbCk6IENhbGwgYWRkX3RyZWUgaGVyZSBpZiBuZWNlc3NhcnkuCgkoZmluaXNoX2dvdG9fc3RhdGVtZW50KTogVXNlIGJ1aWxkaW5nX3N0bXRfdHJlZS4KCShiZWdpbl90cnlfYmxvY2spOiBMaWtld2lzZS4KCShiZWdpbl9mdW5jdGlvbl90cnlfYmxvY2spOiBMaWtld2lzZS4KCShmaW5pc2hfdHJ5X2Jsb2NrKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uX3RyeV9ibG9jayk6IExpa2V3aXNlLgoJKGZpbmlzaF9oYW5kbGVyX3NlcXVlbmNlKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uX2hhbmRsZXJfc2VxdWVuY2UpOiBMaWtld2lzZS4KCShiZWdpbl9oYW5kbGVyKTogTGlrZXdpc2UuCgkoZmluaXNoX2hhbmRsZXJfcGFybXMpOiBMaWtld2lzZS4KCShmaW5pc2hfaGFuZGxlcik6IExpa2V3aXNlLgoJKGJlZ2luX2NvbXBvdW5kX3N0bXQpOiBMaWtld2lzZS4KCShmaW5pc2hfY29tcG91bmRfc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9hc21fc3RtdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9sYWJlbF9zdG10KTogTGlrZXdpc2UuCgkoZmluaXNoX25hbWVkX3JldHVybl92YWx1ZSk6IE5ldyBmdW5jdGlvbi4KCShzZXR1cF92dGJsX3B0cik6IE1vdmVkIGhlcmUgZnJvbSBkZWNsMi5jLgoJKGRvX3B1c2hsZXZlbCk6IE1vdmVkIGhlcmUgZnJvbSBwdC5jLgoJKGRvX3BvcGxldmVsKTogTGlrZXdpc2UuCgkoYmVnaW5fc3RtdF9leHByKTogVXNlIGJ1aWxkaW5nX3N0bXRfdHJlZS4KCShmaW5pc2hfc3RtdF9leHByKTogTGlrZXdpc2UuICBCdWlsZCBhIFNUTVRfRVhQUiwgbm90IGEgQklORF9FWFBSLAoJd2hlbiBidWlsZGluZ19zdG10X3RyZWUuCgkoYmVnaW5fc3RtdF90cmVlKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9zdG10X3RyZWUpOiBMaWtld2lzZS4KCShleHBhbmRfc3RtdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9ib2R5KTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfbWV0aG9kX3R5cGUpOiBNYWtlIHN1cmUgdGhlIGFyZ3VtZW50IHR5cGVzCgllbmQgdXAgb24gdGhlIHNhbWUgb2JzdGFjayBhcyB0aGUgTUVUSE9EX1RZUEUuCgkoc2VhcmNoX3RyZWUpOiBIYW5kbGUgQ09NUE9VTkRfRVhQUiwgTU9ESUZZX0VYUFIsCglUSFJPV19FWFBSLCBTVE1UX0VYUFIuCgkobWFwY2FyKTogQnJlYWsgb3V0IGNvbW1vbiBjYXNlcy4gIEhhbmRsZSBDT01QT1VORF9FWFBSLAoJTU9ESUZZX0VYUFIsIFRIUk9XX0VYUFIsIFNUTVRfRVhQUiwgUlRMX0VYUFIuICBBYm9ydCwgcmF0aGVyIHRoYW4KCXNvcnJ5LCBpZiBhbiB1bnN1cHBvcnRlZCBub2RlIGlzIGVuY291bnRlcmVkLgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlX2luX3ZvaWQpOiBIYW5kbGUgQklORF9FWFBSLgoJKGNfZXhwYW5kX3JldHVybik6IERvbid0IGNhbGwgYWRkX3RyZWUgaGVyZS4KCQoxOTk5LTA4LTE1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAoY2hlY2tfZGVmYXVsdF90bXBsX2FyZ3MpOiBEb24ndCBjaGVjayBpbiBsb2NhbCBzY29wZXMuCgkodHN1YnN0X2RlY2wpOiBNYWtlIHN1cmUgdGhlIGRlY2xhcmF0aW9uIGlzIG9uIGEgc2F2ZWFibGUKCW9ic3RhY2suICBDbGVhciBERUNMX0RFQURfRk9SX0xPQ0FMIHdoZW4gbWFraW5nIGEgY29weSBvZiBhIGxvY2FsCgl2YXJpYWJsZS4KCSh0c3Vic3RfZXhwcik6IEFkanVzdCBub3cgdGhhdCBERUNMX1NUTVRzIHJlYWxseSBjb250YWluIERFQ0xzLgoJCjE5OTktMDgtMTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCglTcGVlZCB1cCBLb2VuaWcgbG9va3VwLgoJKiBkZWNsLmMgKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBOb25zdGF0aWMuICBBZGQgc3BhY2VwIHBhcm0KCXRvIHJldHVybiBuYW1lc3BhY2VzIHdlJ3ZlIGxvb2tlZCBhdC4KCSogZGVjbDIuYyAobG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IExpa2V3aXNlLgoJKGFkZF9mdW5jdGlvbik6IERvbid0IGNhbGwgb3ZsX21lbWJlci4KCShsb29rdXBfYXJnX2RlcGVuZGVudCk6IEluaXRpYWxpemUgay5uYW1lc3BhY2VzIHRvIHRoZSBsaXN0IG9mIAoJbmFtZXNwYWNlcyBzZWVuIGluIHVucXVhbGlmaWVkIGxvb2t1cC4KCSogY2FsbC5jIChlcXVhbF9mdW5jdGlvbnMpOiBNb3ZlIGhlcmUgZnJvbSB0cmVlLmMuCgkoam91c3QpOiBVc2UgaXQgdG8gaGFuZGxlIGR1cGxpY2F0ZSBjYW5kaWRhdGVzLgoJKiB0cmVlLmMgKG92bF9tZW1iZXIpOiBVc2UgPT0uCgoxOTk5LTA4LTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5kZWYgKERFQ0xfU1RNVCk6IE1ha2UgaXQgc21hbGxlci4KCSogY3AtdHJlZS5oIChsYW5nX2RlY2xfZmxhZ3MpOiBNb3ZlIHNhdmVkX3RyZWUgdG8gLi4uCgkobGFuZ19kZWNsKTogLi4uIGhlcmUuICBBZGQgbmV4dC4KCShERUNMX1NBVkVEX1RSRUUpOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkoREVDTF9JTVBMSUNJVF9UWVBFREVGX1ApOiBOZXcgbWFjcm8uCgkoU0VUX0RFQ0xfSU1QTElDSVRfVFlQRURFRl9QKTogTGlrZXdpc2UuCgkoREVDTF9TVE1UX0RFQ0wpOiBMaWtld2lzZS4KCShjcmVhdGVfaW1wbGljaXRfdHlwZWRlZik6IE5ldyBmdW5jdGlvbi4KCShtYXliZV9wdXNoX2RlY2wpOiBMaWtld2lzZS4KCSh0c3Vic3RfZGVmYXVsdF9hcmd1bWVudCk6IE5ldyBmdW5jdGlvbi4KCShhdF9mdW5jdGlvbl9zY29wZV9wKTogTGlrZXdpc2UuCgkoYWRkX2RlY2xfc3RtdCk6IExpa2V3aXNlLgoJKHB1c2hfcGVybWFuZW50X29ic3RhY2spOiBMaWtld2lzZS4KCSogY2FsbC5jIChjb252ZXJ0X2RlZmF1bHRfYXJnKTogVXNlIHRzdWJzdF9kZWZhdWx0X2FyZ3VtZW50LgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogVXNlIHB1c2hfcGVybWFuZW50X29ic3RhY2suCgkoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBDcmVhdGUgYSBURU1QTEFURV9ERUNMIGZvciB0aGUKCXNlbGYtcmVmZXJlbmNlLCBpZiBuZWNlc3NhcnkuCgkqIGRlY2wuYyAocHNldWRvX2dsb2JhbF9sZXZlbF9wKTogT25seSBsb29rIGF0IHRoZSBjdXJyZW50IGJpbmRpbmcKCWxldmVsLgoJKHB1c2hfYmluZGluZyk6IFVzZSBwdXNoX3Blcm1hbmVudF9vYnN0YWNrLgoJKGNyZWF0ZV9pbXBsaWNpdF90eXBlZGVmKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2h0YWcpOiBVc2UgaXQuCgkoZHVwbGljYXRlX2RlY2xzKTogVXNlIHB1c2hfcGVybWFuZW50X29ic3RhY2suCgkobWF5YmVfcHVzaF9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHN0YXJ0X2RlY2wpOiBVc2UgaXQuICBSZW1vdmUgZGVhZCBjb2RlLiAgVXNlIGFkZF9kZWNsX3N0bXQuCgkoc3RhcnRfZGVjbF8xKTogUmVtb3ZlIGRlYWQgY29kZS4KCShjcF9maW5pc2hfZGVjbCk6IFJlbW92ZSBERUNMX1NUTVQgaGFuZGxpbmcgaGVyZS4gIERvbid0IHVzZQoJcHNldWRvX2dsb2JhbF9sZXZlbF9wLgoJKGdyb2t2YXJkZWNsKTogQ3JlYXRlIERFQ0xfTEFOR19TUEVDSUZJQyBmb3IgYSBWQVJfREVDTCBpbiBhCgl0ZW1wbGF0ZS4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLCBmb3IgVFlQRV9ERUNMcy4gIERvbid0IHVzZQoJcHNldWRvX2dsb2JhbF9sZXZlbF9wLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBDYWxsIHB1c2hfdGVtcGxhdGVfZGVjbCBmb3IgYSBUWVBFX0RFQ0wgaW4KCWEgdGVtcGxhdGUuCgkoZ2V0X3NlbnRyeSk6IFVzZSBwdXNoX3Blcm1hbmVudF9vYnN0YWNrLgoJKiBkdW1wLmMgKGRlcXVldWVfYW5kX2R1bXApOiBFbmFibGUgREVDTF9TVE1ULgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogVXNlIHB1c2hfcGVybWFuZW50X29ic3RhY2suCgkoYnVpbGRfZWhfdHlwZV9yZWYpOiBMaWtld2lzZS4KCShkb19wb3BfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgkoZXhwYW5kX2VoX3NwZWMpOiBMaWtld2lzZS4KCShhbGxvY19laF9vYmplY3QpOiBMaWtld2lzZS4KCShleHBhbmRfdGhyb3cpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9qYXZhX2NsYXNzX3JlZik6IExpa2V3aXNlLgoJKiBsZXguYyAoZ2V0X3RpbWVfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKGZyZWVfbGFuZ19kZWNsX2NoYWluKTogQ29ycmVjdCB0eXBlLgoJKHJldHJvZml0X2xhbmdfZGVjbCk6IEFkanVzdCBhY2NvcmRpbmdseS4KCShidWlsZF9sYW5nX2ZpZWxkX2RlY2wpOiBMaWtld2lzZS4KCSogbGV4LmggKGZyZWVfbGFuZ19kZWNsX2NoYWluKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGxhbmdfZXh0ZGVmKTogRG9uJ3QgdXNlIHBzZXVkb19nbG9iYWxfbGV2ZWxfcC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKHRzdWJzdF9kZWZhdWx0X2FyZ3VtZW50cyk6IE5ldyBmdW5jdGlvbi4KCShyZXRyaWV2ZV9sb2NhbF9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgoJKHJlZ2lzdGVyX2xvY2FsX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBVc2UgREVDTF9JTVBMSUNJVF9UWVBFREVGX1AuICBKdXN0IHVzZQoJcHNldWRvX2dsb2JhbF9sZXZlbF9wIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhIHRlbXBsYXRlIGlzCglwcmltYXJ5LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLiAgVXNlIGNyZWF0ZV9pbXBsaWNpdF90eXBlZGVmLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCB0c3Vic3RfZGVmYXVsdF9hcmd1bWVudHMgZm9yCgltZW1iZXIgZnVuY3Rpb25zLCBpZiBhcHByb3ByaWF0ZS4KCSh0c3Vic3RfZGVmYXVsdF9hcmd1bWVudCk6IE5ldyBmdW5jdGlvbi4KCSh0c3Vic3RfZGVjbCk6IFVzZSBpdC4gIENoYW5nZSBUWVBFX0RFQ0wgaGFuZGxpbmcgdG8gbWF0Y2ggVkFSX0RFQ0xzLgoJKiBzZWFyY2guYyAoYXRfZnVuY3Rpb25fc2NvcGVfcCk6IE5ldyBmdW5jdGlvbi4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IFVzZSBwdXNoX3Blcm1hbmVudF9vYnN0YWNrLgoJKGZpbmlzaF9sYWJlbF9zdG10KTogTGlrZXdpc2UuCgkoYWRkX2RlY2xfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCShiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX3R5cGVvZik6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGNvcHlfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IExpa2V3aXNlLgoJKGNvcHlfdG9fcGVybWFuZW50KTogTGlrZXdpc2UuCgkocHVzaF9wZXJtYW5lbnRfb2JzdGFjayk6IERlZmluZS4KCShtYXJrX2FkZHJlc3NhYmxlKTogVXNlIGl0LgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IExpa2V3aXNlLgoJCjE5OTktMDgtMTMgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChpbml0X2NwbHVzX3Vuc2F2ZSk6IE5ldy4KCShjcGx1c191bnNhdmVfZXhwcl9ub3cpOiBOZXcuCgkqIGxleC5jIChpbml0X3BhcnNlKTogQ2FsbCBpbml0X2NwbHVzX3Vuc2F2ZS4KCSogdHJlZS5jIChpbml0X2NwbHVzX3Vuc2F2ZSk6IE5ldy4KCShjcGx1c191bnNhdmVfZXhwcl9ub3cpOiBOZXcuCgoxOTk5LTA4LTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAodHN1YnN0KTogQmFjayBvdXQgMTk5OS0wOC0wNiBwYXRjaC4gIFVzZSBmb2xkIGFuZAoJZGVjbF9jb25zdGFudF92YWx1ZSB0byBzaW1wbGlmeSBhcnJheSBib3VuZHMuCgoxOTk5LTA4LTExICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mbXMtZXh0ZW5zaW9ucy4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGZsYWdfbXNfZXh0ZW5zaW9ucy4KCSogZGVjbDIuYzogRGVmaW5lIGl0LgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgdGFraW5nIHRoZSBhZGRyZXNzCglvZiBhIGJvdW5kIG1lbWJlciBmdW5jdGlvbiBpZiAtZm1zLWV4dGVuc2lvbnMuCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogT3IgYWJvdXQgaW1wbGljaXQgaW50LgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IE9yIGFib3V0IGltcGxpY2l0ICcmJy4KCjE5OTktMDgtMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKG1pbmltYWxfcGFyc2VfbW9kZSk6IFJlbW92ZS4KCShmaW5pc2hfbGFiZWxfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChzYXZlZF9zY29wZSk6IFJlbW92ZSBtaW5pbWFsIHBhcnNlIG1vZGUuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBEb24ndCBzYXZlIGl0LgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IERvbid0IHJlc3RvcmUgaXQuCgkoZGVmaW5lX2xhYmVsKTogU3BsaXQgb3V0IHRlbXBsYXRlLWhhbmRsaW5nIGNvZGUgdG8gc2VtYW50aWNzLmMuCgkoc3RhcnRfZGVjbCk6IERvbid0IHVzZSBtaW5pbWFsX3BhcnNlX21vZGUuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IERvbid0IGluY3JlbWVudCBpdC4KCShzdG9yZV9yZXR1cm5faW5pdCk6IERvbid0IHVzZSBpdC4KCShmaW5pc2hfZnVuY3Rpb24pOiBEb24ndCBkZWNyZW1lbnQgaXQuCgkqIHBhcnNlLnkgKGxhYmVsX2NvbG9uKTogVXNlIGZpbmlzaF9sYWJlbF9zdG10IHRocm91Z2hvdXQuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChtaW5pbWFsX3BhcnNlX21vZGUpOiBEb24ndCBkZWZpbmUgaXQuCgkodHN1YnN0X2V4cHIpOiBVc2UgZmluaXNoX2xhYmVsX3N0bXQuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfbGFiZWxfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCgkqIGR1bXAuYyAocXVldWUpOiBCZSBjYXJlZnVsIHdoZW4gY29tcHV0aW5nIGJpdG1hc2tzLgoJKGRlcXVldWVfYW5kX2R1bXApOiBEZXNjcmliZSBiaW5mb3MgYXMgYmluZm9zLCBub3QgYXMKCXZlY3RvcnMuCgkKCSogcGFyc2UueSAocGVkYW50aWMpOiBHaXZlIGl0IGl0eXBlLiAgQWRqdXN0IHVzYWdlIGFjY29yZGluZ2x5Cgl0aHJvdWdob3V0LiAJCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJCgkqIE1ha2UtbGFuZy5pbiAoQ1hYX1NSQ1MpOiBSZW1vdmUgc2lnLmMuCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IFJlbW92ZSBzaWcuby4KCShzaWcubyk6IFJlbW92ZS4KCSogY3AtdHJlZS5oIChDUFRJX09QQVFVRV9UWVBFKTogUmVtb3ZlLgoJKENQVElfU0lHTkFUVVJFX1RZUEUpOiBMaWtld2lzZS4KCShDUFRJX1NJR1RBQkxFX0VOVFJZX1RZUEUpOiBMaWtld2lzZS4KCShvcGFxdWVfdHlwZV9ub2RlKTogTGlrZXdpc2UuCgkoc2lnbmF0dXJlX3R5cGVfbm9kZSk6IExpa2V3aXNlLgoJKHNpZ3RhYmxlX2VudHJ5X3R5cGUpOiBMaWtld2lzZS4KCShmbGFnX2hhbmRsZV9zaWduYXR1cmVzKTogTGlrZXdpc2UuCgkobGFuZ190eXBlKTogUmVtb3ZlIGlzX3NpZ25hdHVyZSwgaXNfc2lnbmF0dXJlX3BvaW50ZXIsCglpc19zaWduYXR1cmVfcmVmZXJlbmNlLCBoYXNfb3BhcXVlX3R5cGVkZWNscywKCXNpZ3RhYmxlc19oYXNfYmVlbl9nZW5lcmF0ZWQuICBBZGp1c3QgZHVtbXkuICBSZW1vdmUgc2lnbmF0dXJlLAoJc2lnbmF0dXJlX3BvaW50ZXJfdG8sIHNpZ25hdHVyZV9yZWZlcmVuY2VfdG8uCgkoSVNfU0lHTkFUVVJFKTogUmVtb3ZlLgoJKFNFVF9TSUdOQVRVUkUpOiBSZW1vdmUuCgkoQ0xFQVJfU0lHTkFUVVJFKTogUmVtb3ZlLgoJKElTX1NJR05BVFVSRV9QT0lOVEVSKTogUmVtb3ZlLgoJKElTX1NJR05BVFVSRV9SRUZFUkVOQ0UpOiBSZW1vdmUuCgkoU0lHTkFUVVJFX0hBU19PUEFRVUVfVFlQRURFQ0xTKTogUmVtb3ZlLgoJKFNJR1RBQkxFX0hBU19CRUVOX0dFTkVSQVRFRCk6IFJlbW92ZS4KCShDTEFTU1RZUEVfU0lHTkFUVVJFKTogUmVtb3ZlLgoJKFNJR05BVFVSRV9UWVBFKTogUmVtb3ZlLgoJKFNJR05BVFVSRV9NRVRIT0RfVkVDKTogUmVtb3ZlLgoJKFNJR05BVFVSRV9QT0lOVEVSX1RPKTogUmVtb3ZlLgoJKFNJR05BVFVSRV9SRUZFUkVOQ0VfVE8pOiBSZW1vdmUuCgkobGFuZ19kZWNsX2ZsYWdzKTogUmVtb3ZlIGlzX2RlZmF1bHRfaW1wbGVtZW50YXRpb24uICBSZW5hbWUKCW1lbWZ1bmNfcG9pbnRlcl90byB0byBzYXZlZF90cmVlLgoJKElTX0RFRkFVTFRfSU1QTEVNRU5UQVRJT04pOiBSZW1vdmUuCgkoREVDTF9NRU1GVU5DX1BPSU5URVJfVE8pOiBSZW1vdmUuCgkoREVDTF9NRU1GVU5DX1BPSU5USU5HX1RPKTogUmVtb3ZlLgoJKERFQ0xfU0FWRURfVFJFRSk6IEFkanVzdCBkZWZpbml0aW9uLgoJKHRhZ190eXBlcyk6IFJlbW92ZSBzaWduYXR1cmVfdHlwZV9ub2RlLgoJKFNJR05BVFVSRV9GSUVMRF9OQU1FKTogUmVtb3ZlLgoJKFNJR05BVFVSRV9GSUVMRF9OQU1FX0ZPUk1BVCk6IExpa2V3aXNlLgoJKFNJR05BVFVSRV9PUFRSX05BTUUpOiBMaWtld2lzZS4KCShTSUdOQVRVUkVfU1BUUl9OQU1FKTogTGlrZXdpc2UuCgkoU0lHTkFUVVJFX1BPSU5URVJfTkFNRSk6IExpa2V3aXNlLgoJKFNJR05BVFVSRV9QT0lOVEVSX05BTUVfRk9STUFUKTogTGlrZXdpc2UuCgkoU0lHTkFUVVJFX1JFRkVSRU5DRV9OQU1FKTogTGlrZXdpc2UuCgkoU0lHTkFUVVJFX1JFRkVSTkVDRV9OQU1FX0ZPUk1BVCk6IExpa2V3aXNlLgoJKFNJR1RBQkxFX1BUUl9UWVBFKTogTGlrZXdpc2UuCgkoU0lHVEFCTEVfTkFNRV9GT1JNQVQpOiBMaWtld2lzZS4KCShTSUdUQUJMRV9OQU1FX0ZPUk1BVF9MT05HKTogTGlrZXdpc2UuCgkoU0lHVEFCTEVfVEFHX05BTUUpOiBMaWtld2lzZS4KCShTSUdUQUJMRV9WQl9PRkZfTkFNRSk6IExpa2V3aXNlLgoJKFNJR1RBQkxFX1ZUX09GRl9OQU1FKTogTGlrZXdpc2UuCgkoZmluaXNoX2Jhc2Vfc3BlY2lmaWVycyk6IENoYW5nZSBwcm90b3R5cGUuCgkoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfdHlwZSk6IFJlbW92ZS4KCShidWlsZF9zaWduYXR1cmVfcmVmZXJlbmNlX3R5cGUpOiBSZW1vdmUuCgkoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfY29uc3RydWN0b3IpOiBSZW1vdmUuCgkoYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsKTogUmVtb3ZlLgoJKGJ1aWxkX29wdHJfcmVmKTogTGlrZXdpc2UuCgkoYXBwZW5kX3NpZ25hdHVyZV9maWVsZHMpOiBMaWtld2lzZS4KCShzaWduYXR1cmVfZXJyb3IpOiBMaWtld2lzZS4KCSogY2FsbC5jIChidWlsZF90aGlzKTogUmVtb3ZlIHNpZ25hdHVyZSBzdXBwb3J0LgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChhZGRfaW1wbGljaXRseV9kZWNsYXJlZF9tZW1iZXJzKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdCk6IExpa2V3aXNlLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogTGlrZXdpc2UuCgkoY29udmVydF90b19wb2ludGVyX2ZvcmNlKTogTGlrZXdpc2UuCgkob2NwX2NvbnZlcnQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChzaWd0YWJsZV9kZWNsX3ApOiBSZW1vdmUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW1vdmUgc3VwcG9ydCBmb3Igc2lnbmF0dXJlcy4KCShjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZ3Jva3Bhcm1zKTogTGlrZXdpc2UuCgkoeHJlZl90YWcpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfc2lndGFibGVfdmFyZGVjbCk6IFJlbW92ZS4KCShmbGFnX2hhbmRsZV9zaWduYXR1cmVzKTogUmVtb3ZlLgoJKGxhbmdfZl9vcHRpb25zKTogUmVtb3ZlIGhhbmRsZS1zaWduYXR1cmVzLgoJKGdyb2tmaWVsZCk6IFJlbW92ZSBzdXBwb3J0IGZvciBzaWduYXR1cmVzLgoJKGdyb2tiaXRmaWVsZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkocmVwYXJzZV9hYnNkY2xfYXNfY2FzdHMpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF90eXBlX3JlYWwpOiBMaWtld2lzZS4KCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBMaWtld2lzZS4KCSogZnJpZW5kLmMgKG1ha2VfZnJpZW5kX2NsYXNzKTogTGlrZXdpc2UuCgkqIGd4eC5ncGVyZjogUmVtb3ZlIF9fc2lnbmF0dXJlX18sIHNpZ25hdHVyZSwgX19zaWdvZl9fLCBzaWdvZi4KCSogaGFzaC5oOiBSZWdlbmVyYXRlZC4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IFJlbW92ZSBzdXBwb3J0IGZvciBzaWduYXR1cmVzLgoJKiBsYW5nLW9wdGlvbnMuaDogUmVtb3ZlIC1maGFuZGxlLXNpZ25hdHVyZXMsCgktZm5vLWhhbmRsZS1zaWduYXR1cmVzLiAKCSogbGV4LmMgKGluaXRfcGFyc2UpOiBSZW1vdmUgc3VwcG9ydCBmb3Igc2lnbmF0dXJlcy4KCSh5eXByaW50KTogTGlrZXdpc2UuCgkqIGxleC5oIChyaWQpOiBSZW1vdmUgUklEX1NJR05BVFVSRS4KCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IFJlbW92ZSBzdXBwb3J0IGZvcgoJc2lnbmF0dXJlcy4gCgkoaGFja19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKGJhc2VfY2xhc3MpOiBMaWtld2lzZS4KCShiYXNlX2NsYXNzLjEpOiBMaWtld2lzZS4KCShhY2Nlc3Nfc3BlY2lmaWVyKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChsb29rdXBfbWVtYmVyKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfcXVhbGlmaWVkX29iamVjdF9jYWxsX2V4cHIpOiBMaWtld2lzZS4KCShmaW5pc2hfdGVtcGxhdGVfdHlwZV9wYXJtKTogTGlrZXdpc2UuCgkoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9iYXNlX3NwZWNpZmllcik6IExpa2V3aXNlLgoJKiBzaWcuYzogUmVtb3ZlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX21ldGhvZF90eXBlKTogUmVtb3ZlIHN1cHBvcnQgZm9yIHNpZ25hdHVyZXMuCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBMaWtld2lzZS4KCShjX3NpemVvZik6IExpa2V3aXNlLgoJKGNfYWxpZ25vZik6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfaW5kaXJlY3RfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfY19jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKHNpZ25hdHVyZV9lcnJvcik6IFJlbW92ZS4KCShzdG9yZV9pbml0X3ZhbHVlKTogUmVtb3ZlIHN1cHBvcnQgZm9yIHNpZ25hdHVyZXMuCgkoZGlnZXN0X2luaXQpOiBMaWtld2lzZS4KCShidWlsZF94X2Fycm93KTogTGlrZXdpc2UuCgkoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogTGlrZXdpc2UuCgkqIHhyZWYuYyAoR05VX3hyZWZfZGVjbCk6IExpa2V3aXNlLgoJCjE5OTktMDgtMTAgIE1hcnRpbiB2LiBMb2V3aXMgIDxtYXJ0aW5AbWlyYS5pc2RuLmNzLnR1LWJlcmxpbi5kZT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogUmVtb3ZlIHVubmVjZXNzYXJ5IGxvb2t1cCBvZiBjbGFzcyBmaWVsZC4KCjE5OTktMDgtMDkgIE1hcnRpbiB2LiBMb2V3aXMgIDxtYXJ0aW5AbWlyYS5pc2RuLmNzLnR1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKHNldF9kZWNsX25hbWVzcGFjZSk6IERvIG5vdCBjb21wbGFpbiBhYm91dCBub24tbWF0Y2hpbmcKCWRlY2xzIGlmIHByb2Nlc3NpbmcgYSB0ZW1wbGF0ZS4KCjE5OTktMDgtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX3B0cm1lbWZ1bmNfdHlwZSk6IEhhbmRsZSBxdWFsaWZpZWQKCXBvaW50ZXItdG8tbWVtYmVyIHR5cGVzIGhlcmUuCgkqIHRyZWUuYyAoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGVfcmVhbCk6IFNpbXBsaWZ5IGhhbmRsaW5nIGhlcmUuCgoxOTk5LTA4LTA5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsZXguYyAobGFuZ19pZGVudGlmeSk6IExpa2V3aXNlLgoKMTk5OS0wOC0wOSAgQmVybmQgU2NobWlkdCAgPGJlcm5kc0BjeWdudXMuY28udWs+CgoJKiBNYWtlZmlsZS5pbjogVXBkYXRlIGRlcGVuZGVuY2llcy4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogRG9uJ3QgaW5pdGlhbGl6ZSBERUNMX1NBVkVEX0lOU05TIHdpdGgKCU5VTExfUlRYLgoJKiBkZWNsLmM6IEluY2x1ZGUgImZ1bmN0aW9uLmgiCgkoY2xlYW51cF9sYWJlbCwgcmV0dXJuX2xhYmVsKTogRGVsZXRlIGRlY2xhcmF0aW9ucy4KCShzdG9yZV9wYXJtX2RlY2xzKTogIERvbid0IGluaXRpYWxpemUgREVDTF9TQVZFRF9JTlNOUyB3aXRoIE5VTExfUlRYLgoJKGZpbmlzaF9mdW5jdGlvbik6IFJlbmFtZSBsYXN0X3Bhcm1faW5zbiB2YXJpYWJsZSB0bwoJZm5fbGFzdF9wYXJtX2luc24uICBEb24ndCBjb21wYXJlIERFQ0xfU0FWRURfSU5TTlMgdG8gTlVMTF9SVFguCgkqIGRlY2wyLmM6IEluY2x1ZGUgImZ1bmN0aW9uLmgiLgoJKHJ0bF9leHByX2NoYWluKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiBtZXRob2QuYzogSW5jbHVkZSAiZnVuY3Rpb24uaCIKCSogdHJlZS5jIChidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IERvbid0IGluaXRpYWxpemUKCURFQ0xfU0FWRURfSU5TTlMgd2l0aCBOVUxMX1JUWC4KCSogdHlwZWNrLmM6IEluY2x1ZGUgImZ1bmN0aW9uLmgiCgoxOTk5LTA4LTA5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fZnVuY3Rpb25fdHJ5X2Jsb2NrLCBmaW5pc2hfZnVuY3Rpb25fdHJ5X2Jsb2NrLAoJZmluaXNoX2Z1bmN0aW9uX2hhbmRsZXJfc2VxdWVuY2UpOiBOZXcgZm5zLgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBVc2UgdGhlbS4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oOiBEZWNsYXJlIGluX2Z1bmN0aW9uX3RyeV9oYW5kbGVyLgoJKiBkZWNsLmM6IERlZmluZSBpdC4KCShzdGFydF9mdW5jdGlvbik6IENsZWFyIGl0LgoJKHN0cnVjdCBjcF9mdW5jdGlvbiwgcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IFJlc3RvcmUgaXQuCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IFNldCBhbmQgY2xlYXIgaXQuCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogUmV0aHJvdyBpZiB3ZSByZWFjaCB0aGUgZW5kCglvZiBhIGZ1bmN0aW9uLXRyeS1ibG9jayBoYW5kbGVyIGluIGEgY3RvciBvciBkdG9yLgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQ29tcGxhaW4gYWJvdXQgcmV0dXJuaW5nIGZyb20gYQoJZnVuY3Rpb24tdHJ5LWJsb2NrIGhhbmRsZXIgb2YgYSBjdG9yLgoKCSogcGFyc2UueSAoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogQ2FsbCBlbmRfcHJvdGVjdF9wYXJ0aWFscwoJYmVmb3JlIGV4cGFuZF9zdGFydF9hbGxfY2F0Y2guCgoxOTk5LTA4LTA4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0cnVjdCBiaW5kaW5nX2xldmVsKTogQWRkIGVoX3JlZ2lvbiBmaWVsZC4KCShwdXNoX2JpbmRpbmdfbGV2ZWwpOiBTZXQgaXQuCgkoZGVmaW5lX2xhYmVsKTogQ29tcGxhaW4gYWJvdXQganVtcGluZyBpbnRvIGFuIEVIIGJsb2NrLgoKCSogcHRyZWUuYyAocHJpbnRfbGFuZ190eXBlKTogUHJpbnQgdGhlIHJlYWwgdHlwZSBvZiBhIFBNRi4KCVByaW50IHdoYXQgZXhjZXB0aW9ucyBhIGZuIHR5cGUgdGhyb3dzLgoKMTk5OS0wOC0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2xhc3MuYyAoY291bnRfZmllbGRzLCBhZGRfZmllbGRzX3RvX3ZlYyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogY3AtdHJlZS5oIChvcG5hbWVfdGFiLCBhc3NpZ25vcF90YWIsIG9wZXJhdG9yX25hbWVfc3RyaW5nLAoJZ2V0X2lkXzIsIGNvbXBvc2l0ZV9wb2ludGVyX3R5cGUsIGR1bXBfbm9kZV90b19maWxlKTogQ29uc3RpZnkgYQoJY2hhciouCgoJKiBkZWNsLmMgKG5hbWVkX2xhYmVsX2xpc3QsIGNwX2ZpbmlzaF9kZWNsLCBncm9rZGVjbGFyYXRvcik6CglDb25zdGlmeSBhIGNoYXIqLgoKCSogZGVjbDIuYyAoZmluaXNoX3N0YXRpY19kYXRhX21lbWJlcl9kZWNsLCBncm9rZmllbGQpOiBDb25zdGlmeSBhCgljaGFyKi4KCgkqIGR1bXAuYyAocXVldWVfYW5kX2R1bXBfaW5kZXgsIGR1bXBfaW50LCBkdW1wX3N0cmluZywKCWR1bXBfc3RyaW5nX2ZpZWxkLCBkZXF1ZXVlX2FuZF9kdW1wLCBkdW1wX25vZGVfdG9fZmlsZSk6IENvbnN0aWZ5CglhIGNoYXIqLgoJKGR1bXBfc3RtdCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogZXJyZm4uYyAoY3BfdGhpbmcpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogZXJyb3IuYyAoZHVtcF91bmFyeV9vcCwgZHVtcF9iaW5hcnlfb3AsIGFnZ3JfdmFyaWV0eSwKCWR1bXBfYWdncl90eXBlLCBkdW1wX2dsb2JhbF9pb3JkLCBkdW1wX2RlY2wsIGR1bXBfZnVuY3Rpb25fbmFtZSwKCWR1bXBfZXhwcik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBsZXguYyAoZXh0ZW5kX3Rva2VuX2J1ZmZlcl90bywgcHJhZ21hX2dldGMsIHByYWdtYV91bmdldGMsCglyZWFkX2xpbmVfbnVtYmVyKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkob3BuYW1lX3RhYiwgYXNzaWdub3BfdGFiLCBvcGVyYXRvcl9uYW1lX3N0cmluZyk6IENvbnN0aWZ5IGEgY2hhciouCgkocmVhbF95eWxleCk6IE1vdmUgbGFiZWwgYGxldHRlcicgaW50byB0aGUgc2NvcGUgd2hlcmUgaXQgaXMgdXNlZC4KCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX3RlbXBsYXRlX3Bhcm1faW5kZXgsIGJ1aWxkX292ZXJsb2FkX2ludCwKCWJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCwgZ2V0X2lkXzIpOiBDb25zdGlmeSBhIGNoYXIqLgoKCSogc2VhcmNoLmMgKGNoZWNrX2ZpbmFsX292ZXJyaWRlcik6IE1ha2Ugc3RhdGljLgoKCSogdHlwZWNrLmMgKGNvbXBvc2l0ZV9wb2ludGVyX3R5cGUpOiBDb25zdGlmeSBhIGNoYXIqLgoKMTk5OS0wOC0wNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAobWF5YmVfZ2V0X3RlbXBsYXRlX2RlY2xfZnJvbV90eXBlX2RlY2wpOiBNYWtlIHN1cmUgdGhhdAoJd2UncmUgbG9va2luZyBhdCBhIGNsYXNzLgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogU2V0IHRoZSBjb21wbGFpbiBmbGFnIGlmIHdlJ3JlCglsb29raW5nIGZvciBhIG5hbWVzcGFjZSBtZW1iZXIuCgoJKiBsZXguYyAocmVhbF95eWxleCk6IFdlIGNhbiBoYXZlIGEgbnVtYmVyIHdpdGggbm8gZGlnaXRzLgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IERvbid0IGZvcmNlIHBtZiBjb252ZXJzaW9ucy4KCgkqIHNlYXJjaC5jIChiaW5mb19mcm9tX3ZiYXNlKTogTmV3IGZuLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBVc2UgaXQgdG8gZGlhZ25vc2UgY29udmVyc2lvbgoJZnJvbSBwb2ludGVyIHRvIG1lbWJlciBvZiB2aXJ0dWFsIGJhc2UuICAKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogTGlrZXdpc2UuCgoxOTk5LTA4LTA2ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSBidWlsZF9pbmRleF90eXBlIHRvIGJ1aWxkIGluLXRlbXBsYXRlIGFycmF5CglpbmRleCB0eXBlLiAgRml4ZXMgZysrLm9saXZhL2R3YXJmMS5DLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UsIGp1c3QgZm9yIGNvbnNpc3RlbmN5LCBhcyBpdAoJZG9lc24ndCBzZWVtIHRvIHRyaWdnZXIgdGhlIGJ1ZyB3aXRob3V0IGl0LgoKMTk5OS0wOC0wNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChhZGRfZXhjZXB0aW9uX3NwZWNpZmllcik6IFVzZSBjb21wbGV0ZV90eXBlLgoKMTk5OS0wOC0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBFWEFDVF9ESVZfRVhQUi4KCShkdW1wX2JpbmFyeV9vcCk6IEJ1bGxldHByb29mLgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IFNldCBvcG5hbWVfdGFiW0VYQUNUX0RJVl9FWFBSXS4KCSogdHJlZS5jIChzZWFyY2hfdHJlZSk6IERvbid0IGVudW1lcmF0ZSBhbGwgdGhlIG5vZGVzIG9mIGNsYXNzZXMKCWAxJywgYDInLCBhbmQgYDwnOyBoYW5kbGUgdGhlbSBnZW5lcmljYWxseS4gIERvbid0IGJlIHNvcnJ5IGFib3V0CgkidW5yZWNvZ25pemVkIHRyZWUgY29kZXMiOyBqdXN0IGFib3J0LgoJKG5vX2xpbmthZ2VfY2hlY2spOiBEb24ndCBkbyBsaW5rYWdlIGNoZWNrcyBmb3IgdGVtcGxhdGVzLgoJCgkqIHRyZWUuYyAoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGVfcmVhbCk6IEhhbmRsZQoJcG9pbnRlci10by1tZW1iZXItZnVuY3Rpb24gdHlwZXMgY29ycmVjdGx5LgoKMTk5OS0wOC0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoZGVjbCk6IE9ubHkgZ2l2ZSBhbiBlcnJvciBmb3Igc2hhZG93aW5nIGEgcGFybSAKCWZyb20gKnRoaXMqIGZ1bmN0aW9uLgoKVGh1IEF1ZyAgNSAwMjo0MDo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0eXBlY2syLmM6IFVwZGF0ZSBVUkxzIGFuZCBtYWlsIGFkZHJlc3Nlcy4KCjE5OTktMDgtMDQgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjcC10cmVlLmggKGVtcHR5X2V4Y2VwdF9zcGVjKTogTmV3IGdsb2JhbCB2YXIuCgkoY29tcGV4Y2VwdHR5cGVzKTogUmVtb3ZlIHByb3RvdHlwZS4KCShjb21wX2V4Y2VwdF9zcGVjcyk6IFByb3RvdHlwZSBuZXcgZ2xvYmFsIGZ1bmN0aW9uLgoJKGFkZF9leGNlcHRpb25fc3BlY2lmaWVyKTogUHJvdG90eXBlIG5ldyBnbG9iYWwgZnVuY3Rpb24uCgkqIGRlY2wuYyAoZW1wdHlfZXhjZXB0X3NwZWMpOiBEZWZpbmUgbmV3IGdsb2JhbCB2YXIuCgkoZHVwbGljYXRlX2RlY2xzKTogVXNlIGNvbXBfZXhjZXB0X3NwZWNzLCByZXdvcmQgZXJyb3IgbWVzc2FnZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgZW1wdHlfZXhjZXB0X3NwZWMuCglBZGp1c3QgYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQgY2FsbHMuCgkqIHBhcnNlLnkgKGV4Y2VwdGlvbl9zcGVjaWZpY2F0aW9uX29wdCk6IFVzZSBlbXB0eV9leGNlcHRfc3BlYy4KCShhbnNpX3JhaXNlX2lkZW50aWZpZXIpOiBDYWxsIGNoZWNrX2Zvcl9uZXdfdHlwZS4KCShhbnNpX3JhaXNlX2lkZW50aWZpZXJzKTogVXNlIGFkZF9leGNlcHRpb25fc3BlY2lmaWVyLgoJKiBwdC5jICh0c3Vic3QpOiBVc2UgYWRkX2V4Y2VwdGlvbl9zcGVjaWZpZXIgdG8gYnVpbGQgZXhjZXB0aW9uCglzcGVjaWZpZXIuCgkqIHNlYXJjaC5jIChjaGVja19maW5hbF9vdmVycmlkZXIpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLCBicm9rZW4KCW91dCBvZiBnZXRfbWF0Y2hpbmdfdmlydHVhbC4gQ2hlY2sgdGhyb3cgc3BlY2lmaWVycywgcmV3b3JkCglkaWFnbm9zdGljcy4KCShnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IFVzZSBjaGVja19maW5hbF9vdmVycmlkZXIuCgkqIHRyZWUuYyAoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBVc2UgY29tcF9leGNlcHRfc3BlY3MuCgkqIHR5cGVjay5jIChjb21wZXhjZXB0dHlwZXMpOiBSZW1vdmUuCgkoY29tcF9leGNlcHRfdHlwZXMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLCBoZWxwZXIgZm9yCgljb21wX2V4Y2VwdF9zcGVjcy4gQ29tcGFyZSB0d28gdHlwZXMgYXMgZXhjZXB0aW9uIHNwZWNpZmllcnMuCgkoY29tcF9leGNlcHRfc3BlY3MpOiBOZXcgZ2xvYmFsIGZ1bmN0aW9uLCBjb21wYXJlIHR3byBleGNlcHRpb24KCXNwZWNpZmllcnMuCgkoY29tcHR5cGVzKTogQWRqdXN0IGZvciBjb21wX2V4Y2VwdF9zcGVjcy4KCSogdHlwZWNrMi5jIChhZGRfZXhjZXB0aW9uX3NwZWNpZmllcik6IE5ldyBnbG9iYWwgZnVuY3Rpb24uCgkKCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlKTogUmV3b3JkIGVycm9yIG1lc3NhZ2UuCgoxOTk5LTA4LTAzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY2FsbC5jIChjb252ZXJ0X2FyZ190b19lbGxpcHNpcyk6IFVzZSBwb2RfdHlwZV9wLgoJKiBjcC10cmVlLmggKHN0cnVjdCBsYW5nX3R5cGUpOiBBZGRlZCBub25fcG9kX2NsYXNzIGZsYWcuCgkoQ0xBU1NUWVBFX05PTl9QT0RfUCk6IE5ldyBtYWNybyB0byBhY2Nlc3MgaXQuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERldGVybWluZSBub24tUE9EbmVzcy4KCUNoZWNrIGZvciBhcnJheXMgb2YgcG9pbnRlcnMgKC1XZWZmYysrKS4KCVJlbW92ZSBhcnJheSBpbnNwZWN0aW9uIGR1cGxpY2F0ZWQgY29kZS4KCSogdHJlZS5jIChwb2RfdHlwZV9wKTogRGV0ZWN0IG5vbi1wb2Qgbm9uLWFnZ3JlZ2F0ZSB0eXBlcy4KCVVzZSBDTEFTU1RZUEVfTk9OX1BPRF9QLgoKMTk5OS0wOC0wMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNsYXNzLmMgKGR1cGxpY2F0ZV90YWdfZXJyb3IpOiBQcmVzZXJ2ZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi4KCjE5OTktMDgtMDMgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsLmMgKHN0YXJ0X2VudW0pOiBTaG93IGxvY2F0aW9uIG9mIHByZXZpb3VzIGRlZmluaXRpb24uCgkqIHBhcnNlLnkgKGVudW1saXN0X29wdCk6IE5ldyByZWR1Y3Rpb24uCgkoc3RydWN0c3ApOiBTaW1wbGlmeSBlbnVtIHJ1bGVzIHRvIHVzZSBlbnVtbGlzdF9vcHQuCgoxOTk5LTA4LTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoeXlwcmludCk6IEhhbmRsZSBQRlVOQ05BTUUuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSwgY2FzZSBNRVRIT0RfQ0FMTF9FWFBSKTogT25seQoJYnVpbGRfZXhwcl9mcm9tX3RyZWUgb24gdGhlIGFyZ3Mgb2YgYSBURU1QTEFURV9JRF9FWFBSLgoKMTk5OS0wOC0wMyAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBTZXQgYXR0cmlidXRlcyBiZWZvcmUgZHVwbGljYXRlX2RlY2xzIGNhbGwuCgoxOTk5LTA4LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IEFkZCBkdW1wLmMuCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IEFkZCBkdW1wLm8uCgkoZHVtcC5vKTogTmV3IHRhcmdldC4KCSogY3AtdHJlZS5oIChERUNMX0NPTlZfRk5fUCk6IERvY3VtZW50LgoJKERFQ0xfT1ZFUkxPQURFRF9PUEVSQVRPUl9QKTogTmV3IGZ1bmN0aW9uLgoJKFRZUEVfUFRSTUVNX0NMQVNTX1RZUEUpOiBOZXcgbWFjcm8uCgkoVFlQRV9QVFJNRU1fUE9JTlRFRF9UT19UWVBFKTogTGlrZXdpc2UuCgkoUFRSTUVNX0NTVF9DTEFTUyk6IFVzZSBUWVBFX1BUUk1FTV9DTEFTU19UWVBFLgoJKEFTTV9WT0xBVElMRV9QKTogTmV3IG1hY3JvLgoJKFNUTVRfTElORU5PKTogTGlrZXdpc2UuCgkoY3BfbmFtZXNwYWNlX2RlY2xzKTogTmV3IGZ1bmN0aW9uLgoJKGR1bXBfbm9kZV90b19maWxlKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKGNwX25hbWVzcGFjZV9kZWNscyk6IE5ldyBmdW5jdGlvbi4KCSh3YWxrX25hbWVzcGFjZXNfcik6IFVzZSBpdC4KCSh3cmFwdXBfZ2xvYmFsc19mb3JfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZsYWdfZHVtcF90cmFuc2xhdGlvbl91bml0KTogTmV3IHZhcmlhYmxlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZmR1bXAtdHJhbnNsYXRpb24tdW5pdC4KCShmaW5pc2hfZmlsZSk6IElmIGZsYWdfZHVtcF90cmFuc2xhdGlvbl91bml0IGlzIHNldCwgZHVtcCB0aGUKCXRyYW5zbGF0aW9uIHVuaXQuCgkqIGR1bXAuYzogTmV3IGZpbGUuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZkdW1wLXRyYW5zbGF0aW9uLXVuaXQuCgkqIHB0LmMgKHRzdWJzdF90ZW1wbGF0ZV9wYXJtcyk6IFJvYnVzdGlmeS4KCSh0c3Vic3RfZGVjbCk6IFVzZSBERUNMX09WRVJMT0FERURfT1BFUkFUT1JfUC4KCSh0c3Vic3RfZXhwcik6IFVzZSBTVE1UX0xJTkVOTy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9hc21fc3RtdCk6IEVsaW1pbmF0ZSBkdXBsaWNhdGUgY29kZS4gIENoZWNrCglmb3IgaW52YWxpZCBjdi1xdWFsaWZpZXJzIGV2ZW4gd2hpbGUgYnVpbGRpbmcgdGVtcGxhdGVzLgoJCjE5OTktMDgtMDIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjYWxsLmM6IEluY2x1ZGUgZGVmYXVsdHMuaCBpbnN0ZWFkIG9mIGV4cHIuaC4KCSogZGVjbC5jOiBMaWtld2lzZS4KCSogcHQuYzogTGlrZXdpc2UuCgkqIHR5cGVjay5jOiBJbmNsdWRlIGRlZmF1bHRzLmguCgoxOTk5LTA4LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogbGV4LmMgKGVycm9yY291bnQsIHNvcnJ5Y291bnQpOiBEb24ndCBkZWNsYXJlLgoJKiByZXBvLmMgKGVycm9yY291bnQsIHNvcnJ5Y291bnQpOiBMaWtld2lzZS4KCSogdHlwZWNrMi5jIChlcnJvcmNvdW50LCBzb3JyeWNvdW50KTogTGlrZXdpc2UuCgoxOTk5LTA4LTAyICBKYWt1YiBKZWxpbmVrICA8ampAdWx0cmEubGludXguY3o+CgoJKiBjYWxsLmMgKGNvbnZlcnRfZGVmYXVsdF9hcmcsIGJ1aWxkX292ZXJfY2FsbCk6IENoYW5nZSBhbGwgdXNlcyBvZgoJUFJPTU9URV9QUk9UT1RZUEVTLCBzbyB0aGF0IGl0IHRlc3RzIGl0IGFzIGEgQyBleHByZXNzaW9uLgoJRW5zdXJlIGV4cHIuaCBpcyBpbmNsdWRlZC4KCSogZGVjbC5jIChncm9rcGFyYW1zKTogRGl0dG8uCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogRGl0dG8uCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERpdHRvLgoKMTk5OS0wOC0wMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAobWFya19vdmVycmlkZXJzKTogRml4IG9yZGVyIG9mIGFyZ3MgdG8gb3ZlcnJpZGVzLgoJKHdhcm5faGlkZGVuKTogTGlrZXdpc2UuICBGaXggZm9yIGhhdmluZyB2aXJ0dWFsIGFuZCBub24tdmlydHVhbAoJZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZS4KCjE5OTktMDgtMDIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfUFRSTUVNRlVOQ19QKTogQ2hlY2sgVFlQRV9MQU5HX1NQRUNJRklDIG5vbi1udWxsLgoKMTk5OS0wOC0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgoxOTk5LTA4LTAxICBCZXJuZCBTY2htaWR0ICA8YmVybmRzQGN5Z251cy5jby51az4KCgkqIGRlY2wuYyAoZmluaXNoX3N0bXQpOiBEb24ndCBkZWNsYXJlIGFuZCB0ZXN0IGNvbmRfc3RhY2ssIGxvb3Bfc3RhY2ssCgljYXNlX3N0YWNrOyB1c2UgaW5fY29udHJvbF96b25lX3AuCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KCjE5OTktMDctMzEgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogZXhjZXB0LmMgKGNhdGNoX2NsYXVzZXMpOiBEZWxldGUgZGVjbGFyYXRpb24uCgoxOTk5LTA3LTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2FsbC5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogQ2FsbCBjb252ZXJ0X2Zyb21fcmVmZXJlbmNlIHRvCglhdm9pZCByZWZlcmVuY2Uvbm9uLXJlZmVyZW5jZSB0eXBlIGNvbmZ1c2lvbi4gIEZpeCB0eXBvLgoKMTk5OS0wNy0zMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IE1vdmVkIHRvIGMtY29tbW9uLmMuCgkqIGNwLXRyZWUuaCAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IFJlbW92ZS4KCjE5OTktMDctMjggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjYWxsLmMgKGNvbmRpdGlvbmFsX2NvbnZlcnNpb24pOiBEb24ndCBidWlsZCBCQVNFX0NPTlZzIGZvcgoJY29udmVyc2lvbnMgYmV0d2VlbiB0aGluZ3MgdGhhdCBoYXZlIHRoZSBzYW1lIHR5cGUuCgkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IFR3ZWFrLgoJKGNvbnZlcnRfbGlrZSk6IFNvbWUgQkFTRV9DT05WcyByZWFsbHkgZG8gcmVxdWlyZSB0aGUgZ2VuZXJhdGlvbgoJb2YgY29kZS4KCQoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBEb24ndCBnbyB0aHJvdWdoIGJ1aWxkX21vZGlmeV9leHByCglmb3Igc2ltcGxlIGluaXRpYWxpemF0aW9ucy4KCjE5OTktMDctMjcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9WSVJUVUFMX0NPTlRFWFQpOiBOZXcgbWFjcm8uCgkqIHR5cGVjay5jIChleHBhbmRfcHRybWVtZnVuY19jc3QpOiBDYWxjdWxhdGUgZGVsdGEgY29ycmVjdGx5IGZvcgoJdmlydHVhbCBmdW5jdGlvbnMgYW5kIE1JLiAgU2ltcGxpZnkuCgoJKiBtZXRob2QuYzogUmVtb3ZlIHByb3RvdHlwZSBmb3IgbGFyZ2VzdF91bmlvbl9tZW1iZXIuCgkqIHB0LmMgKGRldGVybWluZV9zcGVjaWFsaXphdGlvbik6IEZpeCB1bmluaXRpYWxpemVkIHdhcm5pbmcuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogTGlrZXdpc2UuCgoxOTk5LTA3LTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAob3ZlcnJpZGVfb25lX3Z0YWJsZSk6IEFkanVzdCB0aGUgdXNlIG9mIEJJTkZPX1ZJUlRVQUxTCgloZXJlIHRvby4KCgkqIGNwLXRyZWUuaCAoQklORk9fVklSVFVBTFMpOiBEb2N1bWVudCBuZXcgZm9ybWF0LgoJKiBjbGFzcy5jIChtb2RpZnlfb25lX3Z0YWJsZSk6IENoYW5nZSBwcm90b3R5cGUgYWNjb3JkaW5nbHkuCgkobW9kaWZ5X2FsbF92dGFibGVzKTogTGlrZXdpc2UuCgkobW9kaWZ5X2FsbF9kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKG1vZGlmeV9hbGxfaW5kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKGJ1aWxkX3Z0YWJsZV9lbnRyeV9mb3JfZm4pOiBOZXcgZnVuY3Rpb24uCgkoc2V0X3J0dGlfZW50cnkpOiBTaW1wbGlmeSBmb3IgbmV3IEJJTkZPX1ZJUlRVQUxTIGZvcm1hdC4KCShtb2RpZnlfdnRhYmxlX2VudHJ5KTogTGlrZXdpc2UuCgkoYWRkX3ZpcnR1YWxfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShidWlsZF92dGJsX2luaXRpYWxpemVyKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF92dGJscyk6IFNpbXBsaWZ5IGZvciBuZXcgQklORk9fVklSVFVBTFMgZm9ybWF0LgoJKGZpeHVwX3Z0YWJsZV9kZWx0YXMxKTogTGlrZXdpc2UuCgkoZml4dXBfdnRhYmxlX2RlbHRhcyk6IExpa2V3aXNlLgoJKG92ZXJyaWRlX29uZV92dGFibGUpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzXzEpOiBMaWtld2lzZS4KCShnZXRfYWJzdHJhY3RfdmlydHVhbHMpOiBMaWtld2lzZS4KCShleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGRlYnVnX2JpbmZvKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBEb24ndCBiYXNoIGFic3RyYWN0IHZpcnR1YWxzIHRvCglfX3B1cmVfdmlydHVhbCBoZXJlLgoJCjE5OTktMDctMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IEFkanVzdCBjYWxsIHRvIGFic3RyYWN0X3ZpcnR1YWxzX2Vycm9yCglhcyBwZXIgMTk5OS0wNy0yNiBjaGFuZ2UuCgoJKiB0eXBlY2suYyAoY19zaXplb2YpOiBEb24ndCBhbGxvdyBub24tc3RhdGljIGRhdGEgbWVtYmVycy4KCShleHByX3NpemVvZik6IExpa2V3aXNlLgoKMTk5OS0wNy0yNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5wdXQuYyAoZmVlZF9pbnB1dCk6IE9ubHkgdG91Y2ggbGluZW5vIGFuZCBpbnB1dF9maWxlbmFtZQoJaWYgIVVTRV9DUFBMSUIuICBTYXZlIHRoZSBvbGQgdmFsdWVzIGJlZm9yZSBzZXR0aW5nIHRoZSBuZXcgb25lcy4KCgkqIGlucHV0LmMgKGZlZWRfaW5wdXQpOiBBZGQgZmlsZSwgbGluZSBwYXJtcy4KCSogbGV4LmMgKGJlZ2luX2RlZmluaXRpb25fb2ZfaW5jbGFzc19pbmxpbmUsIGZlZWRfZGVmYXJnKTogQWRqdXN0LgoJKHJlYWxfeXlsZXgpOiBDaGVjayBsaW5lbW9kZSBiZWZvcmUgaW5wdXRfcmVkaXJlY3RlZCgpLgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvd25ncmFkZSBwZWR3YXJuIGFib3V0IHJldHVybmluZyBOVUxMCglmcm9tIG9wIG5ldyB0byB3YXJuaW5nLgoKMTk5OS0wNy0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobmNwX2NvbnZlcnQpOiBSZW5hbWUgdG8gcGVyZm9ybV9pbXBsaWNpdF9jb252ZXJzaW9uLgoJKiBjYWxsLmM6IEFsbCB1c2VzIGNoYW5nZWQuCgkqIHR5cGVjay5jOiBMaWtld2lzZS4KCjE5OTktMDctMjYgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBleGNlcHRpb24uY2MgKF9fY3BsdXNfdHlwZV9tYXRjaGVyKTogTWF0Y2ggX19laF9tYXRjaGVyCglwcm90b3R5cGUuCgoxOTk5LTA3LTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChDUF9JTlRFR1JBTF9UWVBFX1ApOiBOZXcgbWFjcm8uCgkoQVJJVEhNRVRJQ19UWVBFX1ApOiBBZGp1c3QgZGVmaW5pdGlvbiBmb3Igc3RhbmRhcmQgY29uZm9ybWFuY2UuCgkoc3RyaXBfdG9wX3F1YWxzKTogRGVjbGFyZS4KCShuY3BfY29udmVydCk6IExpa2V3aXNlLgoJKHR5cGVfYWZ0ZXJfdXN1YWxfYXJpdGhtZXRpY19jb252ZXJpb25zKTogTGlrZXdpc2UuCgkoY29tcG9zaXRlX3BvaW50ZXJfdHlwZSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKHN0cmlwX3RvcF9xdWFscyk6IERvbid0IG1ha2UgaXQgc3RhdGljLgoJKHByb21vdGVkX2FyaXRobWV0aWNfdHlwZV9wKTogTmV3IGZ1bmN0aW9uLgoJKGNvbmRpdGlvbmFsX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShudWxsX3B0cl9jc3RfcCk6IEFsbG93IGBmYWxzZScgYXMgYSBOVUxMIHBvaW50ZXIgY29uc3RhbnQuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IFVzZSBzYW1lX3R5cGVfcC4gIERvbid0IGJ1aWxkIEJBU0VfQ09OVnMKCWZvciBjb252ZXJ0aW5nIGEgdHlwZSB0byBpdHNlbGYuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBIb25vciBMT09LVVBfTk9fVEVNUF9CSU5ELgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBNYWtlIHN1cmUgdGhlIGZyb20gYW5kIHRvIHR5cGVzIGFyZQoJY29tcGxldGUuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogQ29ycmVjdCBoYW5kbGluZyBvZiA/OiBvcGVyYXRvci4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogSW1wcm92ZSBkb2N1bWVudGF0aW9uLgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBOZXcgZnVuY3Rpb24uCgkoY2FuX2NvbnZlcnQpOiBJbXBsZW1lbnQgaW4gdGVybXMgb2YgY2FuX2NvbnZlcnRfYXJnLgoJKG5jcF9jb252ZXJ0KTogTmV3IGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAodHlwZV9hZnRlcl91c3VhbF9hcml0aG1ldGljX2NvbnZlcnNpb25zKTogTmV3CglmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gY29tbW9uX3R5cGUuCgkoY29tcG9zaXRlX3BvaW50ZXJfdHlwZSk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20KCWJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIuCgkoY29tbW9uX3R5cGUpOiBVc2UgdHlwZV9hZnRlcl91c3VhbF9hcml0aG1ldGljX2NvbnZlcnNpb25zLgoJUmVtb3ZlIHJlZHVuZGFudCBhdHRyaWJ1dGUgbWVyZ2luZy4KCShjb21wdHlwZXMpOiBUaWR5LiAgSGFuZGxlIENPTVBMRVhfVFlQRS4KCShidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogVXNlIG51bGxfcHRyX2NzdF9wLgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBSZW1vdmUuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFVzZSBuZXcgY29udmVyc2lvbiBmdW5jdGlvbnMuCgkKCSogY3AtdHJlZS5oIChhYnN0cmFjdF92aXJ0dWFsc19lcnJvcik6IENoYW5nZSBkZWNsYXJhdGlvbi4KCSogdHlwZWNrMi5jIChhYnN0cmFjdF92aXJ0dWFsc19lcnJvcik6IENoZWNrIHRvIHNlZSBpZiBhbiBlcnJvcgoJb2N1cnJlZCwgYW5kIHJldHVybiBhIGJvb2xlYW4gdmFsdWUgYWNjb3JkaW5nbHkuCgkoYnVpbGRfZnVuY3Rpb25hbF9jYXN0KTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShncm9rcGFyYW1zKTogTGlrZXdpc2UuCgkoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTGlrZXdpc2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IExpa2V3aXNlLgoKCSogcHQuYyAodW5pZnkpOiBEb24ndCBnZXQgY29uZnVzZWQgYnkgcG9pbnRlcnMtdG8tbWVtYmVyIGZ1bmN0aW9ucy4KCgkqIHNlYXJjaC5jIChidWlsZF9jcGx1c19uZXcpOiBSb2J1c3RpZnkuCgkKMTk5OS0wNy0yNCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGd4eC5ncGVyZiAoX19idWlsdGluX3ZhX2FyZyk6IE5ldy4KCSogcGFyc2UueSAoVkFfQVJHKTogTmV3IHRva2VuLgoJKHVuYXJ5X2V4cHIpOiBSZWNvZ25pemUgaXQuCgpTdW4gSnVsIDI1IDE1OjI0OjIxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGcrK0ZBUS50ZXhpOiBEZWxldGVkIHBlciBKb2UgQnVjaydzIHJlcXVlc3QuCgkqIE1ha2VmaWxlLmluOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgoxOTk5LTA3LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYzogU3luYyB3aXRoIEMgZnJvbnRlbmQuCgkod2hpdGVzcGFjZV9jcik6IE5ldyBmbi4KCShza2lwX3doaXRlX3NwYWNlKTogVXNlIGl0LgoJKGluaXRfcGFyc2UpOiBSZW9yZGVyLgoJKHl5cHJpbnQpOiBTdXBwb3J0IENPTlNUQU5ULgoJKHByYWdtYV9nZXRjLCBwcmFnbWFfdW5nZXRjKTogQnJpbmcgYmFjay4KCShyZWFkX2xpbmVfbnVtYmVyKTogQ2hhbmdlIGluX3N5c3RlbV9oZWFkZXIgZGlyZWN0bHkuCgkoaGFuZGxlX2dlbmVyaWNfcHJhZ21hLCBoYW5kbGVfY3BfcHJhZ21hLCB5eWVycm9yKTogTW92ZSB1cCBpbiBmaWxlLgoJKHBhcnNlX2Zsb2F0KTogVXBkYXRlIHRvIEMgdmVyc2lvbi4KCSh5eWxleCk6IEhhbmRsZSAnJCcgdW5kZXIgdGhlIGxldHRlciBjYXNlLgoJUmVtb3ZlIGxvb2tpbmdfZm9yX3R5cGVuYW1lIGhhbmRsaW5nLgoJU3VwcG9ydCBoZXggZmxvYXRpbmcgcG9pbnQgY29uc3RhbnRzLgoJRm9sbG93IEMncyBsZWFkIGZvciBjaG9vc2luZyB0eXBlIG9mIGludGVnZXIgY29uc3RhbnRzLgoJUmVhcnJhbmdlIHN0dWZmIHRvIG1hdGNoIEMgZnJvbnRlbmQuCgkoeXl1bmdldGMsIHJlaW5pdF9wYXJzZV9mb3JfYmxvY2ssIHl5bGV4KTogU3VwcG9ydCBpbmRlbnRfbGV2ZWwuCgkqIHNwZXcuYyAoeXlsZXgpOiBDbGVhciBsb29raW5nX2Zvcl90eXBlbmFtZSBpZiB3ZSBzZWUgYSBUWVBFU1BFQy4KCjE5OTktMDctMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjYWxsLmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogVHdlYWsuCgkobWF5YmxlX2hhbmRsZV9pbXBsaWNpdF9vYmplY3QpOiBVc2UgZGlyZWN0X3JlZmVyZW5jZV9iaW5kaW5nIHRvCgljcmVhdGUgdGhlIHJpZ2h0IGltcGxpY2l0IGNvbnZlcnNpb24gc2VxdWVuY2UuCgoxOTk5LTA3LTIyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogRG9uJ3QgY2FsbCBkZWNsX2NvbnN0YW50X3ZhbHVlCglpZiB3ZSdyZSBjb252ZXJ0aW5nIHRvIGEgcmVmZXJlbmNlIHR5cGUuCgoJKiBjYWxsLmMgKE5FRURfVEVNUE9SQVJZX1ApOiBOZXcgbWFjcm8uCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IFNldCBpdCwgZm9yIGRlcml2ZWQtdG8tYmFzZSBjb252ZXJzaW9ucy4KCShyZWZlcmVuY2VfcmVsYXRlZF9wKTogTmV3IGZ1bmN0aW9uLgoJKHJlZmVyZW5jZV9jb21wYXRpYmxlX3ApOiBMaWtld2lzZS4KCShjb252ZXJ0X2NsYXNzX3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGRpcmVjdF9yZWZlcmVuY2VfYmluZGluZyk6IExpa2V3aXNlLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogUmV3b3JrIGZvciBzdGFuZGFyZHMtY29tcGxpYW5jZS4KCShjb252ZXJ0X2xpa2UpOiBBZGp1c3QgYWNjb3JkaW5nbHkuCgkobWF5YmVfaGFuZGxlX3JlZl9iaW5kKTogU2ltcGxpZnk7IHRoZSByaWdodCBjb252ZXJzaW9uIHNlcXVlbmNlcwoJYXJlIG5vdyBidWlsdCB1cCBpbiByZWZlcmVuY2VfYmluZGluZy4KCShpbml0aWFsaXplX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4KCSogY3AtdHJlZS5oIChJQ1NfVVNFUl9GTEFHKTogRG9jdW1lbnQuCgkoSUNTX1RISVNfRkxBRyk6IExpa2V3aXNlLgoJKElDU19CQURfRkxBRyk6IExpa2V3aXNlLgoJKE5FRURfVEVNUE9SQVJZX1ApOiBMaWtld2lzZS4KCShjcF9sdmFsdWVfa2luZCk6IE5ldyB0eXBlLgoJKHJlYWxfbHZhbHVlX3ApOiBSZXR1cm4gaXQuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFByb3ZpZGUgbW9yZSBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbiBmb3IKCUFHR1JfSU5JVF9FWFBScy4KCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogRG8gbm90IHRyeSB0byBwZXJmb3JtIGltcGxpY2l0Cgljb252ZXJzaW9ucyBmb3IgYSBicmFjZS1lbmNsb3NlZCBpbml0aWFsaXplci4KCSogc2VhcmNoLmMgKGxvb2t1cF9jb252ZXJzaW9ucyk6IERvY3VtZW50LgoJKiB0cmVlLmMgKGx2YWx1ZV9wXzEpOiBSZXR1cm4gYSBjcF9sdmFsdWVfa2luZC4gIENhbGN1bGF0ZQoJYXBwcm9wcmlhdGVseS4KCShyZWFsX2x2YWx1ZV9wKTogQWRqdXN0IGFjY29yZGluZ2x5LgoJKGx2YWx1ZV9wKTogTGlrZXdpc2UuCgkoYnVpbGRfY3BsdXNfbmV3KTogRG9uJ3QgYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFuIGFic3RyYWN0IGNsYXNzLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBVc2UgaW5pdGlhbGl6ZV9yZWZlcmVuY2UuCgkKMTk5OS0wNy0yMSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCkgOiBDb3JyZWN0IHRoZSB0ZXN0IGZvciBvdmVyZmxvdyB3aGVuIGxleGluZwoJaW50ZWdlciBsaXRlcmFscy4KCjE5OTktMDctMjAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAod2Fybl9leHRlcm5fcmVkZWNsYXJlZF9zdGF0aWMpOiBDaGVjayBERUNMX0FSVElGSUNJQUwsCglub3QgREVDTF9CVUlMVF9JTiwgdG8gZGV0ZXJtaW5lIGlmIGEgZnVuY3Rpb24gaXMgaW50ZXJuYWxseSBkZWNsYXJlZC4KCShkdXBsaWNhdGVfZGVjbHMpOiBMaWtld2lzZS4gIEltcHJvdmUgaGFuZGxpbmcgb2YgYnVpbHRpbnMuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBvZiBidWlsdGlucy4KCgkqIGNwLXRyZWUuaCAoQU5PTl9BR0dSX1RZUEVfUCk6IFVzZSBDTEFTU19UWVBFX1AuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUHVsbCBvdXQgZGVjbF9jb25zdGFudF92YWx1ZSBpbgoJdGVtcGxhdGVzLCB0b28uCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0LCBmaW5pc2hfc3RydWN0XzEpOiBSZW1vdmUgJ3dhcm5fYW5vbicgcGFybS4KCSogY3AtdHJlZS5oLCBwdC5jLCBzZW1hbnRpY3MuYzogQWRqdXN0LgoJKiBtZXRob2QuYyAobGFyZ2VzdF91bmlvbl9tZW1iZXIpOiBSZW1vdmUuCgoJKiBsYW5nLXNwZWNzLmggKGMrKy1jcHAtb3V0cHV0KTogUGFzcyAtZnByZXByb2Nlc3NlZC4KCgkqIGxleC5jICh0b2tlbl9nZXRjaCwgdG9rZW5fcHV0X2JhY2spOiBOZXcgZm5zLgoJKHJlYWxfeXlsZXgpOiBVc2UgdGhlbS4KCgkqIGxleC5jIChsYW5nX2luaXQpOiBHZW5lcmFsaXplLgoJKGxhbmdfaW5pdF9vcHRpb25zKTogVGVsbCBjcHBsaWIgdGhpcyBpcyBDKysuCgkobmV4dGNoYXIpOiBSZW1vdmUuICBSZXBsYWNlIHVzZXMgd2l0aCBwdXRfYmFjay4KCShza2lwX3doaXRlX3NwYWNlKTogSGFuZGxlIGxpbmVtb2RlIGhlcmUuICBPcHRpbWl6ZSBmb3IgY3BwbGliLgoJKGV4dGVuZF90b2tlbl9idWZmZXJfdG8pOiBOZXcgZm4uCgkoZXh0ZW5kX3Rva2VuX2J1ZmZlcik6IFVzZSBpdC4KCShyZWFkX2xpbmVfbnVtYmVyLCBjaGVja19uZXdsaW5lKTogSnVzdCBkZWFsIHdpdGggdG9rZW5zLgoJKHJlYWxfeXlsZXgpOiBNb3JlIGNwcGxpYiBvcHRpbWl6YXRpb25zLiAgU2ltcGxpZnkuICBEb24ndCBwcm9kdWNlCglFWFRFUk5fTEFOR19TVFJJTkcsIExFRlRfUklHSFQgb3IgUEFSRU5fU1RBUl9QQVJFTiBoZXJlLgoJKiBzcGV3LmMgKHl5bGV4KTogUHJvZHVjZSBMRUZUX1JJR0hUIGFuZCBFWFRFUk5fTEFOR19TVFJJTkcuCgkqIHBhcnNlLnkgKFBBUkVOX1NUQVJfUEFSRU4pOiBSZW1vdmUuCgkqIGlucHV0LmM6IERvbid0IHVzZSB0aGUgcHV0YmFjayBtYWNoaW5lcnkgd2l0aCBjcHBsaWIuCgkoc3ViX2dldGNoKTogRm9sZCBiYWNrIGludG8gZ2V0Y2guCgkoZ2V0Y2gpOiBEb24ndCBoYW5kbGUgbGluZW1vZGUgaGVyZS4KCShmZWVkX2lucHV0KTogVW5nZXQgYW55IHRleHQgaW4gdGhlIHRva2VuIGJ1ZmZlci4KCgkqIGxleC5jCShzZXRfdHlwZWRlY2xfaW50ZXJmYWNlX2luZm8sIHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvLAoJbmV4dHl5Y2hhciwgbmV4dHl5bHZhbCk6IFJlbW92ZS4KCjE5OTktMDctMjAgIE1pY2hhZWwgVGllbWFubiAgPHRpZW1hbm5AaG9sb2RlY2suY3lnbnVzLmNvbT4KCSAgICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaW5kZW50X2xldmVsKTogTmV3IHZhcmlhYmxlLgoJKGluaXRfcGFyc2UpOiBTZXQgY3BwX3Rva2VuIHRvIENQUF9ESVJFQ1RJVkUuCgkoY29uc3VtZV9zdHJpbmcpOiBNYWtlIHRoaXMgc21hcnQgYWJvdXQgVVNFX0NQUExJQi4KCSh5eXVuZ2V0Yyk6IFVzZSBwdXRfYmFjayBmdW5jdGlvbi4KCShwcmFnbWFfZ2V0YywgcHJhZ21hX3VuZ2V0Yyk6IEZ1bmN0aW9ucyBkZWxldGVkLgoJKGNoZWNrX25ld2xpbmUpOiBSZXdyaXRlIHRvIGJlIGludGVsbGlnZW50IGFib3V0IFVTRV9DUFBMSUIuCglBbHNvLCBjYWxsIEhBTkRMRV9QUkFHTUEgd2l0aCBnZXRjaCwgeXl1bmdldGMsIG5vdCBwcmFnbWFfZ2V0YyBhbmQKCXByYWdtYV91bmdldGMuCgkocmVhbF95eWxleCk6IFJld3JpdGUgdG8gYmUgaW50ZWxsaWdlbnQgYWJvdXQgVVNFX0NQUExJQi4KCUFsc28sIGNsZWFuIHVwIGNhc2VzIHdoZXJlIHdlIHJlZHVuZGFudGx5IHNldCB0b2tlbl9idWZmZXJbMF0uCgkocmVhZF9saW5lX251bWJlcik6IE5ldyBmbi4KCSogaW5wdXQuYyAoZmVlZF9pbnB1dCk6IFVzZSBpbnRlZ3JhdGVkIGNwcGxpYiBpZiBVU0VfQ1BQTElCLgoJKGVuZF9pbnB1dCk6IENhbGwgY3BwX3BvcF9idWZmZXIgaWYgVVNFX0NQUExJQi4KCShzdWJfZ2V0Y2gpOiBDb25kaXRpb25hbGl6ZSBvdXQgY29kZSB0aGF0J3Mgbm90IGFwcHJvcHJpYXRlIGlmCglVU0VfQ1BQTElCLgoJKHB1dF9iYWNrKTogUmV3cml0ZSBpbiBjYXNlIFVTRV9DUFBMSUIgaXMgZGVmaW5lZC4KCShpbnB1dF9yZWRpcmVjdGVkKTogRGl0dG8uCgpUdWUgSnVsIDIwIDExOjI0OjE5IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxiZXJuZHNAY3lnbnVzLmNvLnVrPgoKCSogY3AtdHJlZS5oOiBEZWxldGUgbG90cyBvZiBkZWNsYXJhdGlvbnMgb2YgdHJlZSBub2RlczsgcmVwbGFjZWQgYnkKCWNfZ2xvYmFsX3RyZWVzIGFuZCBhY2Nlc3NvciBtYWNyb3MgZGVmaW5lZCBpbiBjLWNvbW1vbi5oLgoJKGNwX3RyZWVfaW5kZXgpOiBOZXcgZW51bWVyYXRpb24uCgkoY3BfZ2xvYmFsX3RyZWVzKTogRGVjbGFyZSBuZXcgYXJyYXkuICBBZGQgYWNjZXNzb3IgbWFjcm9zIGZvciBpdCwgYW5kCglkZWxldGUgZGVjbGFyYXRpb25zIG9mIHRyZWUgbm9kZXMgcmVwbGFjZWQgYnkgaXQuCgkoYnVpbHRpbl9mdW5jdGlvbik6IERlbGV0ZSBtYWNybywgYWRkIGRlY2xhcmF0aW9uIGZvciBuZXcgZnVuY3Rpb24uCglJbmNsdWRlIGMtY29tbW9uLmguCgkqIGRlY2wuYzogRGVsZXRlIGRlZmluaXRpb25zIGZvciB0cmVlIG5vZGVzIHRoYXQgd2VyZSByZXBsYWNlZCBieQoJY3BfZ2xvYmFsX3RyZWVzIGFuZCBjX2dsb2JhbF90cmVlcy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5zOyBkZWxldGUgY29kZQoJdG8gZ2VuZXJhdGUgdGhlIGNvbW1vbiBidWlsdGlucyBoZXJlLgoJKGJ1aWx0aW5fZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wyLmMgKGFib3J0X2ZuZGVjbCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3JldHVybl9hZGRyZXNzKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKGJ1aWx0aW5fcmV0dXJuX2FkZHJlc3NfZm5kZWNsKTogRGVsZXRlIHZhcmlhYmxlLgoJKGNvbnN0X3B0cl90eXBlX25vZGUpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBEZWxldGUgZGVjbGFyYXRpb24gb2YKCXZvaWRfbGlzdF9ub2RlLgoJKiBwYXJzZS55ICh2b2lkX2xpc3Rfbm9kZSk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogcnR0aS5jICh0eXBlX2luZm9fdHlwZV9ub2RlLCB0aW5mb19mbl9pZCwgdGluZm9fZm5fdHlwZSk6CglEZWxldGUgdmFyaWFibGVzLgoJKGNvbnN0X3N0cmluZ190eXBlX25vZGUpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIHNlYXJjaC5jIChhYm9ydF9mbmRlY2wpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkqIE1ha2VmaWxlLmluOiBVcGRhdGUgZGVwZW5kZW5jaWVzLgoKMTk5OS0wNy0xOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHB0LmMgKGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogTW92ZSB0ZXN0IGZvciBtaXNzaW5nIGRlZmF1bHQKCWFyZ3VtZW50cyBoZXJlLCBmcm9tIC4uLgoJKGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBIZXJlLgoKMTk5OS0wNy0xOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25lc3RlZF90eXBlKTogUmVtb3ZlLgoJKHB1c2h0YWcpOiBEb24ndCBjYWxsIGl0LgoKU2F0IEp1bCAxNyAyMzo1MTozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoSU5URVJGQUNFKTogQnVtcCB0byAyLgoKMTk5OS0wNy0xNyAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgkKCSogdHlwZWNrMi5jIChteV9mcmllbmRseV9hYm9ydCk6IFVwZGF0ZWQgVVJMIHdpdGggYnVnIHJlcG9ydGluZwoJaW5zdHJ1Y3Rpb25zIHRvIGdjYy5nbnUub3JnLiAgUmVtb3ZlZCBlLW1haWwgYWRkcmVzcy4KCjE5OTktMDctMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jIChkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBUaWdodGVuIGVycm9yLWNoZWNraW5nLgoJKGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBMaWtld2lzZS4KCjE5OTktMDctMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jIChjaGVja19kZWZhdWx0X3RtcGxfYXJncyk6IEhhbmRsZSBmcmllbmRzIGRlZmluZWQgaW4gdGhlCgljbGFzcyBqdXN0IGxpa2UgbWVtYmVyIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBjbGFzcy4KCjE5OTktMDctMDkgIE1pY2hhZWwgVGllbWFubiAgPHRpZW1hbm5AaGFwcHkuY3lnbnVzLmNvbT4KCSAgICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHN0cnVjdCBsYW5nX2RlY2wpOiBBZGRlZCBmaWVsZCBmb3Igc3RvcmluZyBzb3J0ZWQKCUZJRUxEX0RFQ0xzICh1c2VkIGluIFRZUEVfREVDTHMpLgoJKERFQ0xfUEVORElOR19JTkxJTkVfSU5GTyk6IEFkanVzdGVkIHRvIHVzZSAndScgdW5pb24uCgkoREVDTF9TT1JURURfRklFTERTKTogTmV3IG1hY3JvLgoJKiBjbGFzcy5jIChtZXRob2RfbmFtZV9jbXApOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogTW9kaWZpZWQgdG8gc3VwcG9ydCBzb3J0aW5nIGFuZCBzZWFyY2hpbmcKCW1ldGhvZHMuCgkoZmluaXNoX3N0cnVjdF9hbm9uKTogQ2hhbmdlZCBjb2RlIGluIGlubmVyIGxvb3AgdG8gdXNlIEVMVCByYXRoZXIgCgl0aGFuIFVFTFQgKHdoaWNoIHJlcXVpcmVkIGFuIGV4dHJhIGluZGlyZWN0aW9uIGZvciBldmVyeSByZWZlcmVuY2UpLgoJKGZpZWxkX2RlY2xfY21wKTogTmV3IGZ1bmN0aW9uIHRvIHN1cHBvcnQgc29ydGluZyBGSUVMRF9ERUNMcy4KCShmaW5pc2hfc3RydWN0XzEpOiBTb3J0IGZpZWxkcy4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZF8xKTogVXNlIERFQ0xfU09SVEVEX0ZJRUxEUyBpZiB3ZSBoYXZlIHRoZW0uCgkobG9va3VwX2ZuZmllbGRzXzEpOiBTZWFyY2ggc29ydGVkIG1ldGhvZHMgaW4gTUVUSE9EX1ZFQy4KCUFsc28sIHN3aXRjaCB0byB1c2luZyBhcnJheSBpbmRleGluZyByYXRoZXIgdGhhbiBhIGNoYW5naW5nIHBvaW50ZXIuCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfZGVjbCk6IEhhbmRsZSBUWVBFX0RFQ0xzIHRoYXQgaGF2ZQoJREVDTF9TT1JURURfRklFTERTLgoKMTk5OS0wNy0wOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAocmVwYXJzZV9hYnNkY2xfYXNfY2FzdHMpOiBEb24ndCB3YXJuIGFib3V0IG9sZC1zdHlsZQoJY2FzdHMgaW4gc3lzdGVtIGhlYWRlcnMgb3IgZXh0ZXJuICJDIiBibG9ja3MuCgoJKiBwdC5jIChkb19kZWNsX2luc3RhbnRpYXRpb24pOiBEb3duZ3JhZGUgZHVwbGljYXRlIGluc3RhbnRpYXRpb24KCWVycm9ycyB0byBwZWR3YXJuLgoKMTk5OS0wNy0wOSAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBoYXBweS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAod3JpdGVfdmlydHVhbHMpOiBEZWxldGVkIGRlY2xhcmF0aW9uLgoJKiBjcC10cmVlLmggKHdyaXRlX3ZpcnR1YWxzKTogRGVsZXRlZCBleHRlcm4gZGVjbGFyYXRpb24uCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFJlbW92ZWQgI2lmIDAnZCBjb2RlIHRoYXQgbWVudGlvbnMKCXdyaXRlX3ZpcnR1YWxzLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IFJld3JpdGUgY29kZSB0byBub3QgZGVwZW5kCglvbiB3cml0ZV92aXJ0dWFscy4KCgkqIGxleC5jIChjcF9wcmFnbWFfaW50ZXJmYWNlKTogTmV3IGZ1bmN0aW9uLgoJKGNwX3ByYWdtYV9pbXBsZW1lbnRhdGlvbik6IExpa2V3aXNlLgoJKGhhbmRsZV9jcF9wcmFnbWEpOiBDYWxsIHRoZW0uCgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogU2ltcGxpZnkgQyBjb2RlIGluIGxvb2tfaGFyZC4KCgkqIHhyZWYuYyAoUEFMTE9DKTogVXNlIHhjYWxsb2MsIG5vdCBjYWxsb2MuCgkoU0FMTE9DKTogVXNlIHhtYWxsb2MsIG5vdCBtYWxsb2MuCgoJKiBydHRpLmMgKHN5bnRoZXNpemVfdGluZm9fZm4pOiBBZGQgbWlzc2luZyBjYWxsIHRvIHBvcF9tb21lbnRhcnkuCgoJKiBzZWFyY2guYyAobm90ZV9kZWJ1Z19pbmZvX25lZWRlZCk6IERvbid0IHNlYXJjaCBpZiBXUklURV9TWU1CT0xTCglpcyBOT19ERUJVRy4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogSWYgYSByZWRlY2xhcmF0aW9uIGRvZXNuJ3QgbWF0Y2ggdGhlCglpbml0aWFsIGRlY2xhcmF0aW9uLCB0aGVuIGRvbid0IHNhdmUgdGhlIGlubGluZSBpbmZvIGFuZCBieSBhbGwKCW1lYW5zIGRvbid0IG1hcmsgdGhlIGZ1bmN0aW9uIGFzIGEgYnVpbHRpbiBmdW5jdGlvbi4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFNldCBOT05DTEFTUyB0byAxIGlmIAoJQ1VSUkVOVF9DTEFTU19UWVBFIGlzIDAuCgoJKiBjbGFzcy5jIChkdXBsaWNhdGVfdGFnX2Vycm9yKTogU2V0IFRZUEVfTk9OQ09QSUVEX1BBUlRTIHRvCglOVUxMX1RSRUUuCgoJKiBwdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBBZGRlZCB2dGFibGUtbmVlZHMtd3JpdGluZy4KCldlZCBKdWwgIDcgMDE6MjY6NDcgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogRml4IGNoZWNrIGZvciBydHRpIG9mZnNldC4KCjE5OTktMDctMDYgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKHVuc2lnbmVkX3R5cGUsc2lnbmVkX3R5cGUsc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUpIDoKCU1lcmdlZCBpbnRvIGMtY29tbW9uLgoKMTk5OS0wNy0wNSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmMgKGVycm9yY291bnQpOiBEZWNsYXJlIGl0LgoJKGZpbmlzaF9wYXJzZSk6IFVwZGF0ZSBlcnJvcmNvdW50IGZvciB3aGVuIHVzaW5nIENQUExJQi4KCjE5OTktMDctMDUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKElTX0FHR1JfVFlQRSk6IEluY2x1ZGUgaW5zdGFudGlhdGVkIHRlbXBsYXRlIHRlbXBsYXRlCglwYXJhbWV0ZXJzLgoJKElNUExJQ0lUX1RZUEVOQU1FX1RZUEVfREVDTF9QKTogTmV3IG1hY3JvLgoJKiBkZWNsLmMgKHB1c2hfY2xhc3NfYmluZGluZyk6IFVzZSBpdC4KCShsb29rdXBfbmFtZV9yZWFsKTogTGlrZXdpc2UuCgoxOTk5LTA3LTAyICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAod2lkZXN0X2ludGVnZXJfbGl0ZXJhbF90eXBlX25vZGUsCgl3aWRlc3RfdW5zaWduZWRfbGl0ZXJhbF90eXBlKSA6IE5ldy4KCSogZGVjbC5jICh3aWRlc3RfaW50ZWdlcl9saXRlcmFsX3R5cGVfbm9kZSwKCXdpZGVzdF91bnNpZ25lZF9saXRlcmFsX3R5cGUpIDogTmV3LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSGFuZGxlL3VzZSB0aGUgdHdvIG5ldyB0eXBlcy4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBTYW1lLgoJKiB0eXBlY2suYyAodW5zaWduZWRfdHlwZSxzaWduZWRfdHlwZSxzaWduZWRfb3JfdW5zaWduZWRfdHlwZSkgOgoJU2FtZS4gCgoxOTk5LTA3LTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGdpdmUgbmFtZXMgImZvciBsaW5rYWdlIHB1cnBvc2VzIgoJdG8gYW5vbnltb3VzIGN2LXF1YWxpZmllZCB0eXBlcy4KCjE5OTktMDctMDEgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpIDogQ2hhbmdlIGludGVnZXIgbGl0ZXJhbCBvdmVyZmxvdyBoYW5kbGluZyB0bwoJYmUgbGlrZSBjLWxleC5jLgoKCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBJbXByb3ZlICdpbnRlZ2VyIGNvbnN0YW50IG91dCBvZiByYW5nZScgbWVzc2FnZXMuCgoxOTk5LTA2LTI4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IEZpeCB0eXBvIGluIGNwX3dhcm5pbmdfYXQgY2FsbC4KCjE5OTktMDYtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogSGFuZGxlIFRSRUVfTElTVCBhZ2Fpbi4KCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF9wYXJtcyk6IERvbid0IGNvbXBsYWluIGFib3V0IAoJY29udmVydGluZyBmcm9tICgpIHRvICguLi4pIGlmICFmbGFnX3N0cmljdF9wcm90b3R5cGUuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXBkYXRlIHRoZSBuYW1lcyBvZiBhbGwgdmFyaWFudHMgd2hlbgoJZGUtYW5vbnltaXppbmcuCgoxOTk5LTA2LTIxICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaW5pdC5jIChleHBhbmRfYWdncl92YmFzZV9pbml0KTogUmVuYW1lIHRvCgljb25zdHJ1Y3RfdmlydHVhbF9iYXNlcy4gIENvbmRpdGlvbmFsaXplIGNvbnN0cnVjdGlvbiBoZXJlLCAKCXJhdGhlciB0aGFuIC4uLgoJKGVtaXRfYmFzZV9pbml0KTogSGVyZS4KCjE5OTktMDYtMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2FzbV9zdG10KTogQXBwbHkgZGVjYXkgY29udmVyc2lvbnMgdG8KCWlucHV0IG9wZXJhbmRzLgoKCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBXaGVuIGJ1aWxkaW5nIGFuIGFub255bW91cyBmdW5jdGlvbgoJZm9yIHVzZSB3aXRoIGF0ZXhpdCwgY29tcHV0ZSBpdHMgYm9keSBiZWZvcmUgYW5kIGFmdGVyIGVudGVyaW5nCgl0aGUgZnVuY3Rpb24uCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgQklORF9FWFBSLCBMT09QX0VYUFIsIGFuZAoJRVhJVF9FWFBSLgoJCjE5OTktMDYtMTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX3ZiYXNlX2luaXQpOiBBZGQgZmxhZyBwYXJhbWV0ZXIuCgkoYnVpbGRfcGFydGlhbF9jbGVhbnVwX2Zvcik6IFJlbW92ZSwgaW5saW5pbmcgaW50byAuLgoJKGV4cGFuZF9jbGVhbnVwX2Zvcl9iYXNlKTogLi4uIGhlcmUuICBUYWtlIGZsYWcgcGFyYW1ldGVyLgoJKGVtaXRfYmFzZV9pbml0KTogUGFzcyB0aGUgaW5fY2hyZyBwYXJhbWV0ZXIgdG8KCWVtaXRfYWdncl92YmFzZV9pbml0LiAKCShlbWl0X2FnZ3JfdmJhc2VfaW5pdCk6IFBhc3MgaXQgdG8gZXhwYW5kX2NsZWFudXBfZm9yX2Jhc2UuCgkKMTk5OS0wNi0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IFVzZSBzYW1lX3R5cGVfcCwgcmF0aGVyIHRoYW4KCXJlbHlpbmcgb24gcG9pbnRlci1lcXVhbGl0eSBmb3IgdHlwZXMuCgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IFNpbXBsaWZ5LgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFJlbW92ZSBib2d1cyBjb2RlIGZvciB0d28tYXJndW1lbnQKCWRlbGV0ZS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IEV4cGFuZCBvbiBjb21tZW50LCBhbmQgcmVtb3ZlIGRlYWQgY29kZS4KCgkqIGluaXQuYyAoZXhwYW5kX2NsZWFudXBfZm9yX2Jhc2UpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dAoJZnJvbSAuLi4KCShlbWl0X2Jhc2VfaW5pdCk6IEhlcmUuCgkoZXhwYW5kX2FnZ3JfdmJhc2VfaW5pdCk6IFVzZSBpdC4KCjE5OTktMDYtMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGNsYXNzX2NhY2hlX2ZpcnN0b2JqKTogRGVjbGFyZS4KCShtYXliZV9wdXNoX2NhY2hlX29ic3RhY2spOiBSZW5hbWUgdG8gcHVzaF9jYWNoZV9vYnN0YWNrLgoJKiBjbGFzcy5jIChwZXJtYW5lbnRfb2JzdGFjayk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCShjbGFzc19jYWNoZV9maXJzdG9iaik6IE1ha2UgaXQgZ2xvYmFsLgoJKGFkZF9tZXRob2QpOiBEb24ndCB1c2UgcGVybWFuZW50X29ic3RhY2sgZGlyZWN0bHkuCgkocHVzaGNsYXNzKTogT25seSBmcmVlIHRoZSBjbGFzc19jYWNoZV9vYnN0YWNrIGlmIHdlIGtub3cgaG93IGZhcgoJYmFjayB0byBmcmVlIGl0LgoJKG1heWJlX3B1c2hfY2FjaGVfb2JzdGFjayk6IFJlbmFtZSB0byBwdXNoX2NhY2hlX29ic3RhY2suCgkqIGRlY2wuYzogUmVtb3ZlIGRlYWQgY29tbWVudC4KCShzYXZlZF9zY29wZSk6IEFkZCBjbGFzc19jYWNoZV9maXJzdG9iai4KCShwdXNoX3RvX3RvcF9sZXZlbCk6IFNhdmUgaXQuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSBpdC4KCShwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcpOiBVc2UgcHVzaF9jYWNoZV9vYnN0YWNrLCBub3QKCW1heWJlX3B1c2hfY2FjaGVfb2JzdGFjay4KCSogc2VhcmNoLmMgKHB1c2hfY2xhc3NfZGVjbHMpOiBMaWtld2lzZS4KCQoxOTk5LTA2LTE0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9mdW5jdGlvbik6IFB1c2ggaW50byBuYW1lc3BhY2Ugb2YgZnJpZW5kCglmdW5jdGlvbiBiZWZvcmUgcHVzaGRlY2wnaW5nIGl0LgoKMTk5OS0wNi0xNCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogUmVtb3ZlIFJFRl9CSU5EIGZyb20gYWxsIG9wZXJhbmRzLgoKMTk5OS0wNi0xMyAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogTG9vayB1cCBvcGVyYXRvciBkZWxldGUgZXZlbiBpZiB0aGVyZSB3YXMKCW5vIGV4cGxpY2l0IG5ldyBwbGFjZW1lbnQuCgoxOTk5LTA2LTA4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZXhjZXB0LmMgKGNvbXBsZXRlX3B0cl9yZWZfb3Jfdm9pZF9wdHJfcCk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dAoJb2YgLi4uCgkoYnVpbGRfdGhyb3cpOiAuLi4gaGVyZS4gQ2FsbCBpdC4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrKTogQ2FsbCBpdC4KCjE5OTktMDYtMDcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzZWFyY2guYyAoY29udmVydF9wb2ludGVyX3RvX3NpbmdsZV9sZXZlbCk6IFJlaW1wbGVtZW50IHdpdGhvdXQKCXVzaW5nIGdldF9iaW5mby4KCjE5OTktMDYtMDYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBtZXRob2QuYyAoaXNfYmFja19yZWZlcmVuY2VhYmxlX3R5cGUpOiBCYWNrLXJlZmVyZW5jZSBib29scyB3aGVuCglub3Qgc3F1YW5nbGluZy4KCjE5OTktMDYtMDcgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogUmVwbGFjZSB1bnVzZWQgYnl0ZXMgZnJvbSBiYWQgbXVsdGlieXRlIGNoYXIuCgkqIGlucHV0LmMgKHB1dGJhY2tfYnVmZmVyKTogTmV3IHN0cnVjdHVyZSB0eXBlLgoJKHB1dGJhY2spOiBSZXBsYWNlcyBwdXRiYWNrX2NoYXIgbWVtYmVyLgoJKHB1dGJhY2spOiBSZXBsYWNlcyBwdXRiYWNrX2NoYXIgc3RhdGljIHZhcmlhYmxlLgoJKGZlZWRfaW5wdXQpOiBVc2UgcHV0YmFjay4KCShlbmRfaW5wdXQpOiBVc2UgcHV0YmFjay4KCShzdWJfZ2V0Y2gpOiBVc2UgcHV0YmFjay4KCShwdXRfYmFjayk6IFVzZSBwdXRiYWNrLgoKMTk5OS0wNi0wNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGaXggdHlwbyBpbiBsYXN0IGNoYW5nZS4KCjE5OTktMDYtMDQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfaWZfc3RtdF9jb25kKTogQ29weSBjb25kIHRvIHBlcm1hbmVudF9vYnN0YWNrLgoJKGZpbmlzaF93aGlsZV9zdG10X2NvbmQsIGZpbmlzaF9kb19zdG10LCBmaW5pc2hfZm9yX2NvbmQpOiBMaWtld2lzZS4KCjE5OTktMDYtMDQgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBDaGVjayB0aHJvdyBleHByZXNzaW9uIHZhbGlkaXR5LgoKMTk5OS0wNi0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCB0cmVhdCBhcmJpdHJhcnkgdHlwZXMgYXMgdW5zaWduZWQKCWp1c3QgYmVjYXVzZSBmbGFnX3NpZ25lZF9iaXRmaWVsZHMgaXMgZmFsc2UuCgoxOTk5LTA2LTAzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBVcGRhdGUgdGhlIHN0cnVjdCdzCglsb2NhdGlvbiBoZXJlIC4uLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogLi4uIHJhdGhlciB0aGFuIGhlcmUuCgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IERvbid0IHJlbHkgb24gdW5pbml0aWFsaXplZAoJdmFyaWFibGUuCgoxOTk5LTA1LTMxICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoQUxMX0NGTEFHUyk6IEFkZCAnLVcgLVdhbGwnLgoKMTk5OS0wNS0zMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogVXNlIHB1c2hfb2JzdGFja3Nfbm9jaGFuZ2UKCWFuZCBmcmllbmRzIHJhdGhlciB0aGFuIG1lc3Npbmcgd2l0aCBjdXJyZW50X29ic3RhY2sgZGlyZWN0bHkuCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGVfcmVhbCk6IFJld29yayBBUlJBWV9UWVBFCglhbGxvY2F0aW9uIHRvIG1hdGNoIHByYWN0aWNlIHRocm91Z2hvdXQgdGhlIHJlc3Qgb2YgdGhlIAoJY29tcGlsZXIuCgoxOTk5LTA1LTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogbGV4LmMgKG1ha2VfbGFuZ190eXBlKTogQ3JlYXRlIFRZUEVfQklORk8gZm9yCglURU1QTEFURV9UWVBFX1BBUk1zIGp1c3QgbGlrZSBmb3Igbm9uLXRlbXBsYXRlIHR5cGVzLgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogTW92ZSBjaGVja3Mgb24gaW5pdGlhbGl6YXRpb24gdG8gLi4uCgkoY3BfZmluaXNoX2RlY2wpOiBIZXJlLiAgVGlkeSBmb3JtYXR0aW5nIHNsaWdodGx5LgoKMTk5OS0wNS0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAoYWRkX2JpbmRpbmcpOiBEb24ndCBjb21wbGFpbiBhYm91dCBhIHJlZGVjbGFyYXRpb24gb2YgYQoJc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0eXBlZGVmIGluIGEgbG9jYWwgc2NvcGUuCgoxOTk5LTA1LTI4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogZGVjbC5jIChjb21wbGV0ZV9hcnJheV90eXBlKTogQWxsb2NhdGUgb2ZmIHNhbWUgb2JzdGFjay4gRml4CglET19ERUZBVUxUIGNvbW1lbnQgdG8gbWF0Y2ggcmVhbGl0eS4KCgkqIGZyaWVuZC5jIChtYWtlX2ZyaWVuZF9jbGFzcyk6IEZpeCBkaWFnbm9zdGljIHR5cG8uCgoxOTk5LTA1LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBIYW5kbGUgZ2V0dGluZyBhCglURU1QTEFURV9JRF9FWFBSLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IERvbid0IGNhbGwgcHVzaGRlY2wgZm9yIGltcGxpY2l0bHkgZGVjbGFyZWQKCWBhdGV4aXQnIHVzZWQgdG8gcmVnaXN0ZXIgZGVzdHJ1Y3RvcnMuCgoxOTk5LTA1LTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3Z0YmxzKTogQ29weSBCSU5GT19WSVJUVUFMcyBiZWZvcmUgdXNpbmcgaXQgdG8KCWludGlhbGl6ZSBhIHZ0YWJsZS4KCgkqIGNwLXRyZWUuaCAoTkFNRVNQQUNFX0xFVkVMKTogUmVmb3JtYXQuCgkobGFuZ19kZWNsX2ZsYWdzKTogRG9jdW1lbnQgTUVNRlVOQ19QT0lOVEVSX1RPLiAgU2F2ZSBmb3VyIGJ5dGVzCglieSBjb21iaW5pbmcgVEVNUExBVEVfSU5GTyBhbmQgTEVWRUwgaW50byBhIHNpbmdsZSB1bmlvbi4KCShERUNMX1RFTVBMQVRFX0lORk8pOiBSZWZvcm1hdC4KCShERUNMX1NBVkVEX1RSRUUpOiBEb2N1bWVudC4KCShERUNMX1RFTVBMQVRFX0lOSkVDVCk6IFJlbW92ZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFJlbW92ZSBjb2RlIHRvIGRlYWwgd2l0aAoJREVDTF9URU1QTEFURV9JTkpFQ1QuIAoKCSogZGVjbC5jIChtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBIYW5kbGUgYWxsIG5ldwoJdHlwZXMgaW4gdGVtcGxhdGVzIHVuaWZvcm1seS4KCSogbWV0aG9kLmMgKGJ1bGlkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBVc2UgQ1BfREVDTF9DT05URVhULCBub3QKCURFQ0xfQ09OVEVYVC4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSW5qZWN0IHRlbXBsYXRlIGluc3RhbnRpYXRpb25zIG9mCglmb3J3YXJkLWRlY2xhcmF0aW9ucy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSBjb2RlIHByb2Nlc3NpbmcKCURFQ0xfVEVNUExBVEVfSU5KRUNULgoJCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFR3ZWFrIGxvb2t1cCB0byBmaW5kIG1lbWJlcgoJdGVtcGxhdGVzLgoKCSogcHQuYyAodHN1YnN0X2V4cHIsIGNhc2UgQVNNX1NUTVQpOiBEb24ndCB0c3Vic3QgaW50bwoJQVNNX0NWX1FVQUwuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfYXNtX3N0bXQpOiBNYWtlIHN0cmluZ3MgcGVybWFuZW50IGlmIHRoZXkncmUKCXVzZWQgaW4gYSB0ZW1wbGF0ZS4KCQoxOTk5LTA1LTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY2FzdHNfYXdheV9jb25zdG5lc3MsIGNhc3RzX2F3YXlfY29uc3RuZXNzX3IpOiBTdHJpcCBib3RoCglwYXJ0cyBvZiBwb2ludGVyIHRvIGRhdGEgbWVtYmVyIHR5cGVzLgoKMTk5OS0wNS0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBEb24ndCBtYWtlIGEgY29weSBvZiBhIGZ1bmN0aW9uLAoJYW5kIHRoZW4gbWFrZSBpdCBsb29rIGxpa2UgYGFib3J0Jy4gIEp1c3QgdXNlIGBhYm9ydCcgaW5zdGVhZC4KCQoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBEb24ndCBhbGxvdyBzdGF0aWNfY2FzdHMgdGhhdCBjYXN0Cglhd2F5IGNvbnN0bmVzcy4KCShjYXN0c19hd2F5X2NvbnN0bmVzc19yKTogTmV3IGZ1bmN0aW9uLgoJKGNhc3RzX2F3YXlfY29uc3RuZXNzKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGxvb2t1cF90YWcpOiBSZW1vdmUgY29kZSBubyBsb25nZXIgbmVlZGVkIGFmdGVyCgluYW1lLWxvb2t1cCBpbXByb3ZlbWVudHMuCgkqIGRlY2wyLmMgKGhhbmRsZV9jbGFzc19oZWFkKTogTWFrZSBlcnJvci1yZWNvdmVyeSBtb3JlIHJvYnVzdC4KCSogZnJpZW5kLmMgKG1ha2VfZnJpZW5kX2NsYXNzKTogUmVqZWN0IHRlbXBsYXRlZCB0eXBlbmFtZSB0eXBlcy4KCSogbGV4LmMgKGlzX2dsb2JhbCk6IEEgdGVtcGxhdGUgcGFyYW1ldGVyIGlzbid0IGdsb2JhbC4KCSogcGFyc2UueSAoY2xhc3NfaGVhZCk6IFJvYnVzdGlmeS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkKMTk5OS0wNS0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBXYWxrIGludG8gVFlQRU5BTUVfVFlQRXMsCglJTkRJUkVDVF9SRUZzLCBhbmQgQ09NUE9ORU5UX1JFRnMuICBIYW5kbGUgRklFTERfREVDTHMuCgkKCSogY3AtdHJlZS5oIChwdXNoX25lc3RlZF9uYW1lc3BhY2UpOiBEZWNsYXJlLgoJKHBvcF9uZXN0ZWRfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocHVzaF9uZXN0ZWRfbmFtZXNwYWNlKTogTmV3IGZ1bmN0aW9uLgoJKHBvcF9uZXN0ZWRfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIHRoZW0uCgoJKiB0cmVlLmMgKG1hcGNhcik6IEhhbmRsZSBOT05fTFZBTFVFX0VYUFIuCgoJKiBjcC10cmVlLmggKGNwbHVzX2V4cGFuZF9jb25zdGFudCk6IERlY2xhcmUuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3BvaW50ZXIpOiBFeHBhbmQgUFRSTUVNX0NTVHMgd2hlbiB0aGV5J3JlCgljb252ZXJ0ZWQgZnJvbSBvbmUgcG9pbnRlci10by1vYmplY3QgdHlwZSB0byBhbm90aGVyLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9jb25zdGFudCk6IERvbid0IG1ha2UgaXQgc3RhdGljLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERvbid0IGNyYXNoIHdoZW4gcHJlc2VudGVkIHdpdGgKCWEgY29tcG9uZW50IHdoaWNoIGlzIGEgVEVNUExBVEVfREVDTC4KCShidWlsZF9wdHJtZW1mdW5jKTogVGlkeS4gIENsYXJpZnkgY29tbWVudC4gIE1ha2Ugc3VyZSB0aGF0IGV2ZW4gYQoJY2FzdCBmcm9tIGEgcG9pbnRlci10by1tZW1iZXIgY29uc3RhbnQgdG8gaXRzIG93biB0eXBlIGRvZXMgbm90CglyZXN1bHQgaW4gYSB2YWxpZCBub24tdHlwZSB0ZW1wbGF0ZSBhcmd1bWVudC4KCjE5OTktMDUtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgkgICAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCQoJKiBNYWtlLWxhbmcuaW4gKGNjMXBsdXMpOiBNYWtlIGl0IGRlcGVuZCBvbiBneHguZ3BlcmYuCgkqIGNwLXRyZWUuaDogRml4IHR5cG8gaW4gZG9jdW1lbnRhdGlvbiBvbiBwb2ludGVycy10by1tZW1iZXJzLgoJKGNwX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTWFrZSBpdCBhIG1hY3JvLgoJKGNwX2J1aWxkX3F1YWxpZmllZF90eXBlX3JlYWwpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUmVtb3ZlIG1pc2xlYWRpbmcgY29tbWVudC4gIEF2b2lkCglwcm9ibGVtIHdpdGggdGVtcGxhdGUgcGFyYW1ldGVycyBhbmQgcmVzdHJpY3QtcXVhbGlmaWNhdGlvbi4KCSogZ3h4LmdwZXJmOiBSZXBsYWNlIE5PUklEIHdpdGggUklEX1VOVVNFRCB0aHJvdWdob3V0LgoJKiBoYXNoLmg6IFJlZ2VuZXJhdGVkLgoJKiBsZXguaCAocmlkKTogTW92ZSBSSURfRklSU1RfTU9ESUZJRVIgYW5kIFJJRF9MQVNUX01PRElGSUVSIGludG8KCXRoZSBlbnVtZXJhdGlvbi4KCShOT1JJRCk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKiBwdC5jICh0c3Vic3RfYWdncl90eXBlKTogVXNlIGNwX2J1aWxkX3F1YWxpZmllZF90eXBlX3JlYWwuCgkodHN1YnN0KTogTGlrZXdpc2UuICBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBmb3IgRlVOQ1RJT05fVFlQRXMuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IENoZWNrIHRoYXQgdGhlIGZ1bmN0aW9uIHR5cGUgcmVzdWx0aW5nIGZyb20KCXRoZSBkZWR1Y3Rpb24gaXMgbGVnYWwuCgkoY2hlY2tfY3ZfcXVhbHNfZm9yX3VuaWZ5KTogRG9uJ3QgaGFuZGxlIEZVTkNUSU9OX1RZUEVzIHNwZWNpYWxseS4KCSh1bmlmeSk6IFVzZSBjcF9idWlsZF9xdWFsaWZpZWRfdHlwZV9yZWFsLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGVfMSk6IEhhbmRsZSBlcnJvcl9tYXJrcyBhcyBpbnB1dHMuCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBSZW5hbWUgdG8gLi4uCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGVfcmVhbCk6IEFkZCBhZGRpdGlvbmFsIENPTVBMQUlOIHBhcmFtZXRlcgoJYW5kIG1vZGlmeSBhcHByb3ByaWF0ZWx5LgoJCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jKTogSGFuZGxlIFBUUk1FTV9DU1RzIGNhcmVmdWxseSB0bwoJcmV2ZWFsIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLgoKCSogcHQuYyAodHN1YnN0KTogRG9uJ3QgaXNzdWUgZXJyb3IgbWVzc2FnZXMgd2hlbiB3ZSdyZSBub3QKCWNvbXBsYWluaW5nLCBldmVuIGlmIHdlIHNlZSBhIHF1YWxpZmllZCBmdW5jdGlvbiB0eXBlLgoJKGNoZWNrX2N2X3F1YWxzX2Zvcl91bmlmeSk6IERvbid0IGFsbG93IGEgcXVhbGlmaWVkIGZ1bmN0aW9uCgl0eXBlLgoKMTk5OS0wNS0yMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvd25ncmFkZSBlcnJvcnMgZm9yIG9iamVjdC1kZXBlbmRlbnQKCW1lbWZuIHJlZnMgdG8gcGVkd2Fybi4KCjE5OTktMDUtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgdHJlYXQgW10gYXMgaW5kaWNhdGluZyBhCgl6ZXJvLXNpemVkIGFycmF5IGluIGEgdHlwZWRlZi4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBEb24ndCBsb29rIGF0IERFQ0xfTkFNRSBmb3IgYSB0eXBlLgoJKHB0LmMpOiBPciBDUF9UWVBFX1FVQUxTIGZvciBhbiBFUlJPUl9NQVJLLgoJKHR5cGVjay5jKTogT3IgVFlQRV9NQUlOX1ZBUklBTlQgZm9yIGEgdHlwZS4KCiAJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogUmV3b3JrIHRvIG1hdGNoIGRvY3VtZW50YXRpb24uCglEb24ndCBiZSBmb29sZWQgYnkgYSBDT01QT05FTlRfUkVGIHdpdGggbm8gVFJFRV9UWVBFLgoKMTk5OS0wNS0yMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU3RpbGwgY2hlY2sgZm9yIEFOT05fQUdHUl9UWVBFX1AuCgoJKiBjbGFzcy5jIChmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBBbGxvdyBub24tQ09NIGJhc2VzIGZvciBDT00gY2xhc3NlcwoJZXhjZXB0IGF0IHRoZSBsZWZ0bW9zdCBwb3NpdGlvbi4KCShtb2RpZnlfb25lX3Z0YWJsZSwgZml4dXBfdnRhYmxlX2RlbHRhczEsIG92ZXJyaWRlX29uZV92dGFibGUpOgoJUGFzcyB0aGUgYmluZm8ncyBjbGFzcywgbm90IHRoZSBtb3N0IGRlcml2ZWQsIHRvIHNraXBfcnR0aV9zdHVmZi4KCSogc2VhcmNoLmMgKGdldF9hYnN0cmFjdF92aXJ0dWFscywgZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBMaWtld2lzZS4KCgkqIHRyZWUuYyAobHZhbHVlX3BfMSk6IEEgTk9QX0VYUFIgY2FuIGJlIGFuIGx2YWx1ZS4KCShidWlsZF9jcGx1c19uZXcpOiBNYWtlIHN1cmUgdGhhdCB3aGF0IHdlIHJldHVybiBpcyBvZiB0aGUgcmlnaHQgdHlwZS4KCjE5OTktMDUtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKG1ha2VfcHRybWVtX2NzdCk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5jIChjcGx1c19leHBhbmRfY29uc3RhbnQpOiBTcGxpdCBvdXQgZnJvbSAuLi4KCShjcGx1c19leHBhbmRfZXhwcik6IEhlcmUuICBVc2UgY3BsdXNfZXhwYW5kX2NvbnN0YW50LgoJKGluaXRfY3BsdXNfZXhwYW5kKTogU2V0IGxhbmdfZXhwYW5kX2NvbnN0YW50LgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBVc2UgbWFrZV9wdHJtZW1fY3N0LgoKCSogdHJlZS5jIChtYWtlX3B0cm1lbV9jc3QpOiBEZWZpbmUuCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IFVzZSBtYWtlX3B0cm1lbV9jc3QuCgkqIHR5cGVjazIuYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IFVzZSBtYWtlX3B0cm1lbV9jc3QuCgoxOTk5LTA1LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAoYnVpbGRfdGVtcGxhdGVfZGVjbCk6IENvcHkgREVDTF9OT05DT05WRVJUSU5HX1AuCgoJKiBkZWNsMi5jIChzdGFydF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IEZpeCBjb21tZW50LgoJKGZpbmlzaF9maWxlKTogQ3JlYXRlIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGZ1bmN0aW9ucyBsYXppbHkuCgoxOTk5LTA1LTE5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJSW1wbGVtZW50IGFub255bW91cyBzdHJ1Y3RzLgoJKiBjcC10cmVlLmggKEFOT05fQUdHUl9UWVBFX1ApOiBSZW5hbWUgZnJvbSBBTk9OX1VOSU9OX1RZUEVfUC4KCSogY2xhc3MuYywgZGVjbC5jLCBkZWNsMi5jLCBpbml0LmMsIHB0LmMsIHNlYXJjaC5jLCB0eXBlY2suYzogQWRqdXN0LgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBSZW1vdmUgcmVkdW5kYW50IGNoZWNrIGZvciBhbm9uIHN0cnVjdC4KCSogZGVjbC5jIChmaXh1cF9hbm9ueW1vdXNfYWdncik6IFJlbmFtZWQgZnJvbSBmaXh1cF9hbm9ueW1vdXNfdW5pb24uCgkoY2hlY2tfdGFnX2RlY2wpOiBDaGVjayBmb3IgYW5vbnltb3VzIHN0cnVjdCBoZXJlLgoJKiBkZWNsMi5jIChidWlsZF9hbm9uX3VuaW9uX3ZhcnMpOiBDYXRjaCBhbm9uIHN0cnVjdCBhdCBmaWxlIHNjb3BlLgoJKiBpbml0LmMgKHNvcnRfbWVtYmVyX2luaXQsIGVtaXRfYmFzZV9pbml0KTogSGFuZGxlIGdldHRpbmcgZmllbGRzCglhcyB3ZWxsIGFzIG5hbWVzIGluIGN1cnJlbnRfbWVtYmVyX2luaXRfbGlzdC4KCShwZXJmb3JtX21lbWJlcl9pbml0KTogSGFuZGxlIGdldHRpbmcgYW4gYW5vbiBhZ2dyLgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfYXNzaWduX3JlZik6IERvbid0IGRlc2NlbmQgaW50byBhbm9uIGFnZ3JzLgoJKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBMaWtld2lzZS4KCjE5OTktMDUtMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmMgKGNwX2J1aWxkX3F1YWxpZmllZF90eXBlKTogRG9uJ3QgYWxsb3cgcXVhbGlmaWVkIGZ1bmN0aW9uCgl0eXBlcy4KCldlZCBNYXkgMTkgMDI6NTA6NTMgMTk5OSAgQXJ2aW5kIFNhbmthciA8YXJ2aW5kc0BtaXQuZWR1PgoKCSogZ3h4aW50LnRleGk6IEZpeCB0eXBvLgoKMTk5OS0wNS0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChmaW5kX3Njb3BlZF90eXBlLCByZXNvbHZlX3Njb3BlX3RvX25hbWUpOiBMb3NlLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgQ0xBU1NfVFlQRV9QLgoJKiBwdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByLCBjX2V4cGFuZF9hc21fb3BlcmFuZHMpOiBVc2UKCUlTX0FHR1JfVFlQRV9DT0RFLgoJKiB0eXBlY2syLmMgKGRpZ2VzdF9pbml0KTogTGlrZXdpc2UuCgoxOTk5LTA1LTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGpvdXN0KTogQ29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIGNvbnYgb3BzLCBub3QgdGhlCgl0YXJnZXQgdHlwZXMgb2YgdGhlIGNvbnZlcnNpb25zLgoKVHVlIE1heSAxOCAwMDoyMTozNCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogbGFuZy1zcGVjcy5oOiBEZWZpbmUgX19HTlVDX18gYW5kIF9fR05VQ19NSU5PUl9fIG9ubHkgaWYgLW5vLWdjYwoJd2FzIG5vdCBnaXZlbi4KCjE5OTktMDUtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfSURfRVhQUik6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBEb24ndCBhbGxvdyBpbmxpbmUgZGVjbGFyYXRpb25zIG9mIGZyaWVuZAoJdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLCBvciBmcmllbmQgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHdpdGgKCWRlZmF1bHQgYXJndW1lbnRzLgoJKiBwdC5jICh0c3Vic3QpOiBIYW5kbGUgc3Vic3RpdHV0aW9uIGludG8gYXJyYXkgdHlwZXMgdGhhdCBkb2VzCglub3QgeWllbGQgYSBmaXhlZCB1cHBlciBib3VuZCwgZXZlbiB3aGVuIG5vdCBwcm9jZXNzaW5nIGEKCXRlbXBsYXRlLgoJKHRzdWJzdF9jb3B5KTogRGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlIHNlY29uZCBvcGVyYW5kIHRvIGEKCVRFTVBMQVRFX0lEX0VYUFIgbWF5IGJlIE5VTExfVFJFRSwgYSBUUkVFX0xJU1QsIG9yIGEgVFJFRV9WRUMuCgkqIHNlYXJjaC5jIChtYXJrZWRfcHVzaGRlY2xzX3ApOiBEb24ndCBkZXNjZW5kIGludG8KCVRFTVBMQVRFX1RZUEVfUEFSTXMgYW5kIHRoZSBsaWtlLgoJKHVubWFya2VkX3B1c2hkZWNsc19wKTogTGlrZXdpc2UuCgkKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBEb24ndCB0aHJvdyBhd2F5Cglpbml0aWFsaXphdGlvbnMvY29waWVzIG9mIGVtcHR5IGNsYXNzZXM7IHVzZSBNT0RJRllfRVhQUiBhbmQKCUlOSVRfRVhQUiBhcyBmb3Igbm9uLWVtcHR5IGNsYXNzZXMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFB1dCB0aGUgcGFkZGluZyBieXRlIGZvciBhbiBlbXB0eQoJY2xhc3Mgb24gdGhlIFRZUEVfTk9OQ09QSUVEX1BBUlRTIGxpc3QgZm9yIHRoZSBjbGFzcy4KCjE5OTktMDUtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBDT01QT05FTlRfUkVGcyB0aGF0CglpbmRpY2F0ZSBhIHJlZmVyZW5jZSB0byBhIGZpZWxkIHRoYXQgaXMgYSBxdWFsaWZpZWQgbmFtZS4KCjE5OTktMDUtMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9vYmplY3RzKTogRG9uJ3QgdXNlIC4/dG9ycy4qIGlmIHdlIGRvbid0IGhhdmUKCUFTTV9PVVRQVVRfQ09OU1RSVUNUT1IuCgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogQWRkIGF0dHJsaXN0IGFyZy4gIFJlbW92ZSBzdXBwb3J0IGZvcgoJZ2V0dGluZyBhIG5vbi1kZWNsIGFzICdkZWNsJy4KCSogZGVjbC5jIChncm9rZm5kZWNsKTogUmVtb3ZlIGF0dHJsaXN0IGFyZy4gIERvbid0IHNldCBhdHRycyBvcgoJcnRsLgoJKGdyb2tkZWNsYXJhdG9yKTogQWRqdXN0LgoJKiBjcC10cmVlLmg6IEFkanVzdC4KCjE5OTktMDUtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKHBlcm1hbmVudF9wKTogTmV3IGZ1bmN0aW9uLgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogVXNlIG1hcGNhciwgbm90IGNvcHlfbm9kZSwgdG8gY29weSBhCglwb3NzaWJseSBjb21wbGV4IHRyZWUgbm9kZS4KCSogdHJlZS5jIChtYXBjYXIpOiBBZGp1c3QgY29tbWVudHMsIGFuZCBmb2xsb3cgY29kaW5nIHN0YW5kYXJkcyBpbgoJY29uZGl0aW9uYWwuCgkocGVybWFuZW50X3ApOiBOZXcgZnVuY3Rpb24uCgoxOTk5LTA1LTEzICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHB1c2hfbGFuZ19jb250ZXh0KTogIFR1cm4gb2ZmIERFQ0xfSUdOT1JFRF9QIGZvcgoJcHJpbWl0aXZlIEphdmEgdHlwZXMsIGlmIHdlIGFjdHVhbGx5IHNlZSBgZXh0ZXJuICJKYXZhIicuCgoxOTk5LTA1LTEwIDE4OjIxIC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogbGFuZy1zcGVjcy5oOiBQYXNzIC0kIHRvIHRoZSBwcmVwcm9jZXNzb3IuCgoxOTk5LTA1LTEwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBXcmFwIGJhc2VsaW5rcyBpbiBPRkZTRVRfUkVGLCB0b28uCglEb24ndCBib3RoZXIgd3JhcHBpbmcgYW4gT0ZGU0VUX1RZUEUgYXJvdW5kIHVua25vd25fdHlwZV9ub2RlLgoJKHJlc29sdmVfb2Zmc2V0X3JlZik6IERvbid0IGhhbmRsZSBhIHJhdyBiYXNlbGluay4KCSogY3Z0LmMgKGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uLCBidWlsZF9jX2Nhc3QsIGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQsCgljb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogSGFuZGxlIHNlZWluZyBhIGJhc2VsaW5rIHVuZGVyIGFuCglPRkZTRVRfUkVGLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBMaWtld2lzZS4JCgkqIHB0LmMgKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBMaWtld2lzZS4KCShyZXNvbHZlX292ZXJsb2FkZWRfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuLCByZWFsbHlfb3ZlcmxvYWRlZF9mbik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoZXhwcl9zaXplb2YpOiBBbHNvIGNvbXBsYWluIGFib3V0IG90aGVyIHBlcm11dGF0aW9ucwoJb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCgoxOTk5LTA1LTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IERvbid0IHJldHVybiBhIHJhdyBtZXRob2QuCglVc2UgQkFTRUxJTktfUC4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBEb24ndCBoYW5kbGUgYSByYXcgbWV0aG9kLgoJUmVzb2x2ZSBhbGwgT0ZGU0VUX1JFRnMuCgkoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiAwIGlzIGEgdmFsaWQgdnRhYmxlIGluZGV4LgoJKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBIYW5kbGUgcmVzb2x2aW5nIG92ZXJsb2FkZWQgZm5zLiAgVXNlCglzYW1lX3R5cGVfcCBmb3IgcG1mIGJpdHMuICBEb24ndCB1c2UgYnVpbGRfYmluYXJ5X29wIHRvIGNvbXBhcmUKCXJhdyBwb2ludGVycyB0byBtZXRob2RzLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBDaGVjayBmb3IgT0ZGU0VUX1JFRiwgbm90IE9GRlNFVF9UWVBFLAoJdG8gZGVjaWRlIHdoZW4gdG8gY2FsbCByZXNvbHZlX29mZnNldF9yZWYuCgkoYnVpbGRfY19jYXN0LCBjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCjE5OTktMDUtMDYgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBvZiBjbGFzcy4KCjE5OTktMDUtMDUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBkZWNsMi5jIChzdGFydF9vYmplY3RzKTogRG9uJ3QgbGV0IHN0YXRpYyBjb25zdHJ1Y3RvcnMgYW5kCglkZXN0cnVjdG9ycyBnZXQgaW5saW5lZC4KCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IE1ha2Ugc3VyZSBvcmRpbmFyeSB0eXBlcyBhcmUKCWNvbXBsZXRlLCBqdXN0IGxpa2UgdGVtcGxhdGUgdHlwZXMuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2VzLgoKMTk5OS0wNS0wNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHR5cGVjay5jIChzdHJpbmdfY29udl9wKTogVXNlIHNhbWVfdHlwZV9wIHRvIGNoZWNrIHdoZXRoZXIgd2UKCXRyeSB0byBjb252ZXJ0IGJldHdlZW4gY2hhciBhbmQgd2NoYXJfdC4KCjE5OTktMDUtMDMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkX3IpOiBTZXQgdGhlIFRSRUVfVFlQRSBvZiBhbiBhbWJpZ3VvdXMKCWxvb2t1cCB0byBlcnJvcl9tYXJrX25vZGUgaGVyZS4KCShsb29rdXBfbWVtYmVyKTogUmV2aXNlIGRvY3VtZW50YXRpb24uICBBZGQgY29tbWVudHMuICBEb24ndCBzZXQKCXRoZSBUUkVFX1RZUEUgdG8gZXJyb3JfbWFya19ub2RlIGhlcmUsIGFuZCBkb24ndCBidWlsZCB1cCBhbiBleHRyYQoJVFJFRV9MSVNUIGZvciBhbWJpZ3VvdXMgbG9va3Vwcy4KCShzZXR1cF9jbGFzc19iaW5kaW5ncyk6IEFkanVzdCBhY2NvcmRpbmdseS4KCShwdXNoX2NsYXNzX2RlY2xzKTogUmV2aXNlIG91dC1vZi1kYXRlIGNvbW1lbnRzLgoJCgkqIHR5cGVjay5jIChidWlsZF9jb25zdF9jYXN0KTogVGlnaHRlbiBjaGVja3MgZm9yIGxlZ2FsaXR5LgoKMTk5OS0wNS0wMiAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBMb29rdXAgbmFtZXMgY29taW5nIGZyb20KCW5hbWVzcGFjZS1zY29wZWQgTE9PS1VQX0VYUFIuCgoxOTk5LTA1LTAzICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJKiBneHhpbnQudGV4aTogQWRkIGRvY3VtZW50YXRpb24gZm9yICdJJy4KCjE5OTktMDUtMDIgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiB0aW5mby5jYyAob3BlcmF0b3I9PSk6IFF1YWxpZnkgdHlwZV9pbmZvIHdpdGggc3RkOjouCgoxOTk5LTA1LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChsYW5nX2RlY2xfZmxhZ3MpOiBSZW1vdmUgY29tZGF0LiAgVXBkYXRlZCBkdW1teS4KCShERUNMX0NPTURBVCk6IFJlbW92ZSBkZWZpbml0aW9uLgoKMTk5OS0wNS0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAod3JhcHVwX2dsb2JhbHNfZm9yX25hbWVzcGFjZSk6IEZpeCB0aGlua28gaW4gcHJldmlvdXMKCWNoYW5nZS4KCjE5OTktMDQtMzAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92dGFibGUpOiBVc2UgYnVpbGRfbGFuZ19kZWNsIHdoZW4gYnVpbGRpbmcKCXZ0YWJsZXMsIG5vdCBqdXN0IGJ1aWxkX2RlY2wuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCSogZGVjbC5jICh3cmFwdXBfZ2xvYmFsc19mb3JfbmFtZXNwYWNlKTogTWFyayB2dGFibGVzIGFzCglERUNMX0VYVEVSTkFMIHdoZW4gY2FsbGluZyB3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucy4KCSogZGVjbDIuYyAocHJpb3JpdHlfaW5mb19zKTogQWRkIGluaXRpYWxpemF0aW9uc19wIGFuZAoJZGVzdHJ1Y3Rpb25zX3AgbWVtYmVycy4KCShmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBVc2UgVFJFRV9TWU1CT0xfUkVGRVJFTkNFRCwgbm90IFRSRUVfVVNFRCwKCXdoZW4gZGVjaWRpbmcgd2hhdCB2dGFibGVzIHRvIHdyaXRlIG91dC4KCShzc2RmX2RlY2xzKTogTmV3IHZhcmlhYmxlLgoJKHNzZGZfZGVjbHNfdXNlZCk6IExpa2V3aXNlLgoJKHN0YXJ0X3N0YXRpY19zdG9yYWdlX2R1cmF0aW9uX2Z1bmN0aW9uKTogRGVhbCB3aXRoIGJlaW5nIGNhbGxlZAoJbXVsdGlwbGUgdGltZXMuICBBdm9pZCBpbmxpbmluZyB0aGlzIGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2luaXRzX2Zvcl9wcmlvcml0eSk6IERlYWwgd2l0aCByZXVzZSBvZiBwcmlvcml0eSBtYXAuCgkoZ2V0X3ByaW9yaXR5X2luZm8pOiBDbGVhciBpbml0aWFsaXphdGlvbnNfcCBhbmQgZGVzdHJ1Y3Rpb25zX3AuCgkoZG9fc3RhdGljX2luaXRpYWxpemF0aW9uKTogVHdlYWsgY29tbWVudC4KCShkb19zdGF0aWNfZGVzdHJ1Y3Rpb24pOiBMaWtld2lzZS4gIEZpeCBjb25kaXRpb24gb24gc2VudHJpZXMgZm9yCglkZXN0cnVjdGlvbi4KCShnZW5lcmF0ZV9jdG9yX29yX2R0b3JfZnVuY3Rpb24pOiBDYWxsIGFsbCBvZiB0aGUgc3RhdGljIHN0b3JhZ2UKCWR1cmF0aW9uIGZ1bmN0aW9ucy4KCShnZW5lcmF0ZV9jdG9yX29yX2R0b3JfZnVuY3Rpb25fZm9yX3ByaW9yaXR5KTogQ2hlY2sKCWluaXRpYWxpemF0aW9uc19wIGFuZCBkZXN0cnVjdGlvbnNfcCB0byBzZWUgd2hhdCBwcmlvcml0aWVzIG5lZWQKCWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KCShmaW5pc2hfZmlsZSk6IFJld29yayB0byBnZW5lcmF0ZSBtdWx0aXBsZSBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbgoJZnVuY3Rpb25zLCByYXRoZXIgdGhhbiBqdXN0IG9uZS4KCgkqIHR5cGVjay5jIChidWlsZF9jb25zdF9jYXN0KTogVHdlYWsgbGFzdCBjaGFuZ2UgdG8gaGFuZGxlCgl0ZW1wbGF0ZXMgY29ycmVjdGx5LgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbnN0X2Nhc3QpOiBEaXNhbGxvdyB1c2Ugb2YgY29uc3RfY2FzdCB0bwoJYW55dGhpbmcgYnV0IGEgcG9pbnRlciBvciByZWZlcmVuY2UgdHlwZS4KCjE5OTktMDQtMzAgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogRG9uJ3QgcGVybWl0IGFycmF5cyBvZiBhYnN0cmFjdCBvcgoJc2lnbmF0dXJlIHR5cGUuCgoxOTk5LTA0LTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbDIuYyAoZG9fc3RhdGljX2Rlc3RydWN0aW9uKTogUmVtb3ZlIG9ic29sZXRlIEZJWE1FIGNvbW1lbnQuCgkoZmluaXNoX2ZpbGUpOiBJbmRlbnQgY29tbWVudHMgcHJvcGVybHkuCgoxOTk5LTA0LTI5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZG9fc3RhdGljX2luaXRpYWxpemF0aW9uKTogQ2FsbCBkb19wZW5kaW5nX3N0YWNrX2FkanVzdC4KCShkb19zdGF0aWNfZGVzdHJ1Y3Rpb24pOiBMaWtld2lzZS4KCjE5OTktMDQtMjkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjcC10cmVlLmggKFRZUEVfTk9USFJPV19QKTogTmV3IG1hY3JvLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogV2FybiBvbiBkZWxldGluZyB2b2lkICouCgkqIGluaXQuYyAoYnVpbGRfbmV3XzEpOiBVc2UgVFlQRV9OT1RIUk9XX1AuCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBjcF9wZWR3YXJuIG9uIHJldHVybmluZyBOVUxMIGZyb20KCXRocm93aW5nIG9wZXJhdG9yIG5ldy4KCjE5OTktMDQtMjggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjcC10cmVlLmggKGJ1aWxkX2NvbXBvbmVudF9hZGRyKTogUmVtb3ZlIHByb3RvdHlwZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9hZGRyKTogTWFrZSBzdGF0aWMuIFJlbW92ZSBNU0cKCWFyZ3VtZW50LgoJKGJ1aWxkX2NvbXBvbmVudF9hZGRyKTogUmVtb3ZlIE1TRyBwYXJhbWV0ZXIsIGNsZWFuIHVwCgljb21tZW50LgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFVzZSBjcF9lcnJvci4KCShidWlsZF91bmFyeV9vcCk6IEFkanVzdCBjYWxsIG9mIGJ1aWxkX2NvbXBvbmVudF9hZGRyLgoKMTk5OS0wNC0yOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9mcmllbmRfY2xhc3MpOiBDaGVjayBmb3IgTlVMTC4KCldlZCBBcHIgMjggMTE6NDI6MjIgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogc2VhcmNoLmMgKGJpbmZvX2Zvcl92dGFibGUpOiBJbml0aWFsaXplIGJmdmkudmFyLgoKMTk5OS0wNC0yNyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHJ0dGkuYyAoYnVpbGRfeF90eXBlaWQpOiBDaGVjayBydHRpIGlzIGVuYWJsZWQuCgoxOTk5LTA0LTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc2VhcmNoLmMgKGlzX3N1Ym9iamVjdF9vZl9wKTogTWFrZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlCglyaWdodCBiYXNlY2xhc3Nlcy4KCjE5OTktMDQtMjYgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi5yZWFkeSk6IERvbid0IGRlcGVuZCBvbiBwaG9ueSB0YXJnZXRzLgoKMTk5OS0wNC0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogVHdlYWsgaGFuZGxpbmcgb2YgZXh0ZXJuIGlubGluZXMgc28gdGhhdAoJdGhleSBhcmUgbm90IHVubmVjZXNzYXJpbHkgcHV0IG91dC4KCgkqIHNlYXJjaC5jIChpc19zdWJvYmplY3Rfb2ZfcCk6IEhhbmRsZSBURU1QTEFURV9UWVBFX1BBUk1zIGFuZAoJc3VjaCBhcyBiYXNlIGNsYXNzZXMuCgoxOTk5LTA0LTIyICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IEZpeCB0eXBvOiB1c2UgdGhlIGNoYWluIG9mIFUsCglub3QgdHJ5aW5nIFYsIHdoaWxlIGN5Y2xpbmcgdGhyb3VnaCBVLgoKMTk5OS0wNC0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ19kZWNsX2ZsYWdzKTogUmVtb3ZlIHJldHVybnNfZmlyc3RfYXJnIGFuZAoJcHJlc2VydmVzX2ZpcnN0X2FyZy4gIEVubGFyZ2UgZHVtbXkgYWNjb3JkaW5nbHkuCgkoREVDTF9USU5GT19GTl9QKTogTmV3IG1hY3JvLgoJKFNFVF9ERUNMX1RJTkZPX0ZOX1ApOiBMaWtlaXdzZS4KCShERUNMX1JFVFVSTlNfRklSU1RfQVJHKTogUmVtb3ZlLgoJKERFQ0xfUFJFU0VSVkVTX1RISVMpOiBMaWtld2lzZS4KCShERUNMX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm8uCgkoZmluaXNoX3N0cnVjdF8xKTogQ2hhbmdlIHByb3RvdHlwZS4KCShjYXRfbmFtZXNwYWNlX2xldmVscyk6IFJlbW92ZSBwcm90b3R5cGUuCgkodnRhYmxlX2RlY2xfcCk6IE5ldyBwcm90b3R5cGUuCgkodnR5cGVfZGVjbF9wKTogTGlrZXdpc2UuCgkoc2lndGFibGVfZGVjbF9wKTogTGlrZXdpc2UuCgkod2Fsa19nbG9iYWxzX3ByZWQpOiBOZXcgdHlwZWRlZi4KCSh3YWxrX2dsb2JhbHNfZm4pOiBMaWtld2lzZS4KCSh3YWxrX2dsb2JhbHMpOiBOZXcgcHJvdG90eXBlLgoJKHdhbGtfbmFtZXNwYWNlc19mbik6IE5ldyB0eXBlZGVmLgoJKHdhbGtfbmFtZXNwYWNlcyk6IE5ldyBwcm90b3R5cGUuCgkod3JhcHVwX2dsb2JhbHNfZm9yX25hbWVzcGFjZSk6IExpa2V3aXNlLgoJKHdhbGtfdnRhYmxlcyk6IFJlbW92ZSBwcm90b3R5cGUuCgkod2Fsa19zaWd0YWJsZXMpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV9wZW5kaW5nX3RlbXBsYXRlcyk6IE5ldyBwcm90b3R5cGUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHJldHVybiBhIHZhbHVlLgoJKiBkZWNsLmggKHBlbmRpbmdfc3RhdGljcyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSogZGVjbC5jICh3YWxrX25hbWVzcGFjZXNfcik6IE5ldyBmdW5jdGlvbi4KCSh3YWxrX2dsb2JhbHNfcik6IExpa2V3aXNlLgoJKHZ0YWJsZV9kZWNsX3ApOiBMaWtld2lzZS4KCSh2dHlwZV9kZWNsX3ApOiBMaWtld2lzZS4KCShzaWd0YWJsZV9kZWNsX3ApOiBMaWtld2lzZS4KCSh3YWxrX25hbWVzcGFjZXMpOiBMaWtld2lzZS4KCSh3YWxrX2dsb2JhbHNfZGF0YSk6IE5ldyB0eXBlLgoJKHdhbGtfZ2xvYmFscyk6IE5ldyBmdW5jdGlvbi4KCSh3cmFwdXBfZ2xvYmFsc19mb3JfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkoZXhwYW5kX3N0YXRpY19pbml0KTogUmVtb3ZlIGFzc2VydGlvbi4gIFJlbW92ZSByZWR1bmRhbmN5IGluCgljb25kaXRpb25hbC4gIERvbid0IHB1dCBzdGF0aWMgZGF0YSBtZW1iZXJzIGluIHN0YXRpY19hZ2dyZWdhdGVzCglUaWR5LgoJKGZpbmlzaF9mdW5jdGlvbik6IFJlbW92ZSByZWR1bmRhbmN5IGluIGNvbmRpdGlvbmFsLiAgRG9uJ3Qgc2V0CglERUNMX1JFVFVSTlNfRklSU1RfQVJHLgoJKGNhdF9uYW1lc3BhY2VfbGV2ZWxzKTogUmVtb3ZlLgoJKiBkZWNsMi5jOiBJbmNsdWRlIHNwbGF5LXRyZWUuaCBhbmQgdmFycmF5LmguCgkocHJpb3JpdHlfaW5mb19zKTogTmV3IHN0cnVjdHVyZS4KCShmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBDaGFuZ2UgcHJvdG90eXBlLiAgQWRqdXN0IGZvciBuZXcgY2FsbGluZwoJY29udmVudGlvbnMuCgkocHJ1bmVfdnRhYmxlX3ZhcmRlY2wpOiBMaWtld2lzZS4KCShmaW5pc2hfc2lndGFibGVfdmFyZGVjbCk6IExpa2V3aXNlLgoJKHNldHVwX2luaXRwKTogUmVtb3ZlLgoJKGRvX2R0b3JzKTogUmVtb3ZlLgoJKGRvX2N0b3JzKTogUmVtb3ZlLgoJKHN0YXJ0X3N0YXRpY19zdG9yYWdlX2R1cmF0aW9uX2Z1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKGdlbmVyYXRlX2luaXRzX2Zvcl9wcmlvcml0eSk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdGF0aWNfc3RvcmFnZV9kdXJhdGlvbl9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGdldF9wcmlvcml0eV9pbmZvKTogTGlrZXdpc2UuCgkoZG9fc3RhdGljX2luaXRpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoZG9fc3RhdGljX2Rlc3RydWN0aW9uKTogTGlrZXdpc2UuCgkoZG9fc3RhdGljX2luaXRpYWxpemF0aW9uX2FuZF9kZXN0cnVjdGlvbik6IExpa2V3aXNlLgoJKGdlbmVyYXRlX2N0b3Jfb3JfZHRvcl9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGdlbmVyYXRlX2N0b3JfYW5kX2R0b3JfZnVuY3Rpb25zX2Zvcl9wcmlvcml0eSk6IExpa2V3aXNlLgoJKHBlbmRpbmdfc3RhdGljcyk6IE1ha2UgaXQgYSB2YXJyYXkuCgkocGVuZGluZ19zdGF0aWNzX3VzZWQpOiBOZXcgdmFyaWFibGUuCgkoc2F2ZWRfaW5saW5lcyk6IE1ha2UgaXQgYSB2YXJyYXkuCgkoc2F2ZWRfaW5saW5lc191c2VkKTogTmV3IHZhcmlhYmxlLgoJKGZpbmlzaF9zdGF0aWNfZGF0YV9tZW1iZXIpOiBDaGFuZ2UgbWV0aG9kIG9mIHVwZGF0aW5nCglwZW5kaW5nX3N0YXRpY3MuCgkobWFya19pbmxpbmVfZm9yX291dHB1dCk6IFJlbW92ZSAjaWYgMCdkIGNvZGUuICBDaGFuZ2UgbWV0aG9kIG9mCgl1cGRhdGluZyBzYXZlZF9pbmxpbmVzLgoJKHdhbGtfdnRhYmxlcyk6IFJlbW92ZS4KCSh3YWxrX3NpZ3RhYmxlcyk6IExpa2V3aXNlLgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IFVzZSBERUNMX1RJTkZPX0ZOX1AuCgkocGVuZGluZ190ZW1wbGF0ZXMpOiBSZW1vdmUgZGVjbGFyYXRpb24uCgkobWF5YmVfdGVtcGxhdGVzKTogTGlrZXdpc2UuCgkoc3RhdGljX2FnZ3JlZ2F0ZXNfaW5pdHApOiBMaWtld2lzZS4KCShzZXR1cF9pbml0cCk6IExpa2V3aXNlLgoJKGZpbmlzaF9vYmplY3RzKTogU2ltcGxpZnkuCgkoSU5JVElBTElaRV9QX0lERU5USUZJRVIpOiBOZXcgbWFjcm8uCgkoUFJJT1JJVFlfSURFTlRJRklFUik6IE5ldyBtYWNyby4KCShTU0RGX0lERU5USUZJRVIpOiBOZXcgbWFjcm8uCgkoaW5pdGlhbGl6ZV9wX2RlY2wpOiBOZXcgdmFyaWFibGUuCgkocHJpb3JpdHlfZGVjbCk6IExpa2V3aXNlLgoJKHNzZGZfZGVjbCk6IExpa2V3aXNlLgoJKHByaW9yaXR5X2luZm9fbWFwKTogTGlrZXdpc2UuCgkoZmluaXNoX2ZpbGUpOiBSZWNvZGUgb3V0cHV0IG9mIHN0YXRpYyBpbnRpYWxpemVycyBhbmQgb3RoZXIKCWZpbGUtc2NvcGUgZmluYWxpemF0aW9uIHRhc2tzLgoJKiBlcnJvci5jIChPQl9FTkRfVEVNUExBVEVfSUQpOiBOZXcgbWFjcm8uCgkoZHVtcF90eXBlX3JlYWwpOiBVc2UgaXQuCgkoZHVtcF9kZWNsKTogTGlrZXdpc2UuCgkoZHVtcF9mdW5jdGlvbl9uYW1lKTogTGlrZXdpc2UuCgkqIGxleC5jIChzZXRfdHlwZWRlY2xfaW50ZXJmYWNlX2luZm8pOiBBZGp1c3QgZm9yIG5ldyB3YWxrX2dsb2JhbHMKCWludGVyZmFjZS4KCShjaGVja19uZXdsaW5lKTogVXNlIHdhbGtfZ2xvYmFscywgbm90IHdhbGtfdnRhYmxlcy4KCSogcHQuYyAocGVuZGluZ190ZW1wYWx0ZV9leHBhbnNpb25zKTogUmVtb3ZlLgoJKHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvKTogTGlrZXdpc2UuCgkocGVuZGluZ190ZW1wbGF0ZXMpOiBNYWtlIHN0YXRpYy4KCShtYXliZV90ZW1wbGF0ZXMpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IEFkanVzdCBjYWxsIHRvIGZpbmlzaF9zdHJ1Y3RfMS4KCShpbnN0YW50aWF0ZV9wZW5kaW5nX3RlbXBsYXRlcyk6IE5ldyBmdW5jdGlvbi4KCSogcnR0aS5jIChnZXRfdGluZm9fZm4pOiBVc2UgU0VUX0RFQ0xfVElORk9fRk5fUC4KCSogdHJlZS5jIChzdGF0aWNfYWdncmVnYXRlc19pbml0cCk6IFJlbW92ZS4KCShjcF92YWxpZF9sYW5nX2F0dHJpYnV0ZSk6IERvbid0IHVzZSBpdDsgdXNlIERFQ0xfSU5JVF9QUklPUklUWQoJaW5zdGVhZC4KCSogTWFrZWZpbGUuaW4gKGRlY2wyLm8pOiBEZXBlbmQgb24gdmFycmF5LmggYW5kIHNwbGF5LXRyZWUuaC4KCgkqIGd4eC5ncGVyZiAoUkVUVVJOKTogUmVuYW1lIHRvIFJFVFVSTl9LRVlXT1JEIHRvIGF2b2lkIGNsYXNoZXMKCXdpdGggdGhlIFJUTCBjb2RlIFJFVFVSTi4KCSogaGFzaC5oOiBSZWdlbmVyYXRlZC4KCSogbGV4LmMgKHJlaW5pdF9wYXJzZV9mb3JfYmxvY2spOiBVc2UgUkVUVVJOX0tFWVdPUkQuCgkqIHBhcnNlLnk6IFJlcGxhY2UgUkVUVVJOIHdpdGggUkVUVVJOX0tFWVdPUkQgdGhyb3VnaG91dC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmM6IEluY2x1ZGUgdmFycmF5LmguICBJbmNsdWRlIHJ0bC5oIHNpbmNlIHZhcnJheS5oIHJlcXVpcmVzCglpdC4KCShpbmxpbmVfcGFybV9sZXZlbHMpOiBOZXcgdmFyaWFibGUuCgkoaW5saW5lX3Bhcm1fbGV2ZWxzX3VzZWQpOiBMaWtld2lzZS4KCShtYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFVwZGF0ZSB0aGVtLgoJKG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFVzZSB0aGVtLCByYXRoZXIgdGhhbgoJZ3Vlc3NpbmcgaG93IG1hbnkgbGV2ZWxzIHRvIHBvcC4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogVGlnaHRlbiBlcnJvci1jaGVja2luZy4KCjE5OTktMDQtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGJ1aWxkX2JpbmFyeV9vcCk6IFJlbW92ZSB1bm5lZWRlZCBwYXJhbWV0ZXIuCgkqIGNsYXNzLmMgKGJ1aWxkX3ZyYWJsZV9lbnRyeV9yZWYpOiBBZGp1c3QgY2FsbCB0bwoJYnVpbGRfYmluYXJ5X29wLgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBMaWtld2lzZS4KCShkb19kdG9ycyk6IExpa2V3aXNlLgoJKGRvX2N0b3JzKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9zdWZmaXgpOiBMaWtld2lzZS4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IExpa2V3aXNlLgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX25ldyk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld18xKTogTGlrZXdpc2UuCgkoYnVpbGRfdmVjX2RlbGV0ZV8xKTogTGlrZXdpc2UuCgkoZXhwYW5kX3ZlY19pbml0X2NhdGNoX2NsYXVzZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2RlbGV0ZSk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IExpa2V3aXNlLgoJKGV4cGFuZF9kaXJlY3RfdnRibHNfaW5pdCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBMaWtld2lzZS4KCShidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogTGlrZXdpc2UuCgkocG9pbnRfaW50X3N1bSk6IExpa2V3aXNlLgoJKHBvaW50ZXJfZGlmZik6IExpa2V3aXNlLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCShnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IExpa2V3aXNlLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBMaWtld2lzZS4KCShleHBhbmRfcHRybWVtZnVuY19jc3QpOiBMaWtld2lzZS4KCjE5OTktMDQtMjAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEFsd2F5cyBjYWxsIGNwbHVzX2RlY2xfYXR0cmlidXRlcy4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogUGFzcyBhdHRybGlzdCB0byBncm9rZGVjbGFyYXRvci4KCjE5OTktMDQtMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9zdGF0aWNfZGF0YV9tZW1iZXJfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbDIuYyAoZmluaXNoX3N0YXRpY19kYXRhX21lbWJlcl9kZWNsKTogU3BsaXQgb3V0IGZyb20gLi4uCgkoZ3Jva2ZpZWxkKTogSGVyZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgaXQgaGVyZSBpbnN0ZWFkIG9mCgl0cnlpbmcgdG8gZmFrZSBpdC4KCSh0c3Vic3RfZGVjbCk6IERvbid0IHNldCBERUNMX0FTU0VNQkxFUl9OQU1FOwoJZmluaXNoX3N0YXRpY19kYXRhX21lbWJlcl9kZWNsIHdpbGwgZG8gdGhhdC4gIEV4cGxpY2l0IHNldAoJREVDTF9FWFRFUk5BTCB0byBtYXRjaCBub24tdGVtcGxhdGUgcHJvY2Vzc2luZy4KCjE5OTktMDQtMTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9jbGFzc19kZWZpbml0aW9uKTogQWRkIHBhcmFtZXRlci4KCSogcGFyc2UueSAoc3RydWN0c3ApOiBVc2UgaXQuICBEb24ndCBjYWxsIHBvcF9zY29wZSBoZXJlLgoJKiBwYXJzZS5jOiBSZWdlbmVyYXRlZC4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9jbGFzc19kZWZpbml0aW9uKTogUG9wIGl0IGhlcmUuCgoxOTk5LTA0LTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZGVjbC5jICh4cmVmX3RhZyk6IFJldmlzZSBoYW5kbGluZyBvZiBuZXN0ZWQgdGVtcGxhdGUKCWRlY2xhcmF0aW9ucy4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBUd2VhayBoYW5kbGluZyBvZiBmcmllbmQKCXRlbXBsYXRlcyBpbiB0ZW1wbGF0ZSBjbGFzc2VzLgoJKHRzdWJzdF9mcmllbmRfY2xhc3MpOiBIYW5kbGUgZnJpZW5kIGRlY2xhcmF0aW9ucyBmb3IgbmVzdGVkCgltZW1iZXIgdGVtcGxhdGUgY2xhc3Nlcy4KCjE5OTktMDQtMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCShwdXNoY2xhc3MpOiBMaWtld2lzZS4KCShpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmRlZiAoVFlQRU5BTUVfVFlQRSk6IEltcHJvdmUgZG9jdW1lbnRhdGlvbi4KCSogZGVjbC5jIChidWlsZF90eXBlbmFtZV90eXBlKTogTWFrZSBzdXJlIFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUKCWRvZXNuJ3QgZ2V0IG9ibGl0ZXJhdGVkLgoJKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSB0ZW1wbGF0ZSBjbGFzc2VzIGNvcnJlY3RseS4KCgkqIGNwLXRyZWUuaCAoVFJFRV9OT05MT0NBTF9GTEFHKTogUmVtb3ZlLgoJKHN0b3JldGFncyk6IERlY2xhcmUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCB1c2UgVFJFRV9OT05MT0NBTF9GTEFHLgoJKHB1c2hjbGFzcyk6IExpa2V3aXNlLiAgVXNlIHN0b3JldGFncyB0byBpbnN0YWxsIHRhZyBkZWNsYXJhdGlvbnMsCglub3QgcHVzaHRhZy4KCShpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSk6IERvbid0IHVzZSBUUkVFX05PTkxPQ0FMX0ZMQUcuCgkqIGRlY2wuYyAoc3RvcmV0YWdzKTogTWFrZSBpdCBnbG9iYWwuCgkocHVzaF9jbGFzc19iaW5kaW5nKTogU2V0IElOSEVSSVRFRF9WQUxVRV9CSU5ESU5HX1AgZm9yIGFuCglpbXBsaWNpdCB0eXBlbmFtZSBkZWNsYXJhdGlvbi4KCShwdXNodGFnKTogVGlkeS4gIERvbid0IHVzZSBUUkVFX05PTkxPQ0FMX0ZMQUcuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9tZW1iZXIpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAod2Fybl9hYm91dF9pbXBsaWNpdF90eXBlbmFtZV9sb29rdXApOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4gIFJld29yayBoYW5kbGluZyBvZiBpbXBsaWNpdCB0eXBlbmFtZQoJZXh0ZW5zaW9uLgoKMTk5OS0wNC0xNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobG9va3VwX25lc3RlZF9maWVsZCk6IFJlbW92ZS4KCSogY2xhc3MuYyAocHVzaF9uZXN0ZWRfY2xhc3MpOiBIYW5kbGUgVU5JT05fVFlQRXMuCgkocG9wX25lc3RlZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBEb24ndCBjYWxsIGxvb2t1cF9uZXN0ZWRfZmllbGQuCgkoc3RhcnRfZGVjbCk6IFVzZSBwdXNoX25lc3RlZF9jbGFzcywgbm90IGp1c3QgcHVzaGNsYXNzLgoJKGNwX2ZpbmlzaF9kZWNsKTogVXNlIHBvcF9uZXN0ZWRfY2xhc3MsIG5vdCBqdXN0IHBvcGNsYXNzLgoJKiBzZWFyY2guYyAobG9va3VwX25lc3RlZF9maWVsZCk6IFJlbW92ZS4KCgkqIGNwLXRyZWUuaCAobGFuZ190eXBlKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGRlY2wyLmMgKGhhbmRsZV9jbGFzc19oZWFkKTogQ3JlYXRlIHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBoZXJlLAoJYXMgYXBwcm9wcmlhdGUuCgkqIHBhcnNlLnkgKGNsYXNzX2hlYWQpOiBSZXR1cm4gd2hldGhlciBvciBub3Qgd2UgZW50ZXJlZCBhIG5ldwoJc2NvcGUsIGFzIHdlbGwgYXMgdGhlIHR5cGUgbmFtZWQuCgkobmFtZWRfY2xhc3NfaGVhZCk6IExpa2V3aXNlLgoJKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogTGlrZXdpc2UuCgkoc3RydWN0c3ApOiBBZGp1c3QgYWNjb3JkaW5nbHkuICBQb3Agc2NvcGUgd2hlbiByZXF1aXJlZC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIHB0LmMgKGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogUm9idXN0aWZ5LgoJKHJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQW4gaW5zdGFudGlhdGlvbiBvZiBhbgoJYW5vbnltb3VzIHVuaW9uIGlzIGl0c2VsZiBhbiBhbm9ueW1vdXMgdW5pb24uCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogRG9uJ3QgY3JlYXRlIHRlbXBsYXRlCglkZWNsYXJhdGlvbnMgaGVyZS4KCjE5OTktMDQtMTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGFmdGVyX3R5cGVfZGVjbGFyYXRvcl9pbnRlcm4pOiBOZXcgbm9udGVybWluYWwuCgkoYWZ0ZXJfdHlwZV9kZWNsYXJhdG9yKTogVXNlIGl0LgoJKGRpcmVjdF9hZnRlcl90eXBlX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4gIE1vdmUgYWJvdmUKCW5vbm5lc3RlZF90eXBlIHRvIGZpeCByZWR1Y2UvcmVkdWNlIGNvbmZsaWN0IHJlc29sdXRpb24uCgkoZGVjbG1vZHMpOiBSZWR1Y2luZyBmcm9tIGp1c3QgJ2F0dHJpYnV0ZXMnIGhhcyBFTVBUWSBwcmVjZWRlbmNlLgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogVXBkYXRlLgoKCSogZGVjbC5jIChkZWZpbmVfbGFiZWwpOiBEb3duZ3JhZGUgZXJyb3IgZm9yIGp1bXBpbmcgb3ZlciBhCglub24tUE9EIGRlY2wgdG8gcGVkd2Fybi4KCjE5OTktMDQtMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjcC10cmVlLmggKHBvcGNsYXNzKTogQ2hhbmdlIGRlY2xhcmF0aW9uLgoJKHBvcF9uZXN0ZWRfY2xhc3MpOiBMaWtld2lzZS4KCShwb3BsZXZlbF9jbGFzcyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSogY2FsbC5jIChjb252ZXJ0X2RlZmF1bHRfYXJndW1lbnQpOiBQYXNzIG5vIGFyZ3VtZW50cyB0bwoJcG9wY2xhc3MuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBMaWtld2lzZS4KCShwb3BjbGFzcyk6IFJlbW92ZSBhcmd1bWVudC4gIFNpbXBsaWZ5IGNvZGUgYWNjb3JkaW5nbHkuCgkocG9wX25lc3RlZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHBvcGxldmVsX2NsYXNzKTogRGVjbGFyZSBpdCBoZXJlLCBhbmQgbWFrZSBpdCBzdGF0aWMuCgkocG9wbGV2ZWwpOiBIYW5kbGUgY2xhc3Mgc2NvcGVzLgoJKHBvcGxldmVsX2NsYXNzKTogRG9uJ3QgdGFrZSBhbiByZ3VtZW50LiAgU2ltcGxpZnkuCgkocG9wX2V2ZXJ5dGhpbmcpOiBQYXNzIG5vIGFyZ3VtZW50cyB0byBwb3BfbmVzdGVkX2NsYXNzLgoJKGNwX2ZpbmlzaF9kZWNsKTogUGFzcyBubyBhcmd1bWVudHMgdG8gcG9wY2xhc3MuCgkoZ3Jva2RlY2xhcmF0b3IpOiBQYXNzIG5vIGFyZ3VtZW50cyB0byBwb3BfbmVzdGVkX2NsYXNzLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4KCShwb3Bfc2NvcGUpOiBQYXNzIG5vIGFyZ3VtZW50cyB0byBwb3BjbGFzcy4KCSogbGV4LmMgKGRvX3BlbmRpbmdfZGVmYXJncyk6IFBhc3Mgbm8gYXJndW1lbnRzIHRvIHBvcF9uZXN0ZWRfY2xhc3MuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTW92ZSBjYWxsIHRvIHB1c2hjbGFzcywgYW5kCglkb2N1bWVudC4gIFBhc3Mgbm8gYXJndW1lbnRzIHRvIHBvcGNsYXNzLgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogTGlrZXdpc2UuCgoxOTk5LTA0LTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBIYW5kbGUgdGFraW5nIHRoZSBhZGRyZXNzIG9mIGEgdW5pcXVlCglib3VuZCBub24tc3RhdGljIG1lbWJlciBmdW5jdGlvbi4KCjE5OTktMDQtMTMgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogbGFuZy1vcHRpb25zLmggKC1XZGVwcmVjYXRlZCk6IE5ldyBmbGFnLgoJKiBkZWNsMi5jICh3YXJuX2RlcHJlY2F0ZWQpOiBOZXcgZmxhZy4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBEZXByZWNhdGVkIHRoaXMtaXMtdmFyaWFibGUsCglleHRlcm5hbC10ZW1wbGF0ZXMsIGFsdC1leHRlcm5hbC10ZW1wbGF0ZXMuCglTdXBwb3J0IC1XZGVwcmVjYXRlZC4KCSogZXJyZm4uYyAoY3BfZGVwcmVjYXRlZCk6IE5ldyBmdW5jdGlvbi4KCjE5OTktMDQtMTMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKHNldHVwX2luaXRwKTogQ29tcGFyZSBERUNMX0FTU0VNQkxFUl9OQU1FIGluc3RlYWQKCW9mIHRoZSBkZWNscyB0aGVtc2VsdmVzLgoKCSogcHQuYyAodHN1YnN0X2Z1bmN0aW9uX3R5cGUpOiBDb3B5IGF0dHJpYnV0ZXMgb3Zlci4KCgkqIHRyZWUuYyAoY3BfdmFsaWRfbGFuZ19hdHRyaWJ1dGUpOiBOZXcgZm4uICBIYW5kbGUgaW5pdF9wcmlvcml0eQoJYW5kIGNvbV9pbnRlcmZhY2UuCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCB2YWxpZF9sYW5nX2F0dHJpYnV0ZS4KCjE5OTktMDQtMTMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBMb29rIGF0IHRoZSBjb25zdC1uZXNzIG9mIHRoZSBmaWVsZCdzCgl0eXBlLCBub3QgdGhlIFRSRUVfUkVBRE9OTFktbmVzcyBvZiB0aGUgZGVjbGFyYXRpb24uCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IENhbGwgY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wgd2hlbgoJY3JlYXRpbmcgbmV3IGRlY2xhcmF0aW9ucy4KCjE5OTktMDQtMTMgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IEJlY2F1c2UgdnRhYmxlcyBhbHdheXMgcmVmZXJlbmNlCgl2aXJ0dWFsIGZ1bmN0aW9ucywgZXZlbiBpZiB0aGV5IGFyZSBpbmxpbmVkLCBkb24ndCBhbGxvdwoJLWZuby1pbXBsZW1lbnQtaW5saW5lcyB0byBub3QgZW1pdCB0aGVtLCBpbnN0ZWFkLCBlbWl0IHRoZW0gd2l0aAoJdGhlIHZ0YWJsZS4KCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoKMTk5OS0wNC0xMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ190eXBlKTogQWRkIGNvbV9pbnRlcmZhY2UuCgkoQ0xBU1NUWVBFX0NPTV9JTlRFUkZBQ0UpOiBOZXcgbWFjcm8uCgkqIGNsYXNzLmMgKHNldF9ydHRpX2VudHJ5KTogQ09NIGludGVyZmFjZSBjbGFzc2VzIGhhdmUgbm8gUlRUSQoJZW50cmllcyBpbiB0aGVpciB2dGFibGVzOyBhZGp1c3QuCgkoYWRkX3ZpcnR1YWxfZnVuY3Rpb24sIGZpbmlzaF9iYXNlX3N0cnVjdCwgc2tpcF9ydHRpX3N0dWZmLAoJbW9kaWZ5X29uZV92dGFibGUsIGZpeHVwX3Z0YWJsZV9kZWx0YXMxLCBvdmVycmlkZV9vbmVfdnRhYmxlLAoJZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBMaWtld2lzZS4KCSogcnR0aS5jIChidWlsZF9oZWFkb2YsIGdldF90aW5mb19mbl9keW5hbWljKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChnZXRfYWJzdHJhY3RfdmlydHVhbHNfMSwgZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzLAoJZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBMaWtld2lzZS4KCSogdHJlZS5jIChkZWJ1Z19iaW5mbyk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChDT01QQVJFX05PX0FUVFJJQlVURVMpOiBOZXcgbWFjcm8uCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBJZiB3ZSBnZXQgaXQsIGlnbm9yZSBhdHRyaWJ1dGVzLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogVXNlIEJBU0VMSU5LX1AuICBDaGFuZ2UgY29tcGxhaW4KCXBhcmFtZXRlciB0byBmbGFnczsgMiBtZWFucyBpZ25vcmUgYXR0cmlidXRlcy4KCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IFBhc3MgaXQuCgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogT25seSBjb21wbGFpbiBvbmNlIGFib3V0IHVzaW5nIGEgdHlwZWRlZi1uYW1lCgl3aXRoICdzdHJ1Y3QnLiAgRG93bmdyYWRlIHRvIHBlZHdhcm4uCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxsb3cgW10gc3ludGF4IGZvciB6ZXJvLWxlbmd0aCBhcnJheS4KCgkqIHBhcnNlLnkgKGFic2RjbF9pbnRlcm4pOiBOZXcgbm9udGVybWluYWwuCgkoYWJzZGNsLCBkaXJlY3RfYWJzdHJhY3RfZGVjbGFyYXRvcik6IFVzZSBpdC4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExvb2sgdGhyb3VnaCBpbXBsaWN0IHR5cGVuYW1lLgoKMTk5OS0wNC0xMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGZyaWVuZC5jIChhZGRfZnJpZW5kKTogRGVhbCBncmFjZWZ1bGx5IHdpdGggZXJyb3JfbWFya19ub2RlLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgcG9pbnRlcnMtdG8tbWVtYmVycyBhcwoJdGVtcGxhdGUgcGFyYW1ldGVycy4KCgkqIGRlY2wuYyAocHVzaF9iaW5kaW5nKTogRml4IHR5cG8gaW4gY29tbWVudC4KCjE5OTktMDQtMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBlcnJvci5jIChkdW1wX3R5cGVfcmVhbCk6IElmIGEgdHlwZW5hbWUgaXMgYSB0ZW1wbGF0ZS1pZCwgcHV0CglvdXQgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cy4KCShkdW1wX2V4cHIpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTm93IHRoYXQgZnVsbCBhcmd1bWVudHMgYXJlCglhdmFpbGFibGUgZXZlcnl3aGVyZSwgcmVtb3ZlIGNvZGUgdGhhdCB0cmllZCB0byBndWVzcyB0aGVtLgoKMTk5OS0wNC0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogQ29tcGxhaW4gaWYgd2UgZG9uJ3QgZmluZCBhIHR5cGUKCXdoZW4gdHJ5aW5nIHRvIG1ha2UgYSB0eXBlbmFtZSB0eXBlIGZvciBhIG5vbi10ZW1wbGF0ZSB0eXBlLgoKMTk5OS0wNC0wOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogUGFzcyBhdHRyaWJ1dGVzIHRvIGdyb2tkZWNsYXJhdG9yLgoJKGdyb2tkZWNsYXJhdG9yKTogSGFuZGxlIGF0dHJpYnV0ZXMgb24gY29uc3RydWN0b3Itc3ludGF4Cglpbml0aWFsaXplcnMuCgoxOTk5LTA0LTA4ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogRG9uJ3QgY3Jhc2ggb24gSU5ESVJFQ1RfUkVGcyB3aG9zZSBvcGVyYW5kcwoJZG9uJ3QgaGF2ZSB0eXBlcy4KCgkqIHNlYXJjaC5jICh0ZW1wbGF0ZV9zZWxmX3JlZmVyZW5jZV9wKTogVHdlYWsuCgoxOTk5LTA0LTA3ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogRG9uJ3QgYnVpbGQgeWV0IGFub3RoZXIgd2VpcmQgZGF0YQoJc3RydWN0dXJlIHRvIGRlc2NyaWJlIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoKMTk5OS0wNC0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoQkFTRUxJTktfUCk6IE5ldyBtYWNyby4KCShTRVRfQkFTRUxJTktfUCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogUmVtb3ZlIG5lZWRsZXNzIGFzc2lnbm1lbnQgaW4gaWYKCXN0YXRlbWVudC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZF9yKTogRml4IGhhbmRsaW5nIHdoZW4gd2UgYXJlIGxvb2tpbmcKCXNwZWNpZmljYWxseSBmb3IgYSB0eXBlOyB0aGVzZSBhcmUgbm90IGhpZGRlbiBieSBmdW5jdGlvbnMgYW5kCgl2YXJpYWJsZXMuCgkobG9va3VwX21lbWJlcik6IFVzZSBTRVRfQkFTRUxJTktfUC4KCSogdHJlZS5jIChpc19vdmVybG9hZGVkX2ZuKTogVXNlIEJBU0VMSU5LX1AuCgkocmVhbGx5X292ZXJsb2FlZF9mbik6IExpa2V3aXNlLgoJKGdldF9maXJzdF9mbik6IExpa2V3aXNlLgoKMTk5OS0wNC0wNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IFR3ZWFrLCBhbmQgaW1wcm92ZQoJZG9jdW1lbnRhdGlvbi4KCgkqIGNsYXNzLmMgKG1heWJlX2ZpeHVwX3ZwdHJzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKGJ1aWxkX2NsYXNzX2luaXRfbGlzdCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogQ2FsbCBjaGVja190ZW1wbGF0ZV9zaGFkb3cgaGVyZQoJLi4uCgkocHVzaF9jbGFzc19sZXZlbF9iaW5kaW5nKTogLi4uIG5vdCBoZXJlLgoJKiBzZWFyY2guYyAoZGZzX3B1c2hfdHlwZV9kZWNscyk6IE9ubHkgYXZvaWQKCXRlbXBsYXRlLXNlbGYtcmVmZXJlbmNlIFRZUEVfREVDTHMgaWYgdGhleSBhcmUgZnJvbSBiYXNlIGNsYXNzZXMuCgoxOTk5LTA0LTA0ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAoY2hlY2tfdGVtcGxhdGVfc2hhZG93KTogRG9uJ3QgdHJlYXQgT1ZFUkxPQURzIGFzIF9ERUNMCglub2Rlcy4gIFRpZHkuCgoxOTk5LTA0LTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChtYXliZV9maXh1cF92cHRycywgYnVpbGRfY2xhc3NfaW5pdF9saXN0KTogTG9zZS4KCShmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBjYWxsIGJ1aWxkX2NsYXNzX2luaXRfbGlzdC4KCjE5OTktMDQtMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0aW5mby5oIChfX2NsYXNzX3R5cGVfaW5mbyk6IEZpeCBpbGxlZ2FsIGRlY2xhcmF0aW9uLgoKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0lEX0VYUFIpOiBVcGRhdGUgY29tbWVudC4KCSogY3AtdHJlZS5oIChJTkhFUklURURfVkFMVUVfQklORElOR19QKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfQ0xBU1NfVkFMVUUpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgkoaXNfcHJvcGVybHlfZGVyaXZlZF9mcm9tKTogRGVjbGFyZS4KCShpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSk6IExpa2V3aXNlLgoJKG1heWJlX21heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzKTogTGlrZXdpc2UuCgkobm90ZV9uYW1lX2RlY2xhcmVkX2luX2NsYXNzKTogTGlrZXdpc2UuCgkocHVzaF91c2luZ19kZWNsKTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbi4KCShpZF9pbl9jdXJyZW50X2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKHB1c2hfY2xhc3NfYmluZGluZyk6IENoYW5nZSBwcm90b3R5cGUuCgkoY2xlYXJfaWRlbnRpdGlmZXJfY2xhc3NfdmFsdWVzKTogRGVjbGFyZS4KCSogY2FsbC5jIChpc19wcm9wZXJseV9kZXJpdmVkX2Zyb20pOiBNYWtlIGl0IGdsb2JhbC4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEJlIGNhcmVmdWwgYWJvdXQgdXBkYXRpbmcgY2FuZGlkYXRlcy4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBIYW5kbGUgQ09NUE9ORU5UX1JFRnMuICBEb24ndCBjcmFzaCB3aGVuCglhc2tlZCB0byBtYWtlIGlsbGVnYWwgY2FsbHMuCgkqIGNsYXNzLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKGNsYXNzX3N0YWNrX25vZGUpOiBBZGQgbmFtZXNfdXNlZCBzbG90LgoJKGNoZWNrX21lbWJlcl9kZWNsX2lzX3NhbWVfaW5fY29tcGxldGVfc2NvcGUpOiBSZW1vdmUuCgkoYWRkX21ldGhvZCk6IEZpeCBjb21tZW50LiAgUHVzaCB0aGUgZGVjbGFyYXRpb24gaW50byBjbGFzcwoJc2NvcGUuCgkoZmluaXNoX3N0cnVjdF8xKTogV2hlbiBwb3BwaW5nIHRoZSBjbGFzcywgcG9wIHRoZSBiaW5kaW5ncyB0b28uCglSZW1vdmUgY2hlY2sgZm9yIGRhdGEgbWVtYmVyL2Z1bmN0aW9uIG1lbWJlciBjb25mbGljdC4KCShmaW5pc2hfc3RydWN0KTogUmVtb3ZlIGNhbGxzIHRvCgljaGVja19tZW1iZXJfZGVjbF9pc19zYW1lX2luX2NvbXBsZXRlX3Njb3BlLiAgQ2hhbmdlIGNhbGxzIHRvCglwb3BjbGFzcy4KCShwdXNoY2xhc3MpOiBDbGVhciBuYW1lc191c2VkIGluIHRoZSBjbGFzcyBzdGFjayBlbnRyeS4KCVVzZSBpbnZhbGlkYXRlX2NsYXNzX2xvb2t1cF9jYWNoZSB0byByZW1vdmUgY2FjaGVkIGVudHJpZXMsIHJhdGhlcgoJdGhhbiBtYWdpYyB2YWx1ZXMgd2l0aCBwb3BjbGFzcy4gIENsZWFyIElERU5USUZJRVJfQ0xBU1NfVkFMVUUKCWJlZm9yZSBlbnRlcmluZyBhIG5ldyBjbGFzcy4gIFJlbW92ZSBkZWFkIGNvZGUuICBEb24ndCBtZXNzIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fZGVjbCB3aGVuIHB1c2hpbmcgZGVjbGFyYXRpb25zLgoJKGludmFsaWRhdGVfY2xhc3NfbG9va3VwX2NhY2hlKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSAuLi4KCShwb3BjbGFzcyk6IEhlcmUuICBDbGVhbiB1cCBuYW1lc191c2VkIG9uIG91ciB3YXkgb3V0LgoJKGluc3RhbnRpYXRlX3R5cGUpOiBBZGp1c3QuCgkoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBEb24ndCBwdXNoIHRoZSBkZWNsYXJhdGlvbiBoZXJlLgoJKG1heWJlX25vdGVfbmFtZV91c2VkX2luX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKG5vdGVfbmFtZV9kZWNsYXJlZF9pbl9jbGFzcyk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGFkZF9iaW5kaW5nKTogQ2hhbmdlIHByb3RvdHlwZS4KCShmaW5kX2NsYXNzX2JpbmRpbmdfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkoaW5uZXJtb3N0X25vbmNsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkoY3VycmVudF9iaW5kaW5nX2xldmVsKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoaW5uZXJfYmluZGluZ19sZXZlbCk6IFJlbW92ZS4gIFJlcGxhY2Ugd2l0aCBjdXJyZW50X2JpbmRpbmdfbGV2ZWwKCXRocm91Z2hvdXQuCgkocHVzaF9iaW5kaW5nX2xldmVsKTogUmVtb3ZlIHNwZWNpYWwgaGFuZGxpbmcgb2YKCWNsYXNzX2JpbmRpbmdfbGV2ZWwuCgkocG9wX2JpbmRpbmdfbGV2ZWwpOiBMaWtld2lzZS4gIFVzZSBmaW5kX2NsYXNzX2JpbmRpbmdfbGV2ZWwuCgkoc3VzcGVuZF9iaW5kaW5nX2xldmVsKTogTGlrZXdpc2UuCgkoZ2xvYmFsX2JpbmRpbmdzX3ApOiBVc2UgaW5uZXJtb3N0X25vbmNsYXNzX2xldmVsLgoJKHRvcGxldmVsX2JpbmRpbmdzX3ApOiBMaWtld2lzZS4KCShuYW1lc3BhY2VfYmluZGluZ3NfcCk6IExpa2V3aXNlLgoJKHBzZXVkb19nbG9iYWxfbGV2ZWxfcCk6IExpa2V3aXNlLgoJKHB1c2hfYmluZGluZyk6IENsZWFyIElOSEVSSVRFRF9WQUxVRV9CSU5ESU5HX1AuCgkoYWRkX2JpbmRpbmcpOiBDaGVjayBmb3IgaWxsZWdhbCBtdWx0aXBsZSBkZWNsYXJhdGlvbnMuICBSZXR1cm4gYQoJdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbmV3IGJpbmRpbmcgd2FzIGxlZ2FsLgoJKHB1c2hfbG9jYWxfYmluZGluZyk6IFNraXAgb3ZlciBjbGFzcyBiaW5kaW5nIGxldmVscy4gIENoZWNrCglyZXR1cm4gdmFsdWUgZnJvbSBhZGRfYmluZGluZy4KCShwdXNoX2NsYXNzX2JpbmRpbmcpOiBTZXQgSU5IRVJJVEVEX1ZBTFVFX0JJTkRJTkdfUC4gIENhbGwKCW5vdGVfbmFtZV9kZWNsYXJlZF9pbl9jbGFzcy4KCShwdXNobGV2ZWxfY2xhc3MpOiBSZW1vdmUgImZha2Ugb3V0IHRoZSByZXN0IG9mIHRoZSBjb21waWxlciIKCWNvZGUuCgkocG9wbGV2ZWxfY2xhc3MpOiBSZXNldCBJREVOVElGSUVSX0NMQVNTX1ZBTFVFcy4KCShjbGVhcl9pZGVudGlmaWVyX2NsYXNzX3ZhbHVlcyk6IE5ldyBmdW5jdGlvbi4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBVc2UgaXQuCgkocG9wX2V2ZXJ5dGhpbmcpOiBUd2Vhay4KCShtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBEb24ndCBwdXNoIHRoZQoJZGVjbGFyYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZSBoZXJlLgoJKHB1c2h0YWcpOiBEb24ndCBwdXNoIHRhZyBkZWNsYXJhdGlvbnMgaW50byBjbGFzcyBzY29wZSBoZXJlLgoJKHB1c2hkZWNsKTogQXBwbHkgRGVNb3JnYW4ncyBsYXcgZm9yIHJlYWRhYmlsaXR5LgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogUmVtb3ZlIHNwZWNpYWwtY2FzZSBjb2RlIGZvcgoJVFlQRV9CRUlOR19ERUZJTkVELiAgSGFuZGxlIE9WRVJMT0FEcyBhbmQgYW5vbnltb3VzIHVuaW9ucy4KCShwdXNoX2NsYXNzX2xldmVsX2JpbmRuZyk6IERlYWwgd2l0aCBpbmhlcml0ZWQgYmluZGluZ3MuCgkobG9va3VwX25hbWVfcmVhbCk6IFJlbW92ZSBzcGVjaWFsLWNhc2UgY29kZSBmb3IKCVRZUEVfQkVJTkdfREVGSU5FRCwgYW5kIHNvbWUgaW1wbGljaXQgdHlwZW5hbWUgbWFnaWMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgQ09NUE9ORU5UX1JFRiBmb3IgYSB0ZW1wbGF0ZSBmdW5jdGlvbi4KCShidWlsZF9lbnVtZXJhdG9yKTogRG9uJ3QgY2FsbCBwdXNoZGVjbF9jbGFzc19sZXZlbCBoZXJlLgoJKGlkX2luX2N1cnJlbnRfY2xhc3MpOiBSZW1vdmUuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IERvbid0IGNhbGwgcHVzaGRlY2xfY2xhc3NfbGV2ZWwgb3IKCWNoZWNrX3RlbXBsYXRlX3NoYWRvdy4KCSogZXJyZm4uYyAoY3BfZmlsZV9vZik6IERvbid0IGRlY2xhcmUuCgkoY3BfbGluZV9vZik6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgYW4gT1ZFUkxPQUQuCgkoY3BfZmlsZV9vZik6IExpa2V3aXNlLgoJKGNwX2xpbmVfb2YpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IEhhbmRsZSBhIENPTVBPTkVOVF9SRUYuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQ2FsbCBtYXliZV9ub3RlX25hbWVfdXNlZF9pbl9jbGFzcywgbm90CglwdXNoZGVjbF9jbGFzc19sZXZlbC4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEJ1aWxkIENPTVBPTkVOVF9SRUZzIGZvciByZWZlcmVuY2VzCgl0byBtZW1iZXIgdGVtcGxhdGVzIGFzIHdlbGwgYXMgbWVtYmVyIGZ1bmN0aW9ucy4gIFJlbW92ZSBkZWFkCgljb2RlLgoJKiBwYXJzZS55IChsZWZ0X2N1cmx5KTogUmVtb3ZlLgoJKG5vbm5lc3RlZF90eXBlKTogQ2FsbCBtYXliZV9ub3RlX25hbWVfdXNlZF9pbl9jbGFzcywgbm90CglwdXNoZGVjbF9jbGFzc19sZXZlbC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBMaWtld2lzZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBBZGp1c3QsIGZvciByb2J1c3RuZXNzLgoJKGNoZWNrX3RlbXBsYXRlX3NoYWRvdyk6IEhhbmRsZSBPVkVSTE9BRHMuCgkoYnVpbGRfdGVtcGxhdGVfZGVjbCk6IFNldCBERUNMX0NPTlNUUlVDVE9SX1Agb24gdGhlCglURU1QTEFURV9ERUNMLCBpZiBhcHByb3ByaWF0ZS4KCSogc2VhcmNoLmMgKGVudmVsb3BlX2FkZF9kZWNsKTogUmVtb3ZlLgoJKGRmc19wdXNoZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfY29tcHJlc3NfZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfcHVzaF9kZWNscyk6IE5ldyBmdW5jdGlvbi4KCShkZnNfcHVzaF90eXBlX2RlY2xzKTogTGlrZXdpc2UuCgkoc2V0dXBfY2xhc3NfYmluZGluZ3MpOiBMaWtld2lzZS4KCSh0ZW1wbGF0ZV9zZWxmX3JlZmVyZW5jZV9wKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkX3IpOiBVc2UgaXQuCgkobG9vdXBfbWVtYmVyKTogUmVtb3ZlIG9sZCBjb21tZW50LiAgRGVhbCB3aXRoIGFtYmlndWl0eS4KCShwdXNoX2NsYXNzX2RlY2xzKTogVXNlIGRmc19wdXNoX2RlY2xzIGFuZCBkZnNfcHVzaF90eXBlX2RlY2xzLAoJYW5kIHJlbW92ZSBlbnZlbG9wZSBwcm9jZXNzaW5nLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IExldCBwdXNoY2xhc3MgcHVzaAoJZGVjbGFyYXRpb25zIGZvciBiYXNlIGNsYXNzZXMuCgkoZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbik6IFB1c2ggZGVjbGFyYXRpb25zIGludG8gY2xhc3Mgc2NvcGUuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSnVzdCBwdXQgYW4gT1ZFUkxPQUQgaW50byB0aGUKCUNPTVBPTkVOVF9SRUYsIG5vdCBhIFRSRUVfTElTVCBvZiBhbiBPVkVSTE9BRC4KCShidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBEZWFsIHdpdGggT1ZFUkxPQUQuICBIYW5kbGUgdGVtcGxhdGUtaWRzLgoJKiBNYWtlZmlsZS5pbiAoY2xhc3Mubyk6IERlcGVuZCBvbiBzcGxheS10cmVlLmguCgpXZWQgTWFyIDMxIDExOjMwOjQzIDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjdnQuYyAoY29udmVydF9wb2ludGVyX3RvX3JlYWwpOiBVc2Ugc2FtZV90eXBlX3AuCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IFVzZSBzYW1lX3R5cGVfcC4KCjE5OTktMDMtMzEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChiZWdpbl9pbmxpbmVfZGVmaW5pdGlvbnMsCglmaW5pc2hfaW5saW5lX2RlZmluaXRpb25zKTogUmVuYW1lIGZyb20gZmluaXNoX2RlZmF1bHRfYXJncyBhbmQKCWJlZ2luX2lubGluZV9kZWZpbml0aW9ucywgcmVzcGVjdGl2ZWx5LCB0byBzb21ldGhpbmcgdGhhdCBpc24ndCBhCgl0b3RhbCBsaWUuICA6KQoJKiBwYXJzZS55IChzdHJ1Y3RzcCk6IEFkanVzdC4KCgkqIHRyZWUuYyAoaGFzaF90cmVlX2NvbnMpOiBSZW1vdmUgb2Jzb2xldGUgdmlhXyogcGFybXMuCgkobGlzdF9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGhhc2hfdHJlZV9jaGFpbik6IEFkanVzdC4KCSogcHQuYyAodHN1YnN0KTogQWRqdXN0LgoJKHRzdWJzdF9hcmdfdHlwZXMpOiBVc2UgcGxhaW4gaGFzaF90cmVlX2NvbnMuCgkqIGNwLXRyZWUuaCAoaGFzaF90cmVlX2NvbnNfc2ltcGxlKTogTG9zZS4KCSogcGFyc2UueSAoZGVjbG1vZHMsIG5vbmVtcHR5X2N2X3F1YWxpZmllcnMpOiBVc2UgaGFzaF90cmVlX2NvbnMuCgpXZWQgTWFyIDMxIDEwOjQ4OjI5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChoYXNoLmgpOiBHZW5lcmF0ZSB1c2luZyBncGVyZiBsYW5ndWFnZSAnQycsIG5vdAoJJ0tSLUMnLCBzbyBncGVyZiB1c2VzIHRoZSBgY29uc3QnIGtleXdvcmQgb24gc3RyaW5ncy4KCgkqIGd4eC5ncGVyZiAocmVzd29yZCk6IENvbnN0LWlmeSBhIGNoYXIqLgoKMTk5OS0wMy0zMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChJREVOVElGSUVSX0FTX0RFU0MsIElERU5USUZJRVJfQVNfTElTVCwKCUNMQVNTVFlQRV9CQVNFTElOS19WRUMsIENMQVNTVFlQRV9OX1NVUEVSQ0xBU1NFUywKCUNMQVNTVFlQRV9OX0JBU0VDTEFTU0VTLCBDTEFTU1RZUEVfTUFYX0RFUFRILAoJQ0xBU1NUWVBFX0JBU0VfSU5JVF9MSVNULCBDTEFTU1RZUEVfQVNfTElTVCwgQ0xBU1NUWVBFX0lEX0FTX0xJU1QsCglDTEFTU1RZUEVfQklORk9fQVNfTElTVCk6IFJlbW92ZSBjcnVmdC4KCSogY2xhc3MuYywgbGV4LmMsIHBhcnNlLnksIHB0cmVlLmMsIHNlYXJjaC5jLCBzZW1hbnRpY3MuYywKCXRyZWUuYzogQWRqdXN0LgoKMTk5OS0wMy0yOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogUmVtb3ZlIC1Xc2lnbi1wcm9tbyBmcm9tIC1XYWxsLgoKMTk5OS0wMy0yOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZm5fdHlwZV91bmlmaWNhdGlvbik6IElnbm9yZSAndGhpcycgcGFybSBmcm9tIGNvbnZlcnNpb24gb3BzLgoKMTk5OS0wMy0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAoYWRkX2ZyaWVuZCk6IERlY2xhcmUuCgkoYWRkX2ZyaWVuZHMpOiBMaWtld2lzZS4KCSogZnJpZW5kLmMgKGFkZF9mcmllbmQpOiBNYWtlIGl0IGdsb2JhbC4gIERvbid0IGFkZCB0bwoJREVDTF9CRUZSSUVORElOR19DTEFTU0VTIGlmIHRoZSBiZWZyaWVuZGluZyBjbGFzcyBpcyBhIHRlbXBsYXRlLgoJKGFkZF9mcmllbmRzKTogTWFrZSBpdCBnbG9iYWwuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBEb24ndCBhZGQgdG8gREVDTF9CRUZSSUVORElOR19DTEFTU0VTIGlmIHRoZQoJYmVmcmllbmRpbmcgY2xhc3MgaXMgYSB0ZW1wbGF0ZS4KCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2xfMSk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBhZGRfZnJpZW5kIGFuZAoJYWRkX2ZyaWVuZHMgcmF0aGVyIHRoYXQgZHVwbGljYXRpbmcgc29tZSBvZiB0aGVpciBmdW5jdGlvbmFsaXR5CgloZXJlLgoKMTk5OS0wMy0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogVW5pZnkgJ3RoaXMnIGFuZCBub24tJ3RoaXMnIGNhc2VzLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2luZGlyZWN0X3JlZik6IENoZWNrIGZvciAndGhpcycgc29vbmVyLgoKRnJpIE1hciAyNiAxMDoyMDozNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxsLmMgKG9wX2Vycm9yKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoYWRkX2NhbmRpZGF0ZSwgc291cmNlX3R5cGUsIGFkZF93YXJuaW5nKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogQ29uc3QtaWZ5IGEgY2hhciouCgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbiwKCWZpeGVkX3R5cGVfb3JfbnVsbCwgYnVpbGRfdnRhYmxlX2VudHJ5X3JlZik6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGdldF92dGFibGVfbmFtZSwgZmluaXNoX3N0cnVjdF8xKTogQ29uc3QtaWZ5IGEgY2hhciouCgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlLCByZWNvcmRfYnVpbHRpbl90eXBlLAoJcmVjb3JkX3Vua25vd25fdHlwZSwgbWVtYmVyX2Z1bmN0aW9uX29yX2Vsc2UsIGJhZF9zcGVjaWZpZXJzKToKCUxpa2V3aXNlLgoJKGZpbmRfYmluZGluZywgc2VsZWN0X2RlY2wsIHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXAsCglsb29rdXBfZmxhZ3MsIHF1YWxpZnlfbG9va3VwLCByZWNvcmRfYnVpbHRpbl9qYXZhX3R5cGUsIHRhZ19uYW1lKToKCUFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKHdhcm5fZXh0ZXJuX3JlZGVjbGFyZWRfc3RhdGljLCBkdXBsaWNhdGVfZGVjbHMsIHB1c2hkZWNsLAoJaW1wbGljaXRseV9kZWNsYXJlLCByZWNvcmRfYnVpbHRpbl9qYXZhX3R5cGUsIGRlZmluZV9mdW5jdGlvbiwKCWdyb2tfb3BfcHJvcGVydGllcywgdGFnX25hbWUpOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIGNwLXRyZWUuaCAoRk9STUFUX1ZCQVNFX05BTUUpOiBBbGxvdyBwYXJhbWV0ZXIgYEJVRicgdG8gYmUgY29uc3QuCgkoZGVmaW5lX2Z1bmN0aW9uLCBmaW5pc2hfYnVpbHRpbl90eXBlKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoY3BfZXJyb3IsIGNwX2Vycm9yX2F0LCBjcF93YXJuaW5nLCBjcF93YXJuaW5nX2F0LCBjcF9wZWR3YXJuLAoJY3BfcGVkd2Fybl9hdCwgY3BfY29tcGlsZXJfZXJyb3IsIGNwX3NwcmludGYpOiBBZGQgcHJvdG90eXBlIGFyZ3MuCgkoZmlsZV9uYW1lX25vbmRpcmVjdG9yeSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKGluaXRfZmlsZW5hbWVfdGltZXMpOiBEb24ndCBwcm90b3R5cGUuCgkoY29tcGlsZXJfZXJyb3IpOiBQcm90b3R5cGUuCgkoeXllcnJvciwgaW5pdF9yZXBvKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoYnVpbGRfc3JjbG9jKTogRG9uJ3QgcHJvdG90eXBlLgoJKGJ1aWxkX3hfaW5kaXJlY3RfcmVmLCBidWlsZF9pbmRpcmVjdF9yZWYsIGJ1aWxkX2NvbXBvbmVudF9hZGRyKToKCUNvbnN0LWlmeSBhIGNoYXIqLgoJKHdhcm5fZm9yX2Fzc2lnbm1lbnQpOiBEb24ndCBwcm90b3R5cGUuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24sIHJlYWRvbmx5X2Vycm9yLCBjaGVja19mb3JfbmV3X3R5cGUsCglHTlVfeHJlZl9iZWdpbiwgR05VX3hyZWZfZmlsZSwgR05VX3hyZWZfcmVmLCBHTlVfeHJlZl9jYWxsKToKCUNvbnN0LWlmeSBhIGNoYXIqLgoKCSogZGVjbDIuYyAoYWNjZXB0YWJsZV9qYXZhX3R5cGUsIG91dHB1dF92dGFibGVfaW5oZXJpdCwKCXNldHVwX2luaXRwLCBzdGFydF9vYmplY3RzLCBmaW5pc2hfb2JqZWN0cywgZG9fZHRvcnMsIGRvX2N0b3JzLAoJbWVyZ2VfZnVuY3Rpb25zLCBkZWNsX25hbWVzcGFjZSwgdmFsaWRhdGVfbm9ubWVtYmVyX3VzaW5nX2RlY2wsCglkb19ub25tZW1iZXJfdXNpbmdfZGVjbCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGxhbmdfZl9vcHRpb25zKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoZmluaXNoX2J1aWx0aW5fdHlwZSk6IExpa2V3aXNlLgoJKGFkZF9mdW5jdGlvbiwgYXJnX2Fzc29jX25hbWVzcGFjZSwgYXJnX2Fzc29jX2NsYXNzKTogQWRkIHN0YXRpYwoJcHJvdG90eXBlLgoKCSogZXJyZm4uYzogSW5jbHVkZSBjcC10cmVlLmguCgkoY3BfdGhpbmcpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShjb21waWxlcl9lcnJvcik6IERvbid0IHByb3RvcHR5cGUuCgkoY3BfY29tcGlsZXJfZXJyb3IpOiBDYXN0IGBjb21waWxlcl9lcnJvcicgdG8gYGVycm9yZm4nIGJlZm9yZQoJcGFzc2luZyBpdCB0byBgY3BfdGhpbmcnLgoKCSogZXJyb3IuYyAoaW50ZXJlc3Rpbmdfc2NvcGVfcCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogZXhjZXB0LmMgKGJ1aWxkX2VoX3R5cGVfdHlwZSwgYnVpbGRfZWhfdHlwZV90eXBlX3JlZik6IENvbnN0LWlmeQoJYSBjaGFyKi4KCgkqIGluaXQuYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkobWVtYmVyX2luaXRfb2tfb3JfZWxzZSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKGJ1aWxkX2phdmFfY2xhc3NfcmVmKTogQWRkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBsZXguYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkoZ2V0X3RpbWVfaWRlbnRpZmllciwgaW50ZXJmYWNlX3N0cmNtcCwgZXh0ZW5kX3Rva2VuX2J1ZmZlciwKCWhhbmRsZV9jcF9wcmFnbWEpOiBDb25zdC1pZnkgYSBjaGFyKi4KCShpc19nbG9iYWwsIGluaXRfZmlsZW5hbWVfdGltZXMpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShmaWxlX25hbWVfbm9uZGlyZWN0b3J5LCBjcGx1c190cmVlX2NvZGVfbmFtZSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKGNvbXBpbGVyX2Vycm9yKTogQ2hhbmdlIGZyb20gZml4ZWQgYXJncyB0byB2YXJpYWJsZSBhcmdzLgoJKHl5ZXJyb3IpOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHBhcnNlLnkgKGNvbmRfc3RtdF9rZXl3b3JkKTogQ29uc3QtaWZ5IGEgY2hhciouCgkocGFyc2VfZGVjbCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCSogcHQuYyAodGVtcGxhdGVfYXJnc19lcXVhbCwgcHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IExpa2V3aXNlLgoJKHByaW50X2NhbmRpZGF0ZXMsIGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBMaWtld2lzZS4KCgkqIHJlcG8uYyAoZ2V0X2Jhc2VfZmlsZW5hbWUsIG9wZW5fcmVwb19maWxlLCBpbml0X3JlcG8pOiBMaWtld2lzZS4KCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuLCBleHBhbmRfZ2VuZXJpY19kZXNjLCBleHBhbmRfc2lfZGVzYywKCWV4cGFuZF9jbGFzc19kZXNjLCBleHBhbmRfcHRyX2Rlc2MsIGV4cGFuZF9hdHRyX2Rlc2MpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfaW5mbywgbG9va3VwX21lbWJlcik6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIGEgUFRSLgoKCSogc2lnLmMgKGNvbXBpbGVyX2Vycm9yKTogRG9uJ3QgcHJvdG90eXBlLgoJKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV9uYW0pOiBDb25zdC1pZnkgYSBjaGFyKi4KCShnZXRfc2lndGFibGVfbmFtZSwgYnVpbGRfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIpOiBMaWtld2lzZS4KCgkqIHRyZWUuYyAoY29tcGlsZXJfZXJyb3IpOiBEb24ndCBwcm90b3R5cGUuCgkobm9fbGlua2FnZV9oZWxwZXIsIGJ1aWxkX3NyY2xvYyk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoJKGJ1aWxkX3ZiYXNlX3BvaW50ZXJfZmllbGRzKTogQ29uc3QtaWZ5IGEgY2hhciouCgkoX19lcHJpbnRmKTogRG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5kbGUgYGNvbnN0JyB3aGVuICFfX1NURENfXy4KCgkqIHR5cGVjay5jIChjb21waWxlcl9lcnJvcik6IERvbid0IHByb3RvdHlwZS4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogQ29uc3QtaWZ5IGEgY2hhciouCgkoY29tcF9jdl90YXJnZXRfdHlwZXMpOiBBZGQgc3RhdGljIHByb3RvdHlwZS4KCShidWlsZF94X2luZGlyZWN0X3JlZiwgYnVpbGRfaW5kaXJlY3RfcmVmLCBjb252ZXJ0X2FyZ3VtZW50cywKCWJ1aWxkX2NvbXBvbmVudF9hZGRyLCBidWlsZF91bmFyeV9vcCwgY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOgoJQ29uc3QtaWZ5IGEgY2hhciouCgoJKiB0eXBlY2syLmMgKGFjayk6IEFkZCBzdGF0aWMgcHJvdG90eXBlIGFuZCBjaGFuZ2UgZnJvbSBmaXhlZCBhcmdzCgl0byB2YXJpYWJsZSBhcmdzLgoJKHJlYWRvbmx5X2Vycm9yLCBjaGVja19mb3JfbmV3X3R5cGUpOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHhyZWYuYyAoX1hSRUZfRklMRSwgZmluZF9maWxlLCBmaWxlbmFtZSwgZmN0bmFtZSwgZGVjbG5hbWUsCglmaXhuYW1lLCBvcGVuX3hyZWZfZmlsZSwgY2xhc3NuYW1lLCBHTlVfeHJlZl9iZWdpbik6IExpa2V3aXNlLgoJKEdOVV94cmVmX2ZpbGUpOiBMaWtld2lzZS4gIEFsc28gdXNlIGB4bWFsbG9jJyBpbnN0ZWFkIG9mIGBtYWxsb2MnLgoJKEdOVV94cmVmX2VuZF9zY29wZSwgR05VX3hyZWZfcmVmLCBHTlVfeHJlZl9kZWNsLCBHTlVfeHJlZl9jYWxsLAoJZ2VuX2Fzc2lnbiwgR05VX3hyZWZfbWVtYmVyKTogQ29uc3QtaWZ5IGEgY2hhciouCgoxOTk5LTAzLTI1ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ3h4aW50LnRleGk6IFJlbW92ZSBvbGQgZGlzY3Vzc2lvbiBvbiBjb3B5aW5nIHZpcnR1YWwgYmFzZXMuCgoxOTk5LTAzLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2UtbGFuZy5pbjogUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIGcrKy5vL2crKy5jLgoJTGluayBnKysgZnJvbSBnY2Muby4KCjE5OTktMDMtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogVHJlYXQgdnRhYmxlcyBsaWtlIGZ1bmN0aW9ucy4KCjE5OTktMDMtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IHRzdWJzdCBpbnRvIERFQ0xfQkVGUklFTkRJTkdfQ0xBU1NFUy4KCjE5OTktMDMtMjUgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIGBzaWduZWQnIHR5cGUgYXMgYSBzeW5vbnltCglmb3IgYGludCcuCgoxOTk5LTAzLTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBIYW5kbGUgY3YtcXVhbCB1bmlmaWNhdGlvbiBmb3IgcG9pbnRlcnMKCXRvIG1lbWJlcnMuCgoJKiBkZWNsLmMgKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBSZXR1cm4gZXJyb3JfbWFya19ub2RlCglvbiBlcnJvci4KCShsb29rdXBfbmFtZV9yZWFsKTogU2V0IExPT0tVUF9DT01QTEFJTiB3aGVuICpub3QqIHBhcnNpbmcuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogSWYgd2UgZ290IGVycm9yX21hcmtfbm9kZSwgY2FsbAoJbG9va3VwX25hbWUgYWdhaW4uCgoxOTk5LTAzLTI0ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWx3YXlzIHJlc2V0IFRZUEVfRklFTERTIGZvciBlbXB0eQoJY2xhc3Nlcy4KCjE5OTktMDMtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvIG5lc3RlZCBmaWVsZCBsb29rdXAgcmVnYXJkbGVzcyBvZgoJVFlQRV9CRUlOR19ERUZJTkVELgoKMTk5OS0wMy0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ190eXBlKTogUmVtb3ZlIGhhc19hc3NpZ25tZW50IGFuZAoJaGFzX3JlYWxfYXNzaWdubWVudC4gIEFkZCBiZWZyaWVuZGluZ19jbGFzc2VzLgoJKFRZUEVfSEFTX0FTU0lHTk1FTlQpOiBSZW1vdmUuCgkoVFlQRV9IQVNfUkVBTF9BU1NJR05NRU5UKTogTGlrZXdpc2UuCgkoQ0xBU1NUWVBFX0JFRlJJRU5ESU5HX0NMQVNTRVMpOiBOZXcgbWFjcm8uCgkobGFuZ19kZWNsKTogRG9jdW1lbnQuCgkoREVDTF9CRUZSSUVORElOR19DTEFTU0VTKTogTmV3IG1hY3JvLgoJKEZSSUVORF9OQU1FKTogTW92ZSBkZWNsYXJhdGlvbiB0byBtb3JlIG9idmlvdXMgbG9jYXRpb24uCgkoRlJJRU5EX0RFQ0xTKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHVzZSBUWVBFX0hBU19SRUFMX0FTU0lHTk1FTlQuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29weSBERUNMX0JFRlJJRU5ESU5HX0NMQVNTRVMuCgkoZml4dXBfYW5vbnltb3VzX3VuaW9uKTogRG9uJ3QgdXNlIFRZUEVfSEFTX0FTU0lHTk1FTlQuCgkoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBVc2UgRlJJRU5EX05BTUUgYW5kIEZSSUVORF9ERUNMUy4KCShhZGRfZnJpZW5kKTogTGlrZXdpc2UuICBEb24ndCBkbyB3ZWlyZCB0aGluZ3Mgd2l0aCBhc3NpZ25tZW50CglvcGVyYXRvcnMuICBVcGRhdGUgREVDTF9CRUZSSUVORElOR19DTEFTU0VTLgoJKGFkZF9mcmllbmRzKTogRG9uJ3QgZG8gd2VpcmQgdGhpbmdzIHdpdGggYXNzaWdubWVudCBvcGVyYXRvcnMuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBMaWtld2lzZS4gIFVwZGF0ZQoJQ0xBU1NUWVBFX0JFRlJJRU5ESU5HX0NMQVNTRVMuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3Qgc2V0CglUWVBFX0hBU19BU1NJR05NRU5ULgoJKHRzdWJzdF9jb3B5KTogU3Vic3RpdHV0ZSB0aGUgVFJFRV9UWVBFIGZvciBtb3JlIHVuYXJ5CglleHByZXNzaW9ucy4KCSogcHRyZWUuYyAocHJpbnRfbGFuZ190eXBlKTogRG9uJ3QgbG9vayBhdCBUWVBFX0hBU19BU1NJR05NRU5ULgoJKiBzZWFyY2guYyAocHJvdGVjdGVkX2FjY2Vzc2libGVfcCk6IE5ldyBmdW5jdGlvbi4KCShmcmllbmRfYWNjZXNzaWJsZV9wKTogTGlrZXdpc2UuCgkoYWNjZXNzaWJsZV9wKTogVXNlIHRoZW0uCgoxOTk5LTAzLTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogRG9uJ3QgY3JlYXRlIHRoaW5ncyB0aGF0IGFyZW4ndAoJUFRSTUVNX0NTVHMgd2hlbiBhcHBseWluZyBhIHF1YWxpZmljYXRpb24gY29udmVyc2lvbiB0byBhCglQVFJNRU1fQ1NULgoKMTk5OS0wMy0yMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIE1ha2VmaWxlLmluIChPQkpTKTogRG9uJ3QgbWVudGlvbiBoYXNoLm8uCgkoT0JKREVQUyk6IExpa2V3aXNlLgoKMTk5OS0wMy0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBTZXQgYXRfZW9mIHRvIDIgYWZ0ZXIgZXhwYW5kaW5nIGN0b3JzLgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IE1ha2Ugc3VyZSB3ZSBkb24ndCBhZGQgYW55IGFmdGVyCgl0aGVuLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IE1vdmUgaW50ZWxsaWdlbmNlIGFib3V0IGhhbmRsaW5nCglERUNMX0NPTURBVCBmb3IgdmFyaWFibGVzIGZyb20gaGVyZS4uLgoJKiBkZWNsMi5jIChjb21kYXRfbGlua2FnZSk6IC4uLnRvIGhlcmUuCgkobWF5YmVfbWFrZV9vbmVfb25seSk6IFR3ZWFrLgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IENhbGwgY29tZGF0X2xpbmthZ2UgZm9yIHZhcmlhYmxlcywgdG9vLgoJKGZpbmlzaF9maWxlKTogSGFuZGxlIHRlbXBsYXRlIHN0YXRpY3MgcHJvcGVybHkuCgoxOTk5LTAzLTIyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY3AtdHJlZS5oIChUWVBFX1BUUk1FTUZVTkNfUCk6IFVzZSBUWVBFX1BUUk1FTUZVTkNfRkxBRy4KCURvY3VtZW50IGludGVybmFscyBvZiBwb2ludGVyLXRvLW1lbWJlci1mdW5jdGlvbnMuCgkoREVMVEEyX0ZST01fUFRSTUVNRlVOQyk6IE1ha2UgaXQgY2FsbCBkZWx0YTJfZnJvbV9wdHJtZW1mdW5jLgoJKFBGTl9GUk9NX1BUUk1FTUZVTkMpOiBMaWtld2lzZS4KCShidWlsZF90eXBlX2NvbnZlcnNpb24pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlci4KCShidWlsZF9wdHJtZW1mdW5jMSk6IERlY2xhcmUuCgkoZXhwYW5kX3B0cm1lbWZ1bmNfY3N0KTogTmV3IGZ1bmN0aW9uLgoJKGRlbHRhMl9mcm9tX3B0cm1lbWZ1bmMpOiBMaWtld2lzZS4KCShwZm5fZnJvbV9wdHJtZW1mdW5jKTogTGlrZXdpc2UuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciB0bwoJYnVpbGRfdHlwZV9jb252ZXJzaW9uLiAgVXNlIFRZUEVfUFRSTUVNX1AgZm9yIHJlYWRhYmlsaXR5LgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgdG8KCWJ1aWxkX3R5cGVfY29udmVyc2lvbi4KCShvY3BfY29udmVydCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBOVUxMIHBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9ucy4KCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IEhhbmRsZSBQVFJNRU1fQ1NUcyBmb3IgZnVuY3Rpb25zLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBEb24ndCBnbyBzcGxpdHRpbmcgQ09OU1RSVUNUT1JzCglvcGVuIHdoZW4gaGFuZGxpbmcgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zLgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBDbGVhbiB1cCBlcnJvciBtZXNzYWdlcy4gIEJlCgltb3JlIHN0cmluZ2VudCB3aXRoIHBvaW50ZXJzLXRvLW1lbWJlcnMuCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jMSk6IERvbid0IGRlY2xhcmUuICBNYWtlIGl0IGdsb2JhbC4KCShidWlsZF91bmFyeV9vcCk6IFRpZHkgZXZlci1zby1zbGlnaHRseS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogUmVtb3ZlIGV4dHJhIHBhcmFtZXRlciB0bwoJYnVpbGRfdHlwZV9jb252ZXJzaW9uLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBCdWlsZCBQVFJNRU1fQ1NUcyBpZiB3ZSBrbm93IHdoYXQgZnVuY3Rpb24KCXdlJ3JlIHVzaW5nLgoJKGV4cGFuZF9wdHJtZW1mdW5jX2NzdCk6IERlZmluZS4KCShkZWx0YTJfZnJvbV9wdHJtZW1mdW5jKTogTGlrZXdpc2UuCgkocGZuX2Zyb21fcHRybWVtZnVuYyk6IExpa2V3aXNlLgoKMTk5OS0wMy0xOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBIYW5kbGUgdGVtcGxhdGUtaWQgZXhwcmVzc2lvbnMKCWNvcnJlY3RseS4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoKMTk5OS0wMy0xOSAgQ2hpcCBTYWx6ZW5iZXJnICA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+CgoJKiBmcmllbmQuYyAobWFrZV9mcmllbmRfY2xhc3MpOiBBdm9pZCBjb3JlIGR1bXAgd2hlbgoJbm90LXlldC1kZWZpbmVkIGZyaWVuZCB0eXBlIGxhY2tzIFRZUEVfTEFOR19TUEVDSUZJQygpLgoKMTk5OS0wMy0xOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFN1cHByZXNzIG5vcm1hbCBsaW5rYWdlIGhldXJpc3RpY3MKCWZvciAjcHJhZ21hIGludGVyZmFjZSB1bmRlciBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTLgoKMTk5OS0wMy0xOSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlLWxhbmcuaW46ICgkKElOVExfVEFSR0VUUykpOiBEZXBlbmQgb24gY3AvcGFyc2UuYy4KCSgkKHNyY2RpcikvY3AvcGFyc2UuYyk6IE1vdmVkIGZyb20gLi4vTWFrZWZpbGUuaW4uCgoxOTk5LTAzLTE3ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogcGFyc2UueSAobmFtZWRfY29tcGxleF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGUpOgoJRG8gbm90IHB1c2ggYSBzY29wZSBmb3IgZXJyb3JfbWFya19ub2RlLgoJKG1heWJlX2Jhc2VfY2xhc3NfbGlzdCk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQ2hlY2sgZm9yIGVycm9yX21hcmtfbm9kZSBhcyBhIHR5cGUuCglEZXRlY3RlZCBieSBnKysuYnJlbmRhbi9hcnJheS1yZWZzLkMuCgkoc3RhcnRfZGVjbF8xKTogTGlrZXdpc2UuICBEZXRlY3RlZCBieSBnKysuYnVncy85MDAzMjJfMDEuQy4KCShtYXliZV9idWlsZF9jbGVhbnVwXzEpOiBMaWtld2lzZS4gIERldGVjdGVkIGJ5CglnKysuamFzb24vaW5jb21wbGV0ZTEuQy4KCgkqIHRyZWUuYyAoYnVpbGRfZHVtbXlfb2JqZWN0KTogVXNlIHZvaWRfemVyb19ub2RlIGluc3RlYWQgb2YgdGhlCgllcnJvcl9tYXJrX25vZGUuCgkoaXNfZHVtbXlfb2JqZWN0KTogQ2hlY2sgZm9yIHN1Y2ggYSBub2RlLgoJRGV0ZWN0ZWQgYnkgZysrLmJvYi9pbmhlcml0MS5DCgoxOTk5LTAzLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAob2xkX2JhY2tyZWZfaW5kZXgpOiBTcGxpdCBvdXQuLi4KCShmbHVzaF9yZXBlYXRzKTogRnJvbSBoZXJlLiAgUmVuYW1lIGJhY2sgZnJvbSB0cnlfb2xkX2JhY2tyZWYuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lKTogUHV0IGJhY2sgc29tZSBvbGQtc3R5bGUgcmVwZWF0IGhhbmRsaW5nLgoKTW9uIE1hciAxNSAyMTo1NzoxNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsZXguYzogRG9uJ3QgaW5jbHVkZSBzZXRqbXAuaC4KCShwYXJzZV9mbG9hdCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocGZfYXJncyk6IE5ldyBzdHJ1Y3QuCgkocmVhbF95eWxleCk6IFVzZSB0aGVtIGluIGNhbGwgdG8gYGRvX2Zsb2F0X2hhbmRsZXInLgoKMTk5OS0wMy0xNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBTZXQgQ0xBU1NUWVBFX1ZCQVNFQ0xBU1NFUyBoZXJlLgoJKiB0cmVlLmMgKGxheW91dF9iYXNldHlwZXMpOiBOb3QgaGVyZS4KCSogc2VhcmNoLmMgKGRmc19zZWFyY2gpOiBSZW1vdmU7IG5vIGxvbmdlciB1c2VkLgoKMTk5OS0wMy0xMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wyLmMgKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogSXNzdWUgc2Vuc2libGUKCWVycm9yLW1lc3NhZ2VzIG9uIGJvZ3VzIHF1YWxpZmllcnMuCgoxOTk5LTAzLTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCgkqIE1ha2VmaWxlLmluIChzZWFyY2gubyk6IEFkZCBkZXBlbmRlbmN5IG9uIHZhcnJheS5oLgoKMTk5OS0wMy0xMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBVc2Ugc2FtZV90eXBlX3AuCgkqIG1ldGhvZC5jICh0cnlfb2xkX2JhY2tyZWYpOiBSZW5hbWVkIGZyb20gZmx1c2hfcmVwZWF0cy4gIFVzZQoJc2FtZV90eXBlX3AuICBEb24ndCB0cnkgdG8gaGFuZGxlIHJlcGVhdHMuICBSZXR1cm4gc3VjY2Vzcy4KCShpc19iYWNrX3JlZmVyZW5jZWFibGVfdHlwZSk6IFJldHVybiAwIGlmIFRZUEVfRk9SX0pBVkEuICBTdXBwb3J0CgljYWxscyBmcm9tIG9sZC1zdHlsZSBjb2RlLCB0b28uCgkoY2hlY2tfa3R5cGUpOiBVc2Ugc2FtZV90eXBlX3AuCgkoY2hlY2tfYnR5cGUpOiBVc2Ugc2FtZV90eXBlX3AuICBEb24ndCBwdWxsIG91dCBUWVBFX01BSU5fVkFSSUFOVC4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IFNpbXBsaWZ5IGxvZ2ljLgoJKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IFN0cmlwIHR5cGVkZWZzIGFuZCBxdWFscyBhdCB0aGUgdG9wLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZV93aXRoX0djb2RlKTogUmVtb3ZlIGNhbGwgdG8KCXR5cGVfY2Fub25pY2FsX3ZhcmlhbnQuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lKTogTGlrZXdpc2UuICBSZW1vdmUgc3VwcG9ydCBmb3Igb2xkLXN0eWxlCglyZXBlYXRzLCB3aGljaCBoYXZlIGJlZW4gZGlzYWJsZWQgc2luY2UgMi43LjIuICBEb24ndCBtZXNzIHdpdGgKCVRSRUVfVVNFRC4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBEb24ndCBtZXNzIHdpdGggVFJFRV9VU0VELgoKMTk5OS0wMy0xMyAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGVycm9yLmMgKGNwX3ByaW50ZXJzKTogQWRkICdGJyBlc2NhcGUgY2hhcmFjdGVyLgoJKGR1bXBfdHlwZV9yZWFsKTogUmVtb3ZlIFRSRUVfTElTVCAoZm5hcmdzKSBwcmludGluZy4KCUZ1bmN0aW9uYWxpdHkgbW92ZWQgdG8gZHVtcF9wYXJhbWV0ZXJzLgoJKGR1bXBfdHlwZV9zdWZmaXgpOiBVc2UgZHVtcF9wYXJhbWV0ZXJzIGFuZCBkdW1wX2V4Y2VwdGlvbl9zcGVjLgoJKGR1bXBfZnVuY3Rpb25fZGVjbCk6IEV4dGVuZCBtZWFuaW5nIG9mIFYgcGFyYW1ldGVyLiAgVXNlCglkdW1wX3BhcmFtZXRlcnMgYW5kIGR1bXBfZXhjZXB0aW9uX3NwZWMuCgkoZHVtcF9wYXJhbWV0ZXJzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShkdW1wX2V4Y2VwdGlvbl9zcGVjKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShmbmRlY2xfYXNfc3RyaW5nKTogQ2hhbmdlIGFyZ3VtZW50IHNlbWFudGljcy4gIFVzZQoJZHVtcF9mdW5jdGlvbl9kZWNsIGRpcmVjdGx5LgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IFVzZSBjcF9lcnJvci4KCjE5OTktMDMtMTMgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3N3aXRjaF9jb25kKTogSGFuZGxlIGVycm9yIGNhc2VzIGdyYWNlZnVsbHkuCglEZXRlY3RlZCBieSBnKysubGF3L2VudW01LkMuCgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBDaGVjayBmb3IgZXJyb3JzIGFmdGVyIHJlc29sdmluZwoJb2Zmc2V0cy4gIERldGVjdGVkIGJ5IGcrKy5icmVuZGFuL3N0YXRpYzEuQy4KCgkqIGRlY2wuYyAoY29tcGxldGVfYXJyYXlfdHlwZSk6IElnbm9yZSBpbml0aWFsX3ZhbHVlIGlmIGl0IGlzIGFuCgllcnJvci4gIERldGVjdGVkIGJ5IGcrKy5iZW5qYW1pbi8xNzkzMC5DLgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBSZXR1cm4gZXJyb3IgaWYgb25lIGFyZ3VtZW50CglpcyBpbiBlcnJvci4gIERldGVjdGVkIGJ5IGcrKy5iZW5qYW1pbi8xMzQ3OC5DLgoKMTk5OS0wMy0xMiAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAoc2VsZWN0X2RlY2wpOiBBbGxvdyBjbGFzcyB0ZW1wbGF0ZXMgd2hlbiB3ZSBuZWVkIHR5cGVzLgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IExpa2V3aXNlLgoKMTk5OS0wMy0xMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogQ29ycmVjdCBjYWxsIHRvIGVuZm9yY2VfYWNjZXNzLgoJKiBzZWFyY2guYyAoYWNjZXNzaWJsZV9wKTogVHdlYWsgY29tbWVudC4KCjE5OTktMDMtMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IENhbGwgYnVpbGRfc2VsZl9yZWZlcmVuY2UuCgkoZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbik6IFNldCBERUNMX0NPTlRFWFQgZm9yIFRZUEVfREVDTHMuCgoJKiBzZWFyY2guYyAoYXNzZXJ0X2Nhbm9uaWNhbF91bm1hcmtlZCk6IEZpeCB0eXBvIGluIHByb3RvdHlwZS4KCgkqIHNlYXJjaC5jIChkZnNfY2Fub25pY2FsX3F1ZXVlKTogTmV3IGZ1bmN0aW9uLgoJKGRmc19hc3NlcnRfdW5tYXJrZWRfcCk6IExpa2V3aXNlLgoJKGFzc2VydF9jYW5vbmljYWxfdW5tYXJrZWQpOiBMaWtld2lzZS4KCShhY2Nlc3NfaW5fdHlwZSk6IFVzZSBpdC4KCShhY2Nlc3NpYmxlX3ApOiBMaWtld2lzZS4gIFdhbGsgdGhlIHdob2xlIHRyZWUgd2hlbiB1bWFya2luZy4KCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBVc2UgYWNjZXNzaWJsZV9wCglpbnN0ZWFkIG9mIGNvbXB1dGVfYWNjZXNzLgoKMTk5OS0wMy0wOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogSGFuZGxlIG92ZXJsb2FkZWQgY29udmVyc2lvbiBvcHMuCgoxOTk5LTAzLTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChmbGFnX2FjY2Vzc19jb250cm9sKTogRGVjbGFyZS4KCShUUkVFX1ZJQV9QUFVCTElDKTogRG9jdW1lbnQuCgkoREVDTF9OT05TVEFUSUNfTUVNQkVSX1ApOiBOZXcgbWFjcm8uCgkoZW5mb3JjZV9hY2Nlc3MpOiBSZXR1cm4gYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCBhY2Nlc3MKCXdhcyBwZXJtaXR0ZWQuCgkoYnVpbGRfc2VsZl9yZWZlcmVuY2UpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGNvbXB1dGVfYWNjZXNzKTogUmVwbGFjZSB3aXRoIC4uLgoJKGFjY2Vzc2libGVfcCk6IE5ldyBmdW5jdGlvbi4KCShkZnNfd2Fsayk6IENoYW5nZSBwcm90b3R5cGUuCgkoZGZzX3VubWFyayk6IExpa2V3aXNlLgoJKG1hcmtlZHApOiBMaWtld2lzZS4KCSogY2FsbC5jIChlbmZvcmNlX2FjY2Vzcyk6IFVzZSBhY2Nlc3NpYmxlX3AuCgkqIGNsYXNzLmMgKGJ1aWxkX3NlbGZfcmVmZXJlbmNlKTogSW5zZXJ0IHRoZSBkZWNsYXJhdGlvbiBpbnRvIHRoZQoJbGlzdCBvZiBtZW1iZXJzIGZvciB0aGlzIHR5cGUsIGFuZCBtYWtlIGl0IHB1YmxpYy4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IEF2b2lkIGlsbC10aW1lZCByZWN1cnNpb24uCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IFVzZSBsb29rdXBfbWVtYmVyLCBub3QgdGhyZWUgc2VwYXJhdGUKCW5hbWUtbG9va3Vwcy4gIENhbGwgZW5mb3JjZV9hY2Nlc3MgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yCglpbGxlZ2FsIGFjY2Vzc2VzIGhlcmUuCgkocmVzb2x2ZV9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBSZW1vdmUuCgkob3B0X2NvbXBvbmVudF9kZWNsX2xpc3QpOiBEb24ndCB1c2UgaXQuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChwcmludF9jYW5kaWRhdGVzKTogR2VuZXJhbGl6ZSB0byBoYW5kbGUgbGlzdHMgb2YKCW92ZXJsb2FkZWQgZnVuY3Rpb25zLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgcmVseSBvbiBUUkVFX1ZJQV9QUklWQVRFOyBpdCdzCglub3Qgc2V0LgoJKGdldF90ZW1wbGF0ZV9iYXNlKTogVXNlIG5ldyBjYWxsaW5nIGNvbnZlbnRpb24gZm9yIGRmc193YWxrLgoJKiBzZWFyY2guYzogSW5jbHVkZSB2YXJyYXkuaC4gIEFkZCBwcm90b3R5cGVzLgoJKGRmc193YWxrKTogQWNjZXB0IGEgZGF0YSBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIHdvcmsgZnVuY3Rpb25zLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4gIEFsbCB3b3JrIGZ1bmN0aW9ucyBjaGFuZ2VkLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogUmVuYW1lIHRvIGJmc193YWxrLCBhbmQgbWFrZSBjb25zaXN0ZW50Cgl3aXRoIGRmc193YWxrLgoJKGRmc193YWxrX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkoY2Fub25pY2FsX2JpbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGNvbnRleHRfZm9yX25hbWVfbG9va3VwKTogTGlrZXdpc2UuCgkoc2hhcmVkX21hcmtlZF9wKTogTGlrZXdpc2UuCgkoc2hhcmVkX3VubWFya2VkX3ApOiBMaWtld2lzZS4KCShsb2t1cF9maWVsZF9xdWV1ZV9wKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkX3IpOiBHZW5lcmFsaXplIHRvIGhhbmRsZSBib3RoIGZ1bmN0aW9ucyBhbmQgZmllbGRzLgoJKGxvb2t1cF9maWVsZCk6IEp1c3QgY2FsbCBsb29rdXBfbWVtYmVyLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBNb3ZlIGJvZHkgb2YgbG9va3VwX2ZpZWxkIGhlcmUgYW5kIGdlbmVyYWxpemUuCgkoZGZzX2FjY2Vzc2libGVfcXVldWVfcCk6IExpa2V3aXNlLgoJKGRmc19hY2Nlc3NpYmxlX3ApOiBMaWtld2lzZS4KCShkZnNfYWNjZXNzX2luX3R5cGUpOiBMaWtld2lzZS4KCShhY2Nlc3NfaW5fdHlwZSk6IExpa2V3aXNlLgoJKGNvbXB1dGVfYWNjZXNzKTogUmVtb3ZlLCBhbmQgcmVwbGFjZSB3aXRoIC4uLgoJKGFjY2Vzc2libGVfcCk6IE5ldyBmdW5jdGlvbi4KCSh2YmFzZV90eXBlcyk6IFJlbW92ZS4KCSh2YmFzZV9kZWNsX3B0cl9pbnRlcm1lZGlhdGUpOiBMaWtld2lzZS4KCSh2YmFzZV9kZWNsX3B0cik6IExpa2V3aXNlLgoJKHZiYXNlX2luaXRfcmVzdWx0KTogTGlrZXdpc2UuCgkoY2xvc2VkX2VudmVsb3Blcyk6IExpa2V3aXNlLgoJKGJ2dGFibGUpOiBMaWtld2lzZS4KCjE5OTktMDMtMDkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IENoZWNrIGZvciBwcm9wZXIgbnVtYmVyIG9mIGFyZ3MKCWJlZm9yZSBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgdGhvc2UgYXJncy4KCjE5OTktMDMtMDYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfdHlwZSk6IEFkZCBhbm9uX3VuaW9uIGZpZWxkLgoJKEFOT05fVU5JT05fVFlQRV9QKTogVXNlIGl0IGluc3RlYWQgb2YgZXhhbWluaW5nIHR5cGUuCgkoU0VUX0FOT05fVU5JT05fVFlQRV9QKTogTmV3IG1hY3JvLgoJKiBkZWNsLmMgKGNoZWNrX3RhZ19kZWNsKTogVXNlIGl0LgoKCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogSGFuZGxlIG5vbi10eXBlIGNvbnRleHRzIGVhcmxpZXIsIGFuZAoJaGFuZGxlIE5VTExfVFJFRS4KCgkqIHRyZWUuYyAoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBVc2UgY29weV90b19wZXJtYW5lbnQuCgoJKiBkZWNsMi5jIChzZXR1cF9pbml0cCk6IEdpdmUgc3RhdGljcyB3aXRoIG5vIHByaW9yaXR5IHRoZSBkZWZhdWx0Cglwcmlvcml0eSBoZXJlLgoJKGRvX2R0b3JzLCBkb19jdG9ycywgZmluaXNoX2ZpbGUpOiBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBvZgoJbm9uLXByaW9yaXRpemVkIHN0YXRpY3MuCgoxOTk5LTAzLTA1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChBTk9OX1VOSU9OX1RZUEVfUCk6IFJvYnVzdGlmeS4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBEb24ndCBpc3N1ZSBhbiBlcnJvciBpZiBhbgoJaW1tZWRpYXRlIGxvb2t1cCBmYWlsczsgaXQgbWlndCBiZSByZXNvbHZlZCBsYXRlci4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEFkZCBjb21tZW50LgoJKiBzZWFyY2guYyAoYnJlYWR0aF9maXJzdF9zZWFyY2gpOiBBZGQgUE9TVEZOIGFuZCBEQVRBCglwYXJhbWV0ZXJzLiAgVGlkeS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkobG9va3VwX2ZpZWxkX3F1ZXVlX3ApOiBOZXcgZnVuY3Rpb24uCgkobG9va3VwX2ZpZWxkX3IpOiBMaWtld2lzZS4KCShsb29rdXBfZmllbGRfcG9zdCk6IExpa2V3aXNlLgoJKGxvb2t1cF9maWVsZCk6IFVzZSB0aGVtLCB2aWEgYnJlYWR0aF9maXJzdF9zZWFyY2gsIGluc3RlYWQgb2YKCWR1cGxpY2F0aW5nIGxvZ2ljLgoJKGNvbXB1dGVfYWNjZXNzKTogUm9idXN0aWZ5LgoJKGxvb2t1cF9mbmZpZWxkX2luZm8pOiBOZXcgc3RydWN0dXJlLgoKMTk5OS0wMy0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIEFSUkFZX1JFRik6IFVzZSB0c3Vic3RfZXhwciBhZ2Fpbi4KCjE5OTktMDMtMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMsIGRlY2wyLmMsIG1ldGhvZC5jLCBwdC5jOiBBZGQgJ3N0YXRpYycgdG8gbWFrZSBTdW5PUyA0CgljYyBoYXBweS4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfY2xhc3MpOiBBbHNvIHJldHVybiBpZgoJQ0xBU1NUWVBFX0lOVEVSRkFDRV9PTkxZIGlzIHNldC4KCjE5OTktMDMtMDMgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogT25seSBvdmVyd3JpdGUgdGhlIG9sZCBiaW5kaW5nIGlmCgl0aGVyZSB3YXMgb25lLgoJKiBkZWNsMi5jIChkb19sb2NhbF91c2luZ19kZWNsKTogRml4IGxvb3AgdGVybWluYXRpb24uCgoxOTk5LTAzLTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBkZWNsYXJlLgoJKiBwdC5jIChkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBNYWtlIGl0IHN0YXRpYy4gIEVsaW1pbmF0ZQoJY29tcGxhaW4gcGFyYW1ldGVyLiAgTm90ZSB0aGF0IGRlY2wgaXMgYWx3YXlzIG5vbi1OVUxMIG5vdywgYW5kCglzaW1wbGlmeSBhY2NvcmRpbmdseS4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBBbHdheXMgY2FsbAoJcHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0LgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IEFsd2F5cyBjYWxsIHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0LgoKMTk5OS0wMi0yNiAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlX29yX2Vsc2UpOiBBZGQgVkFMVUUgYXJnLCBmb3IgaGVscGZ1bAoJZGlhZ25vc3RpY3MuCgkqIGNwLXRyZWUuaCAoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogQWRkZWQgVkFMVUUgcGFyYW1ldGVyLgoJKiBpbml0LmMgKGJ1aWxkX25ld18xKTogRXh0cmEgYXJnIHRvIGNvbXBsZXRlX3R5cGVfb3JfZWxzZS4KCShidWlsZF9kZWxldGUpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZSk6IExpa2V3aXNlLgoJKHBvaW50ZXJfaW50X3N1bSk6IExpa2V3aXNlLgoJKHBvaW50ZXJfZGlmZik6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCgkqIHR5cGVjazIuYyAoaW5jb21wbGV0ZV90eXBlX2Vycm9yKTogQWx3YXlzIHVzZSBjcF9lcnJvci4KCVNob3cgZGVjbGFyYXRpb24gb2YgdW5kZWZpbmVkIHR5cGUsIGlmIGFwcHJvcHJpYXRlLgoJRGVhbCB3aXRoIFVOS05PV05fVFlQRSBub2Rlcy4KCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBVc2UgVFlQRV9TSVpFIGFzCglzaXplX3plcm9fbm9kZSB0byBtZWFuIGluY29tcGxldGUgdHlwZS4KCShyZXF1aXJlX2NvbXBsZXRlX3R5cGVfaW5fdm9pZCk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9jb21wb3VuZF9leHByKTogQ2FsbCBjb21wbGV0ZV90eXBlX2luX3ZvaWQgZm9yIExIUy4KCShidWlsZF9jX2Nhc3QpOiBDYWxsIGNvbXBsZXRlX3R5cGVfaW5fdm9pZCBmb3Igdm9pZCBjYXN0LgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBDYWxsIGNvbXBsZXRlX3R5cGVfaW5fdm9pZCBmb3Igdm9pZCBjYXN0LgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBWb2lkIGV4cHJlc3Npb24gY2hlY2tzIG1vdmVkIHRvCglyZXF1aXJlX2NvbXBsZXRlX3R5cGVfaW5fdm9pZC4gIENhbGwgaXQuCgkqIGNwLXRyZWUuaCAocmVxdWlyZV9jb21wbGV0ZV90eXBlX2luX3ZvaWQpOiBQcm90b3R5cGUgbmV3IGZ1bmN0aW9uLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogVXNlIGFsdGVybmF0aXZlIGZvcm1hdCBmb3IKCWZ1bmN0aW9uIGRlY2xzLiAgRG9uJ3QgcmVxdWlyZV9jb21wbGV0ZV90eXBlIGhlcmUuICBTaW1wbGlmeQoJZGlhZ25vc3RpYyBwcmludGluZy4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IERvbid0IHJlcXVpcmVfY29tcGxldGVfdHlwZSBvbiBSSFMgeWV0LgoJKiBjYWxsLmMgKGNvbnZlcnRfYXJnX3RvX2VsbGlwc2lzKTogQ2FsbCByZXF1aXJlX2NvbXBsZXRlX3R5cGUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENvcGUgd2l0aCBxdWFsaWZpZWQgdm9pZCByZXR1cm4gdHlwZS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9jYWxsX2V4cHIpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChyZXBhcnNlX2Fic2RjbF9hc19leHByKTogQ29wZSB3aXRoIHF1YWxpZmllZCB2b2lkIHR5cGUuCgoJKiBjYWxsLmMgKHByaW50X3pfY2FuZGlkYXRlcyk6IFVzZSBhbHRlcm5hdGUgcHJpbnQgZm9ybWF0LCB0byBiZQoJY29uc2lzdGVudCB3aXRoIChwdC5jKSBwcmludF9jYW5kaWRhdGVzLgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogTGlzdCBjYW5kaWRhdGUgbWVtYmVycy4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IEJ1aWxkIGFtYmlndW91cyBsaXN0LCBhbmQgc2hvdyBpdCwgaWYKCWFtYmlndW91cy4KCjE5OTktMDItMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IERvbid0IGNvbmZ1c2UgY29uc3RhbnQgYXJyYXkKCXZhcmlhYmxlcyB3aXRoIHRoZWlyIGluaXRpYWxpemVycy4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ29weSBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRFRCB3aGVuCgltZXJnaW5nIGRlY2xzLgoJKiBwdC5jIChyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZSk6IFR3ZWFrIGZvciBjbGFyaXR5LgoJKGluc3RhbnRpYXRlX2RlY2wpOiBNYXJrIGEgZGVjbCBpbnN0YW50aWF0ZWQgYmVmb3JlIHJlZ2VuZXJhdGluZwoJaXQgdG8gYXZvaWQgcmVjdXJzaW9uLgoJKiB0cmVlLmMgKG1hcGNhcik6IERvbid0IGNhbGwgZGVjbF9jb25zdGFudF92YWx1ZSB1bmxlc3Mgd2Uga25vdwoJc29tZXRoaW5nIGlzIFRSRUVfUkVBRE9OTFlfREVDTF9QLgoKCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlKTogRG9uJ3Qgc3RvcCBjaGVja2luZyB3aGVuIHdlIGZpbmQKCXRoZSBmaXJzdCBvdmVycmlkZGVuIGZ1bmN0aW9uLiAgRGVsZXRlICNpZiAwJ2QgY29kZS4KCSogc2VhcmNoLmMgKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTGlrZXdpc2UuCgoxOTk5LTAyLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oOiBEZWZpbmUgX19GQVNUX01BVEhfXyB3aGVuIGFwcHJvcHJpYXRlLgoKMTk5OS0wMi0yNCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbGxvdyBib29sZWFuIGludGVncmFsIGNvbnN0YW50CglleHByZXNzaW9ucyB0byBjb252ZXJ0IHRvIG51bGwgcG9pbnRlci4KCjE5OTktMDItMjQgIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBSZXNvbHZlIG5hbWVzcGFjZSBhbGlhc2VzLgoKCSogY2xhc3MuYyAocHVzaF9uZXN0ZWRfY2xhc3MpOiBBbGxvdyBuYW1lc3BhY2VzLgoKCSogZGVjbDIuYyAoc2V0X2RlY2xfbmFtZXNwYWNlKTogQWRkIGZyaWVuZHAgcGFyYW1ldGVyLgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBQYXNzIGl0LgoJKGdyb2t2YXJkZWNsKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogQ2hhbmdlIGRlY2xhcmF0aW9uLgoKMTk5OS0wMi0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogQWxsb3cgYW4gYXJyYXkgb2YgZXhwbGljaXQgc2l6ZSB6ZXJvLgoKMTk5OS0wMi0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXJyZm4uYzogQ2hhbmdlIHZhcmFyZ3MgY29kZSB0byBsb29rIGxpa2UgdG9wbGV2LmMuCgoJKiBtZXRob2QuYyAocHJvY2Vzc19tb2RpZmllcnMpOiBEb24ndCBwcmVwZW5kICdVJyBmb3IgY2hhciBvcgoJd2NoYXJfdC4KCjE5OTktMDItMjAgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi5yZWFkeSk6IERvbid0IGNvbnNpZGVyIHVwZGF0aW5nCgljcGxpYjIgc3R1ZmYgaWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzbid0IHdyaXRhYmxlLCBhcwoJaXQgd29uJ3Qgd29yayAoc3VjaCBhcyBkdXJpbmcgYSBgbWFrZSBpbnN0YWxsJykuCgpTdW4gRmViIDIxIDIwOjM4OjAwIDE5OTkgIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGRlY2wyLmMgKHN0YXJ0X29iamVjdHMpOiBNYWtlIGZpbGUgc2NvcGUgY29uc3RydWN0b3JzIGFuZAoJZGVzdHJ1Y3RvcnMgbG9jYWwgdG8gdGhlIGZpbGUgaWYgQVNNX09VVFBVVF9DT05TVFJVQ1RPUiBhbmQKCUFTTV9PVVRQVVRfREVTVFJVQ1RPUiBhcmUgZGVmaW5lZC4KCjE5OTktMDItMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9NRVRIT0RfVkVDKTogQWRqdXN0IGNvbW1lbnQuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkanVzdCBwcm90b3R5cGUuCgkobG9va3VwX2ZuZmllbGRzXzEpOiBEZWNsYXJlLgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IEFkanVzdCBjYWxsIHRvCglmbl90eXBlX3VuaWZpY2F0aW9uLgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogRG9uJ3QgYWxsb3cgZHVwbGljYXRlIGRlY2xhcmF0aW9ucyBvZgoJY29uc3RydWN0b3JzIG9yIGRlc3RydWN0b3JzLgoJKHJlc29sdmVfYWRkcmVzc19vZl9vdmVybG9hZGVkX2Z1bmN0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCUFkanVzdCBjYWxsIHRvIGZuX3R5cGVfdW5pZmljYXRpb24uCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEJlIG1vcmUgcm9idXN0IGluIHRoZSBmYWNlIG9mIGlsbGVnYWwKCXNwZWNpYWxpemF0aW9ucy4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IFJlbW92ZSBob2tleSBoYW5kbGluZyBvZiBtZW1iZXIKCXRlbXBsYXRlcy4KCSogcHQuYyAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogSW1wcm92ZSBjb21tZW50cy4gIEFkanVzdCB0bwoJaGFuZGxlIHRlbXBsYXRlIGFyZ3VtZW50IGRlZHVjdGlvbiBhcyBwZXIgdGhlIHN0YW5kYXJkLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRml4IGNvbW1lbnQgc3BhY2luZy4gIEhhbmRsZQoJdHlwZS1jb252ZXJzaW9uIG9wZXJhdG9ycyBjb3JyZWN0bHkuICBJbXByb3ZlIGVycm9yLXJlY292ZXJ5LgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBSZW1vdmUgRVhUUkFfRk5fQVJHIHBhcmFtZXRlci4KCShnZXRfYmluZGluZ3NfcmVhbCk6IFNpbXBsaWZ5IGhhbmRsaW5nIG9mIHN0YXRpYyBtZW1iZXJzLgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzXzEpOiBNYWtlIGl0IGhhdmUgZXh0ZXJuYWwgbGlua2FnZS4KCSogdHlwZWNrLmMgKGNvbXBwYXJtcyk6IEZpeCBjb21tZW50LgoJKGJ1aWxkX3VuYXJ5X29wKTogRG9uJ3QgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggdGVtcGxhdGUKCXNwZWNpYWxpemF0aW9uIGlzIGJlaW5nIHJlZmVycmVkIHRvIHdoZW4gd2hlbiB0aGUgYWRkcmVzcy1vZgoJb3BlcmF0b3IgaXMgdXNlZCB3aXRoIGEgdGVtcGxhdGUgZnVuY3Rpb24uCgpUaHUgRmViIDE4IDIzOjQwOjAxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwLXRyZWUuaCAobHZhbHVlX29yX2Vsc2UpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JwoJa2V5d29yZCB0byBtYXRjaCBhbiBhbmFsb2dvdXMgY2hhbmdlIGF0IHRoZSB0b3AgbGV2ZWwuCgoJKiB0cmVlLmMgKGx2YWx1ZV9vcl9lbHNlKTogTGlrZXdpc2UuCgoxOTk5LTAyLTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IENvbW1lbnQuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIHhyZWZfYmFzZXR5cGVzLgoKMTk5OS0wMi0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAodHN1YnN0KTogQ2hhbmdlIHByb3RvdHlwZS4KCSh0c3Vic3RfZXhwcik6IExpa2V3aXNlLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkodHlwZV91bmlmaWNhdGlvbik6IFJlbW92ZSBwcm90b3R5cGUuCgkqIGNhbGwuYyAoY29udmVydF9kZWZhdWx0X2FyZyk6IEFkanVzdCBjYWxsIHRvIHRzdWJzdF9leHByLgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IEp1c3QgdXNlCglmbl90eXBlX3VuaWZpY2F0aW9uLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWRqdXN0IGNhbGwgdG8gdHN1YnN0LgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcyk6IExpa2V3aXNlLgoJKiBwdC5jIChHVEJfVklBX1ZJUlRVQUwpOiBOZXcgbWFjcm8uCgkoR1RCX0lHTk9SRV9UWVBFKTogTGlrZXdpc2UuCgkocmVzb2x2ZV9vdmVybG9hZGVkX3VuaWZpY2F0aW9uKTogQWRkIGBjb21wbGFpbicgcGFyYW1ldGVyLgoJKHRyeV9vbmVfb3ZlcmxvYWQpOiBMaWtld2lzZS4KCSh0c3Vic3RfdGVtcGxhdGVfYXJnX3ZlY3Rvcik6IExpa2V3aXNlLgoJKHRzdWJzdF90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBMaWtld2lzZS4KCSh0c3Vic3RfYXJnX3R5cGVzKTogTGlrZXdpc2UuCgkodHN1YnN0X2NhbGxfZGVjbGFyYXRvcl9wYXJtcyk6IExpa2V3aXNlLgoJKHVuaWZ5KTogUmVtb3ZlIGV4cGxpY2l0X21hc2suCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuCgkoZ2V0X3RlbXBsYXRlX2Jhc2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkoY29lcmNlX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1zKTogUHJvdmlkZSBwcm90b3R5cGUuCgkodHN1YnN0X2Z1bmN0aW9uX3R5cGUpOiBMaWtld2lzZS4KCSh0cnlfY2xhc3NfdW5pZmljYXRpb24pOiBOZXcgZnVuY3Rpb24uCglBbGwgY2FsbGVycyBjaGFuZ2VkIHRvIHVzZSBuZXcgY29tcGxhaW4gcGFyYW1ldGVyLgoJKGdldF90ZW1wbGF0ZV9iYXNlKTogVXNlIHRyeV9jbGFzc191bmlmaWNhdGlvbi4KCSh1bmlmeSk6IEFkanVzdCBoYW5kbGluZyBvZiBjbGFzc2VzIGRlcml2ZWQgZnJvbSB0ZW1wbGF0ZSB0eXBlcy4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogU3Vic3RpdHV0ZSBleHBsaWNpdCBhcmd1bWVudHMgYmVmb3JlCgl1bmlmaWNhdGlvbi4KCjE5OTktMDItMTYgIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogUmVtb3ZlIGRlYWQgY29kZS4KCjE5OTktMDItMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9vYmplY3RzKTogRml4IGNvZGUgSSBtaXNzZWQgaW4gcHJldmlvdXMgY2hhbmdlLgoKMTk5OS0wMi0xMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogUmV0dXJuIE5VTExfVFJFRSBpbnN0ZWFkIG9mIGVycm9yX21hcmtfbm9kZS4KCShncm9rZGVjbGFyYXRvcik6IERvbid0IGV4cGVjdCBlcnJvcl9tYXJrX25vZGUgZnJvbSBncm9rZm5kZWNsLgoKCSogcHQuYyAobWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uKTogQ29tcGxhaW4gYWJvdXQKCSd0ZW1wbGF0ZSA8Picgb24gbm9uLXNwZWNpYWxpemF0aW9uLgoKMTk5OS0wMi0xMCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENhdGNoIHdpZXJkIGRlY2xhcmF0b3JzLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IGFib3J0IGJlY2F1c2Ugb2YgbmFtZXNwYWNlIHBhcnNpbmcKCWZhaWx1cmUuCgkoY2hlY2tfZGVjbF9uYW1lc3BhY2UpOiBSZW1vdmUuCgoxOTk5LTAyLTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChnZXRfdGVtcGxhdGVfYmFzZSk6IERvbid0IGRlY2xhcmUuCgkoZGZzX3dhbGspOiBEZWNsYXJlLgoJKGRmc191bm1hcmspOiBMaWtld2lzZS4KCShtYXJrZWRwKTogTGlrZXdpc2UuCgkqIHB0LmMgKHVuaWZ5KTogUmVtb3ZlIGR1cGxpY2F0ZSBkZWNsYXJhdGlvbi4gIFBhc3MgdHBhcm1zIGFuZAoJdGFyZ3MgdG8gZ2V0X3RlbXBsYXRlX2Jhc2UuCgkoZ2V0X3RlbXBsYXRlX2Jhc2VfcmVjdXJzaXZlKTogTW92ZSBoZXJlIGZyb20gc2VhcmNoLmMuICBDaGVjayB0bwoJc2VlIHRoYXQgdGhlIGJhc2UgZm91bmQgY2FuIGJlIGluc3RhbnRpYXRlZCB0byBmb3JtIHRoZSBkZXNpcmVkCgl0eXBlLgoJKGdldF90ZW1wbGF0ZV9iYXNlKTogTGlrZXdpc2UuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogU2ltcGxpZnkuCgkqIHNlYXJjaC5jIChnZXRfdGVtcGxhdGVfYmFzZV9yZWN1cnNpdmUpOiBNb3ZlIHRvIHB0LmMuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBMaWtld2lzZS4KCShtYXJrZWRwKTogTWFrZSBpdCBnbG9iYWwuCgkoZGZzX3dhbGspOiBMaWtld2lzZS4KCShkZnNfdW5tYXJrKTogTGlrZXdpc2UuCgoxOTk5LTAyLTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDb21wbGFpbiBhYm91dAoJc3BlY2lhbGl6YXRpb24gaW4gd3JvbmcgbmFtZXNwYWNlLgoJKiB0cmVlLmMgKGRlY2xfbmFtZXNwYWNlX2NvbnRleHQpOiBOZXcgZm4uCgoxOTk5LTAyLTA2ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX3R5cGUpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIG5lc3RlZAoJdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KClNhdCBGZWIgIDYgMTg6MDg6NDAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrMi5jOiBVcGRhdGUgZW1haWwgYWRkcmVzc2VzLgoKMTk5OS0wMi0wNCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YtZnMudXNjLmVkdT4KCgkqIHB0LmMgKHVuaWZ5KTogQ2FsbCBjb2VyY2VfdGVtcGxhdGVfcGFybXMgd2l0aCB0aGUgQ09NUExBSU4gZmxhZwoJdHVybmVkIG9mZi4KCjE5OTktMDItMDQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChyZXRyb2ZpdF9sYW5nX2RlY2wpOiBTcGxpdCBvdXQuLi4KCShidWlsZF9sYW5nX2RlY2wpOiBGcm9tIGhlcmUuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBDYWxsIGl0IGZvciBmdW5jdGlvbnMgZ2VuZXJhdGVkIGJ5IHRoZSBtaWRkbGUKCWVuZCB0aGF0IGRvbid0IGhhdmUgREVDTF9MQU5HX1NQRUNJRklDLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgoJKiBkZWNsMi5jOiBSZW1vdmUgZmxhZ19pbml0X3ByaW9yaXR5LiAgQWx3YXlzIGVuYWJsZSBpbml0cCBzdHVmZi4KCShzdGFydF9vYmplY3RzLCBmaW5pc2hfb2JqZWN0cyk6IE9ubHkgdXNlIHNwZWNpYWwKCWluaXRfcHJpb3JpdHkgY29kZSBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBwcmlvcml0eS4KCShkb19jdG9ycywgZG9fZHRvcnMpOiBVc2UgREVGQVVMVF9JTklUX1BSSU9SSVRZIGZvciB0aGUgbm9uLWluaXRwCglvYmplY3RzLgoKV2VkIEZlYiAgMyAyMjo1MDoxNyAxOTk5ICBNYXJjIEVzcGllICA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZS1sYW5nLmluIChHWFhfT0JKUyk6IFJlbW92ZSBjaG9vc2UtdGVtcC5vLCBwZXhlY3V0ZS5vIGFuZAoJbWtzdGVtcC5vLiAgR2V0IHRoZW0gZnJvbSBsaWJpYmVydHkgbm93LgoJKERFTUFOR0xFUl9QUk9HKTogU2ltbGFybHksIHJlbW92ZSBnZXRvcHQubyBnZXRvcHQxLm8uCgpUdWUgRmViICAyIDIyOjM4OjQ4IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogVXNlIHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyLgoKMTk5OS0wMi0wMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCwgY2FzZSBUWVBFTkFNRV9UWVBFKTogQ2hlY2sgVFlQRV9CRUlOR19ERUZJTkVECgliZWZvcmUgY2FsbGluZyBjb21wbGV0ZV90eXBlX29yX2Vsc2UuCgpNb24gRmViICAxIDA5OjQ5OjUyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGlucHV0LmMgKGlubGluZSk6IERvbid0IGRlZmluZSwgaXRzIGhhbmRsZWQgYnkgc3lzdGVtLmguCgpTdW4gSmFuIDMxIDIwOjM0OjI5IDE5OTkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZGVjbDIuYzogRG9uJ3QgZGVmaW5lIGZsYWdfbm9faWRlbnQgaGVyZS4gIERvbid0IHByb2Nlc3MKCS1mKG5vLSlpZGVudCBoZXJlLgoJKiBjcC10cmVlLmg6IERvbid0IGRlY2xhcmUgZmxhZ19ub19pZGVudCBoZXJlLgoJKiBsYW5nLXNwZWNzLmg6IE1hcCAtUW4gdG8gLWZuby1pZGVudC4KCjE5OTktMDEtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IHRyZWVfYmluZGluZyk6IFJlcGxhY2Ugc2NvcGUgZmllbGQgd2l0aCBhIHVuaW9uLgoJKEJJTkRJTkdfU0NPUEUpOiBBZGp1c3QuCgkqIGRlY2wuYyAoQklORElOR19MRVZFTCk6IEFkanVzdC4KCjE5OTktMDEtMjYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogU2V0IHVwIHRoZSBERUNMX0lOSVRJQUwgb2YKCW1lbWJlciBjb25zdGFudHMuCgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IFB1bGwgb3V0IFRZUEVfTUFJTl9WQVJJQU5UIGluCglhIGN0b3IgaW5pdGlhbGl6ZXIuCgoJKiB0cmVlLmMgKGVxdWFsX2Z1bmN0aW9ucyk6IEZpeCBuYW1lIGluIHByb3RvdHlwZS4KCgkqIGRlY2wuYyAocHVzaF9sb2NhbF9iaW5kaW5nKTogQWRkIEZMQUdTIGFyZ3VtZW50LgoJKHB1c2hkZWNsLCBwdXNoX292ZXJsb2FkZWRfZGVjbCk6IFBhc3MgaXQuCgkqIGRlY2wyLmMgKGRvX2xvY2FsX3VzaW5nX2RlY2wpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBBZGp1c3QgcHJvdG90eXBlLgoJKiBkZWNsLmMgKHBvcGxldmVsKTogRml4IGxvZ2ljLgoKCSogZGVjbC5jIChwdXNoX2xvY2FsX2JpbmRpbmcpOiBBbHNvIHdyYXAgdXNlZCBkZWNscyBpbiBhIFRSRUVfTElTVC4KCShwb3BsZXZlbCk6IEhhbmRsZSB0aGF0LiAgRml4IGxvZ2ljIGZvciByZW1vdmluZyBUUkVFX0xJU1RzLgoJKGNhdF9uYW1lc3BhY2VfbGV2ZWxzKTogRG9uJ3QgbG9vcCBmb3JldmVyLgoKMTk5OS0wMS0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9yZWludGVycHJldF9jYXN0KTogRml4IHR5cG8gaW4gZHVwbGljYXRlZCB0ZXN0LgoKMTk5OS0wMS0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAocmVzb2x2ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24pOiBNYXJrIHRoZQoJY2hvc2VuIGZ1bmN0aW9uIHVzZWQuCgoJKiBjYWxsLmMgKGJ1aWxkX2NhbGwpOiBNYWtlIHN1cmUgdGhhdCBhIGZ1bmN0aW9uIGNvbWluZyBpbiBoYXMKCWJlZW4gbWFya2VkIHVzZWQgYWxyZWFkeS4KCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBDYWxsIG1hcmtfdXNlZCBpbnN0ZWFkIG9mCglhc3NlbWJsZV9leHRlcm5hbC4KCSogZXhjZXB0LmMgKGNhbGxfZWhfaW5mbywgZG9fcG9wX2V4Y2VwdGlvbiwgZXhwYW5kX2VuZF9laF9zcGVjLAoJYWxsb2NfZWhfb2JqZWN0LCBleHBhbmRfdGhyb3cpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9idWlsdGluX2RlbGV0ZV9jYWxsKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoY2FsbF92b2lkX2ZuLCBnZXRfdGluZm9fZm4sIGJ1aWxkX2R5bmFtaWNfY2FzdF8xLAoJZXhwYW5kX3NpX2Rlc2MsIGV4cGFuZF9jbGFzc19kZXNjLCBleHBhbmRfcHRyX2Rlc2MsIGV4cGFuZF9hdHRyX2Rlc2MsCglleHBhbmRfZ2VuZXJpY19kZXNjKTogTGlrZXdpc2UuCgoxOTk5LTAxLTI1ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogdHJlZS5jIChlcXVhbF9mdW5jdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkob3ZsX21lbWJlcik6IENhbGwgaXQuCgoxOTk5LTAxLTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogRml4IGNvbnZlcnNpb24gb2YgMCB0byBwbWYuCgoxOTk5LTAxLTI1ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBSZXR1cm4gMSBpZiBvbGQgYW5kIG5ldyBhcmUgaWRlbnRpY2FsLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogU2V0IE9WTF9VU0VEIHdoZW4gUFVTSF9VU0lORy4KCjE5OTktMDEtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBNYWtlIG1lbWJlciBmdW5jdGlvbnMgb25lX29ubHkgb24gd2luZG93cy4KCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgaW1wbGljaXQgaW50IGluCglhIHN5c3RlbSBoZWFkZXIuICBDaGFuZ2Ugc2FtZS1uYW1lIGZpZWxkIGNoZWNrIHRvIG5vdCBjb21wbGFpbiBpbgoJYSBzeXN0ZW0gaGVhZGVyIGluc3RlYWQgb2Ygd2l0aGluIGV4dGVybiAiQyIuCgoxOTk5LTAxLTIxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChQVVNIX0dMT0JBTCk6IE5ldyBtYWNyby4KCShQVVNIX0xPQ0FMKTogTGlrZXdpc2UuCgkoUFVTSF9VU0lORyk6IExpa2V3aXNlLgoJKG5hbWVzcGFjZV9iaW5kaW5nc19wKTogRGVjbGFyZS4KCShwdXNoX292ZXJsb2FkZWRfZGVjbCk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuICBDaGVjayBmb3IKCWlsbGVnYWwgZGVjbGFyYXRpb25zIGFmdGVyIHVzaW5nIGRlY2xhcmF0aW9ucyBoZXJlLgoJKG5hbWVzcGFjZV9iaW5kaW5nc19wKTogTGlrZXdpc2UuCgkoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgY29uc2lkZXIgZGVjbGFyYXRpb25zIGZyb20gZGlmZmVyZW50CgluYW1lc3BhY2VzIHRvIGJlIHRoZSBzYW1lLgoJKHB1c2hkZWNsKTogVXNlIHN5bWJvbGljIFBVU0hfIGNvbnN0YW50cyBpbiBjYWxscyB0bwoJcHVzaF9vdmVybG9hZGVkX2RlY2wuCgkocHVzaF9vdmVybG9hZGVkX2RlY2xfMSk6IExpa2V3aXNlLgoJKiBkZWNsMi5jICh2YWxpZGF0ZV9ub25tZW1iZXJfdXNpbmdfZGVjbCk6IFR3ZWFrIGBzdGQnIGhhbmRsaW5nLgoJKGRvX25vbm1lbWJlcl91c2luZ19kZWNsKTogQ2hlY2sgZm9yIGlsbGVnYWwgdXNpbmcgZGVjbGFyYXRpb25zCglhZnRlciBvcmRpbmFyeSBkZWNsYXJhdGlvbnMgaGVyZS4KCShkb19sb2NhbF91c2luZ19kZWNsKTogQ2FsbCBwdXNoZGVjbCB0byBpbnNlcnQgZGVjbGFyYXRpb25zLgoKMTk5OS0wMS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZpeCBsYW5nX2MgLT4gbGFuZ19uYW1lX2MgdHlwby4KCjE5OTktMDEtMjEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGVfMSk6IERvbid0IGNhbGwgYnVpbGRfYXJyYXlfdHlwZQoJZm9yIHR5cGVzIGludm9sdmluZyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKCSogY3AtdHJlZS5oIChQQVJNX0RFQ0xfRVhQUik6IERlbGV0ZS4KCShjb252ZXJ0X2RlZmF1bHRfYXJnKTogQ2hhbmdlIHByb3RvdHlwZS4KCShjaGVja19kZWZhdWx0X2FyZ3VtZW50KTogRGVjbGFyZS4KCShzZWFyY2hfdHJlZSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGNvbnZlcnRfZGVmYXVsdF9hcmcpOiBUYWtlIHRoZSBmdW5jdGlvbiB0byB3aGljaCB0aGUKCWRlZmF1bHQgYXJndW1lbnQgYmVsb25ncyBhcyBhIHBhcmFtZXRlciwgYW5kIGRvIGFueSBuZWNlc3NhcnkKCWluc3RhbnRpYXRpb24gaGVyZSwgaW5zdGVhZCBvZiAuLi4KCShidWlsZF9vdmVyX2NhbGwpOiBIZXJlLgoJKiBkZWNsLmMgKGxvY2FsX3ZhcmlhYmxlX3ApOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfZGVmYXVsdF9hcmd1bWVudCk6IExpa2V3aXNlLCBzcGxpdCBvdXQgYW5kIHRpZGllZCBmcm9tIC4uLgoJKGdyb2twYXJtcyk6IEhlcmUuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IERvbid0IHNldCBQQVJNX0RFQ0xfRVhQUi4KCSogcHQuYyAodHN1YnN0X2NhbGxfZGVjbGFyYXRvcl9wYXJtcyk6IE5ldyBmdW5jdGlvbi4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogSGFuZGxlIEFSUkFZX1JFRnMuICBEbyB0aGUgb2J2aW91cyB0aGluZwoJd2l0aCBDQUxMX0VYUFJzLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gYmUgY2xldmVyLgoJKHRzdWJzdCk6IFVzZSB0c3Vic3RfY2FsbF9kZWNsYXJhdG9yX3Bhcm1zLgoJKiB0cmVlLmMgKHNlYXJjaF90cmVlKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFVzZSBuZXcgaW50ZXJmYWNlIHRvCgljb252ZXJ0X2RlZmF1bHRfYXJnLgoKMTk5OS0wMS0yMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fZGVjbCk6IERvbid0IHByaW50IHRoZSBhcmd1bWVudCB0eXBlcyBmb3IKCWEgZnVuY3Rpb24gd2hlbiB0aGUgdmVyYm9zaXR5IGxldmVsIGlzIG5lZ2F0aXZlLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBDaGVjayBmb3JtYXQgYXR0cmlidXRlcyBhdCBjYWxsLXRpbWUuCgoJKiBwdC5jICh0c3Vic3RfY29weSk6IEZpeCBjb21tZW50LgoJKHVuaWZ5KTogRG9uJ3QgYWxsb3cgdW5pZmljYXRpb24gd2l0aCB2YXJpYWJsZS1zaXplZCBhcnJheXMuCgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX3N0bXRfZXhwcik6IFdoZW4gcHJvY2Vzc2luZyBhIHRlbXBsYXRlIG1ha2UKCXRoZSBCSU5EX0VYUFIgbG9uZy1saXZlZC4KCjE5OTktMDEtMTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IE1ha2UgdnRhYmxlcyBjb21kYXQgaGVyZS4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IE5vdCBoZXJlLgoKMTk5OS0wMS0xOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBXcmFwIGFuIE9WRVJMT0FEIGFyb3VuZCBhIHVuaXF1ZQoJbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uCgoxOTk5LTAxLTE4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IE9ubHkgZGlhZ25vc2UgaWxsZWdhbCBhZGRyZXNzIG9mIG1lbWJlcgoJZnVuY3Rpb24gaWYgY29tcGxhaW5pbmcuCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBSZW1vdmUgZHVwbGljYXRlIGNvZGUuCgoxOTk5LTAxLTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGNvcHlfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IFVzZSBwZXJtYW5lbnRfb2JzdGFjay4KCjE5OTktMDEtMTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiBwdC5jICh1bmlmeSk6IFJlbW92ZSByZXN0cmljdGlvbnMgb24gZGVkdWN0aW9uIG9mIGFyZ3VtZW50CglvZiB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKMTk5OS0wMS0xOCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0XzEpOiBSZXNvbHZlIE9GRlNFVF9SRUYgZXhwcnMuCgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IFNob3cgbGlzdCBvZgoJYWxsIGNhbmRpZGF0ZXMsIHdoZW4gbm9uZSBvZiB0aGVtIG1hdGNoLgoKMTk5OS0wMS0xOCAgQ2hpcCBTYWx6ZW5iZXJnICA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+CgoJKiB0eXBlY2suYyAoY29tcF9wdHJfdHR5cGVzX3JlaW50ZXJwcmV0KTogUGVyIEFOU0ksIHRpZ2h0ZW4gdXAKCWRlZmluaXRpb24gb2YgJ2Nhc3RpbmcgYXdheSBjb25zdCcgaW4gcmVpbnRlcnByZXRfY2FzdDw+LgoKMTk5OS0wMS0xOCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBjdnQuYzogQWRkIGluY2x1ZGUgZm9yIGRlY2wuaCwgcmVtb3ZlIGV4dGVybiBmb3IKCXN0YXRpY19hZ2dyZWdhdGVzIHdoaWNoIGlzIG5vdyBwcm92aWRlZCBieSBkZWNsLmguCgoJKiBNYWtlZmlsZS5pbiAoY3Z0Lm8pOiBBZGQgZGVwZW5kZW5jeSBmb3IgZGVjbC5oIGFuZCBtaXNzaW5nCglkZXBlbmRlbmNpZXMgZm9yIGNvbnZlcnQuaCBhbmQgZmxhZ3MuaC4KCjE5OTktMDEtMTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBkZWNsMi5jIChkb19kdG9ycyk6IFNldCBjdXJyZW50IGxvY2F0aW9uIHRvIHRoYXQgb2YgdGhlCglkZWNsLCBmb3Igc2Vuc2libGUgZGlhZ25vc3RpY3MgYW5kIGRlYnVnZ2luZy4KCShjaGVja19jbGFzc2ZuKTogSXNzdWUgYGluY29tcGxldGUgdHlwZScgZXJyb3IsIGlmCgljbGFzcyBpcyBub3QgZGVmaW5lZC4KCjE5OTktMDEtMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZSBmb3IgYm91bmRfcG1mX3AuCgoxOTk5LTAxLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgkgICAgTWFuZnJlZCBIb2xsc3RlaW4gPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgbWFrZSAnbWFpbigpe30nIGFuIGVycm9yIHdpdGggb25seQoJLVdyZXR1cm4tdHlwZS4KCjE5OTktMDEtMTYgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBjcC10cmVlLmggKHN0cnVjdCBsYW5nX3R5cGUpOiBBZGRlZCBoYXNfbXV0YWJsZSBmbGFnLgoJKENMQVNTVFlQRV9IQVNfTVVUQUJMRSk6IE5ldyBtYWNybyB0byBhY2Nlc3MgaXQuCgkoVFlQRV9IQVNfTVVUQUJMRV9QKTogTmV3IG1hY3JvIHRvIHJlYWQgaXQuCgkoY3BfaGFzX211dGFibGVfcCk6IFByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBTZXQgaGFzX211dGFibGUgZnJvbSBtZW1iZXJzLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogQ2xlYXIgZGVjbCdzIFRSRUVfUkVBRE9OTFkgZmxhZywgaWYKCWl0IGNvbnRhaW5zIGEgbXV0YWJsZS4KCSogdHlwZWNrLmMgKGNwX2hhc19tdXRhYmxlX3ApOiBOZXcgZnVuY3Rpb24uCgoxOTk5LTAxLTE1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogSWdub3JlIHRvcC1sZXZlbCBxdWFsaWZpZXJzIG9uCglub24tdHlwZSBwYXJhbWV0ZXJzLgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IFVzZSBjdXJyZW50X2Z1bmN0aW9uX3Bhcm1zIGluIHRoZSBjYWxsCgl0byByZXF1aXJlX2NvbXBsZXRlX3R5cGVfZm9yX3Bhcm1zLCBub3QgdGhlIHByb2JhYmx5IGVtcHR5CglERUNMX0FSR1VNRU5UUy4KCjE5OTktMDEtMTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfYXNtX3N0bXQpOiBEb24ndCB3YXJuIGFib3V0IHJlZHVuZGFudCB2b2xhdGlsZS4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfY2xhc3MpOiBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTIG9ubHkgbWVhbnMKCXRoYXQgd2UgZG9uJ3Qgc3VwcHJlc3MgdGhlIG90aGVyIGNvcGllcy4KCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBMaWtld2lzZS4KCjE5OTktMDEtMTMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVW5kbyAxOTk4LTEyLTE0IGNoYW5nZS4KCSogdHJlZS5jIChidWlsZF9jcGx1c19hcnJheV90eXBlXzEpOiBMaWtld2lzZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZW1vdmUgbWlzbGVhZGluZyBjb21tZW50LgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBTdWJzdGl0dXRlIGlmIHRoZXJlIGFyZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLAoJcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IHVzZSB0ZW1wbGF0ZSBhcmd1bWVudHMuCgkodW5pZnkpOiBMaWtld2lzZSwgYnV0IGZvciB1bmlmaWNhdGlvbi4KCjE5OTktMDEtMTIgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGZsYWdfcGVybWlzc2l2ZSk6IERlY2xhcmUgZXh0ZXJuLgoKMTk5OS0wMS0wNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoSURFTlRJRklFUl9UWVBFTkFNRV9QKTogVXNlIE9QRVJBVE9SX1RZUEVOQU1FX0ZPUk1BVAoJaGVyZS4KCShsYW5nX3R5cGUpOiBBZGQgaXNfcGFydGlhbF9pbnN0YW50aWF0aW9uLiAgRGVjcmVhc2Ugd2lkdGggb2YKCWR1bW15LgoJKFBBUlRJQUxfSU5TVEFOVElBVElPTl9QKTogTmV3IG1hY3JvLgoJKE9QRVJBVE9SX1RZUEVOQU1FX1ApOiBSZW1vdmUuCgkqIGRlY2wuYyAodW5hcnlfb3BfcCk6IFVzZSBJREVOVElGSUVSX1RZUEVOQU1FX1AsIG5vdAoJT1BFUkFUT1JfVFlQRU5BTUVfUC4KCShncm9rX29wX3Byb3BlcnRpZXMpOiBMaWtld2lzZS4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IEhhbmRsZSBmcmllbmRzIHRoYXQgYXJlIG1lbWJlciBmdW5jdGlvbnMKCWNvcnJlY3RseS4KCSogbGV4LmMgKGluaXRfcGFyc2UpOiBVc2UgT1BFUkFUT1JfVFlQRU5BTUVfRk9STUFULgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJld29yayBmb3IgY2xhcml0eS4gIEF2b2lkCglsZWF2aW5nIFRZUEVfQkVJTkdfREVGSU5FRCBzZXQgaW4gb2JzY3VyZSBjYXNlcy4gIERvbid0IGRvCglhbnkgbW9yZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gdGhhbiBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSBmb3IKCWltcGxpY2l0IHR5cGVuYW1lLiAgU2V0IFBBUlRJQUxfSU5TVEFOVElBVElPTl9QLgoJKHRzdWJzdF9kZWNsKTogVXNlIElERU5USUZJRVJfVFlQRU5BTUVfUC4KCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBIYW5kbGUgcGFydGlhbAoJc3BlY2lhbGl6YXRpb25zIG9mIGEgdHlwZSB0aGF0IHdhcyBwcmV2aW91c2x5IHBhcnRpYWxseQoJaW5zdGFudGlhdGVkLgoKV2VkIEphbiAgNiAwMzoxODo1MyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQuCgoJKiBnKytzcGVjLmMgKExJQlNURENYWCk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogVXNlIExJQlNURENYWCBpbnN0ZWFkIG9mICItbHN0ZGMrKyIuCgpUdWUgSmFuICA1IDIyOjExOjI1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2UtbGFuZy5pbiAoZysrLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoxOTk5LTAxLTA0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJvdW5kX3BtZl9wKTogTmV3IGZuLgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogVXNlIGl0LgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBVc2Ugc2FtZV90eXBlX3AuCgpUdWUgRGVjIDIyIDE1OjA5OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChjdnQubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNwLXRyZWUuaCAoY2hlY2tfdGVtcGxhdGVfc2hhZG93LCBwb2RfdHlwZV9wKTogQWRkIHByb3RvdHlwZXMuCgoJKiBjdnQuYzogSW5jbHVkZSB0b3BsZXYuaC4KCgkqIGV4Y2VwdC5jIChnZXRfZWhfY2F1Z2h0LCBnZXRfZWhfaGFuZGxlcnMpOiBIaWRlIHByb3RvdHlwZXMgYW5kCglkZWZpbml0aW9ucy4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgaXR5cGUnLgoKCSogbGV4LmMgKHl5ZXJyb3IpOiBDYXN0IHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gYSBjdHlwZSBmdW5jdGlvbiB0bwoJYW4gdW5zaWduZWQgY2hhci4KCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX0M5eF9uYW1lKTogV3JhcCBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24KCWluICJIT1NUX0JJVFNfUEVSX1dJREVfSU5UID49IDY0Ii4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3ApOiBNYXJrIHBhcmFtZXRlciBgY29udmVydF9wJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKMTk5OC0xMi0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoVFlQRV9SQUlTRVNfRVhDRVBUSU9OUyk6IEltcHJvdmUgZG9jdW1lbnRhdGlvbi4KCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERvbid0IGNyYXNoIG9uIGVtcHR5IHRocm93CglzcGVjcy4KCjE5OTgtMTItMTggIERKIERlbG9yaWUgIDxkakBjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogQ2hlY2sgZm9yIGJvdGggZXJyb3JfbWFya19ub2RlCglhbmQgTlVMTF9OT0RFIGFmdGVyIGNhbGwgdG8gY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24uCgoxOTk4LTEyLTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChpbnRlcmVzdGluZ19zY29wZV9wKTogTmV3IGZuLgoJKGR1bXBfc2ltcGxlX2RlY2wpOiBVc2UgaXQuCgkoZHVtcF9leHByLCBjYXNlIENPTlNUUlVDVE9SKTogRm9yY2UgYSAmIGZvciBhIFBNRi4KCShkdW1wX2V4cHIsIGNhc2UgT0ZGU0VUX1JFRik6IFByaW50IC0+KiBpZiBhcHByb3ByaWF0ZS4KCjE5OTgtMTItMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IERvIGNvbnZlcnNpb24KCXRvIGNvcnJlY3QgdHlwZSBoZXJlLCByYXRoZXIgdGhhbiAuLi4KCShpbnN0YW50aWF0ZV90eXBlKTogSGVyZS4KCgkqIGNwLXRyZWUuaCAoREVDTF9URU1QTEFURV9QQVJNX1ApOiBOZXcgbWFjcm8uCgkoREVDTF9URU1QTEFURV9URU1QTEFURV9QQVJNX1ApOiBVc2UgaXQuCgkoZGVjbF90ZW1wbGF0ZV9wYXJtX3ApOiBSZW1vdmUuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBzZXQgREVDTF9DT05URVhUIGZvciBhIHRlbXBsYXRlCglwYXJhbWV0ZXIuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogVXNlIERFQ0xfVEVNUExBVEVfUEFSTV9QLgoJKiBwdC5jIChwdXNoX2lubGluZV90ZW1wbGF0ZV9wYXJtc19yZWN1cnNpdmUpOiBTZXQgaXQuCgkoZGVjbF90ZW1wbGF0ZV9wYXJtX3ApOiBSZW1vdmUuCgkoY2hlY2tfdGVtcGxhdGVfc2hhZG93KTogVXNlIERFQ0xfVEVNUExBVEVfUEFSTV9QLgoJKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IFNldCBpdC4KCldlZCBEZWMgMTYgMTY6MzM6NTggMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGFuZy1zcGVjcy5oIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLU1ELCAtTU1EIGFuZCAtTUcgdG8gY2MxcGx1cwoJaWYgY29uZmlndXJlZCB3aXRoIGNwcGxpYi4KCjE5OTgtMTItMTUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHBvcGxldmVsKTogTWFrZSBzdXJlIG5zX2JpbmRpbmcgaXMgaW5pdGlhbGl6ZWQuCgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVuZG8gaW5hZHZlcnRlbnQgY2hhbmdlIGluIHByZXZpb3VzCglwYXRjaC4KCjE5OTgtMTItMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBUd2VhayBoYW5kbGluZyBvZiBjbGFzcy1sZXZlbCBiaW5kaW5ncy4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IFVwZGF0ZSBwb2ludGVyLXRvLW1lbWJlcgoJaGFuZGxpbmcuCgkoaW5zdGFudGlhdGVfdHlwZSk6IExpa2V3aXNlLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocG9wX2JpbmRpbmcpOiBUYWtlIHRoZSBERUNMIHRvIHBvcCwgbm90IGp1c3QgdGhlIG5hbWUuCglEZWFsIHdpdGggYHN0cnVjdCBzdGF0JyBoYWNrLgoJKGJpbmRpbmdfbGV2ZWwpOiBBZGQgdG8gZG9jdW1lbnRhdGlvbi4KCShwdXNoX2JpbmRpbmcpOiBDbGVhciBCSU5ESU5HX1RZUEUuCgkoYWRkX2JpbmRpbmcpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF9sb2NhbF9iaW5kaW5nKTogVXNlIGl0LgoJKHB1c2hfY2xhc3NfYmluZGluZyk6IExpa2V3aXNlLgoJKHBvcGxldmVsKTogQWRqdXN0IGNhbGxzIHRvIHBvcF9iaW5kaW5nLgoJKHBvcGxldmVsX2NsYXNzKTogTGlrZXdpc2UuCgkocHVzaGRlY2wpOiBBZGp1c3QgaGFuZGxpbmcgb2YgVFlQRV9ERUNMczsgYWRkIGJpbmRpbmdzIGZvciBoaWRkZW4KCWRlY2xhcmF0aW9ucyB0byBjdXJyZW50IGJpbmRpbmcgbGV2ZWwuCgkocHVzaF9jbGFzc19sZXZlbF9iaW5kaW5nKTogTGlrZXdpc2UuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBBZGp1c3QgaGFuZGxpbmcgb2YgT1ZFUkxPQURzIGluIGxvY2FsCgliaW5kaW5ncy4KCShsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBEb24ndCBjcmFzaCB3aGVuIGNvbmZyb250ZWQgd2l0aCBhCglURU1QTEFURV9ERUNMLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBEbyBgc3RydWN0IHN0YXQnIGhhY2sgaW4gbG9jYWwgYmluZGluZwoJY29udGV4dHMuCgkoYnVpbGRfcHRybWVtZnVuY190eXBlKTogQWRqdXN0IGRvY3VtZW50YXRpb24uCgkoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBhdm9pZCBidWlsZGluZyByZWFsIGFycmF5IHR5cGVzIHdoZW4KCXByb2Nlc3NpbmcgdGVtcGxhdGVzIHVubGVzcyByZWFsbHkgbmVjZXNzYXJ5LgoJKGZpbmlzaF9tZXRob2QpOiBBZGp1c3QgY2FsbHMgdG8gcG9wX2JpbmRpbmcuCgkqIGRlY2wyLmMgKHJlcGFyc2VfYWJzZGNsX2FzX2V4cHIpOiBSZWN1cnNpdmVseSBjYWxsIG91cnNlbHZlcywKCW5vdCByZXBhcnNlX2RlY2xfYXNfZXhwci4KCShidWlsZF9leHByX2Zyb21fdHJlZSk6IERlYWwgd2l0aCBhIHRlbXBsYXRlLWlkIGFzIHRoZSBmdW5jdGlvbiB0bwoJY2FsbCBpbiBhIE1FVEhPRF9DQUxMX0VYUFIuCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IFR3ZWFrIHBvaW50ZXItdG8tbWVtYmVyIGhhbmRsaW5nLgoJKG1heWJlX2FkanVzdF90eXBlc19Gb3JfZGVkdWN0aW9uKTogRG9uJ3QgZG8gcGVjdWxpYXIgdGhpbmdzIHdpdGgKCU1FVEhPRF9UWVBFcyBoZXJlLgoJKHJlc29sdmVfb3ZlcmxvYWRlZF91bmlmaWNhdGlvbik6IEhhbmRsZSBDT01QT05FTlRfUkVGcy4gIEJ1aWxkCglwb2ludGVyLXRvLW1lbWJlciB0eXBlcyB3aGVyZSBuZWNlc3NhcnkuCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogRG9uJ3QgYXZvaWQgYnVpbGRpbmcgcmVhbAoJYXJyYXkgdHlwZXMgd2hlbiBwcm9jZXNzaW5nIHRlbXBsYXRlcyB1bmxlc3MgcmVhbGx5IG5lY2Vzc2FyeS4KCShidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IENvbXBhcmUgdGhlIGV4Y2VwdGlvbiBsaXN0cyBjb3JyZWN0bHkuCgoxOTk4LTEyLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5kZWYgKENQTFVTX0JJTkRJTkcpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KCSogY3AtdHJlZS5oIChMT0NBTF9CSU5ESU5HX1ApOiBOZXcgbWFjcm8uCgkobGFuZ19pZGVudGlmaWVyKTogUmVuYW1lIGxvY2FsX3ZhbHVlIHRvIGJpbmRpbmdzLgoJKHRyZWVfYmluZGluZyk6IE1ha2UgYHNjb3BlJyBvZiB0eXBlIGB2b2lkKicsIG5vdCBgdHJlZScuCgkoQklORElOR19TQ09QRSk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uLgoJKElERU5USUZJRVJfTE9DQUxfVkFMVUUpOiBSZW1vdmUuCgkoSURFTlRJRklFUl9DTEFTU19WQUxVRSk6IERvY3VtZW50LgoJKElERU5USUZJRVJfQklORElORyk6IE5ldyBtYWNyby4KCShJREVOVElGSUVSX1ZBTFVFKTogTGlrZXdpc2UuCgkoVElNRV9JREVOVElGSUVSX1RJTUUpOiBMaWtld2lzZS4KCShUSU1FX0lERU5USUZJRVJfRklMRUlORk8pOiBMaWtld2lzZS4KCShJTVBMSUNJVF9UWVBFTkFNRV9QKTogTGlrZXdpc2UuCgkoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUpOiBSZW1vdmUuCgkocHVzaF9sb2NhbF9iaW5kaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfY2xhc3NfYmluZGluZyk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBVcGRhdGUgY29tbWVudHM7IHVzZSBwdXNoX2NsYXNzX2JpbmRpbmcuCgkqIGRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWVfd2l0aF9zY29wZSk6IFJlbW92ZS4KCShzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZSk6IExpa2V3aXNlLgoJKHB1c2hfYmluZGluZyk6IE5ldyBmdW5jdGlvbi4KCShwb3BfYmluZGluZyk6IExpa2V3aXNlLgoJKGJpbmRpbmdfbGV2ZWwpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4gIFJlbW92ZSBzaGFkb3dlZC4KCShCSU5ESU5HX0xFVkVMKTogTmV3IG1hY3JvLgoJKGZyZWVfYmluZGluZ19ub2Rlcyk6IE5ldyB2YXJpYWJsZS4KCShwb3BsZXZlbCk6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4gIERvbid0IG1lc3MgdXAKCUJMT0NLX1ZBUnMgd2hlbiBkb2luZyBmb3Itc2NvcGUgZXh0ZW5zaW9uLiAgUmVtb3ZlIGVmZmVjdGl2ZWx5CglkZWFkIGNvZGUuCgkocHVzaGxldmVsX2NsYXNzKTogVHdlYWsgZm9ybWF0dGluZy4KCShwb3BsZXZlbF9jbGFzcyk6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4KCShwcmludF9iaW5kaW5nX2xldmVsKTogTGlrZXdpc2UuCgkoc3RvcmVfYmluZGluZ3MpOiBMaWtld2lzZS4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoJKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkocHVzaF9jbGFzc19sZXZlbF9iaW5kaW5nKTogTGlrZXdpc2UuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBVcGRhdGUgY29tbWVudHMuICBBZGp1c3QgZm9yIG5ldwoJbmFtZS1sb29rdXAgc2NoZW1lLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCShsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCShyZXF1aXJlX2NvbXBsZXRlX3R5cGVzX2Zvcl9wYXJtcyk6IExpa2V3aXNlLiAgUmVtb3ZlIG1pc2xlYWRpbmcKCSNpZiAwJ2QgY29kZS4KCShncm9rX3Bhcm1zKTogTGlrZXdpc2UuICBEb24ndCBjYWxsCglyZXF1aXJlX2NvbXBsZXRlX3R5cGVzX2Zvcl9wYXJtcyBoZXJlLgoJKGdyb2tfY3Rvcl9wcm9wZXJ0aWVzKTogRG9uJ3QgdHJlYXQgdGVtcGxhdGVzIGFzIGNvcHkKCWNvbnN0cnVjdG9ycy4KCShncm9wX29wX3Byb3BlcnRpZXMpOiBPciBhcyBhc3NpZ25tZW50IG9wZXJhdG9ycy4KCShzdGFydF9mdW5jdGlvbik6IERvY3VtZW50LiAgQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChkb19sb2NhbF91c2luZ19kZWNsKTogVXNlIHB1c2hfbG9jYWxfYmluZGluZy4KCSogbGV4LmMgKGJlZ2luX2RlZmluaXRpb25fb2ZfaW5jbGFzc19pbmxpbmUpOiBOZXcgZnVuY3Rpb24sIHNwbGl0CglvdXQgZnJvbSAuLi4KCShkb19wZW5kaW5nX2lubGluZXMpOiBIZXJlLCBhbmQgLi4uCgkocHJvY2Vzc19uZXh0X2lubGluZSk6IEhlcmUuCgkoZ2V0X3RpbWVfaWRlbnRpZmllcik6IFVzZSBUSU1FX0lERU5USUZJRVJfKiBtYWNyb3MuCgkoaW5pdF9maWxlbmFtZV90aW1lcyk6IExpa2V3aXNlLgoJKGV4dHJhY3RfaW50ZXJmYWNlX2luZm8pOiBMaWtld2lzZS4KCShzdGVfdHlwZWRlY2xfaW50ZXJmYWNlX2luZm8pOiBMaWtld2lzZS4KCShjaGVja19uZXdsaW5lKTogTGlrZXdpc2UuCgkoZHVtcF90aW1lX3N0YXRpc3RpY3MpOiBMaWtld2lzZS4KCShoYW5kbGVfY3BfcHJhZ21hKTogTGlrZXdpc2UuCgkoZG9faWRlbnRpZmllcik6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4KCSogcGFyc2UueSAoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogUmV0dXJuIGN0b3JfaW5pdGlhbGl6ZXJfb3B0IHZhbHVlLgoJKGZuZGVmKTogVXNlIGl0LgoJKGZuLmRlZnBlbik6IFBhc3MgYXBwcm9wcmlhdGUgdmFsdWVzIHRvIHN0YXJ0X2Z1bmN0aW9uLgoJKHBlbmRpbmdfaW5saW5lKTogVXNlIGZ1bmN0b3JfdHJ5X2Jsb2NrIHZhbHVlLCBhbmQgcGFzcwoJYXBwcm9wcmlhdGUgdmFsdWVzIHRvIGZpbmlzaF9mdW5jdGlvbi4KCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlKTogVXBkYXRlIGRvY3VtZW50YXRpb247IHJlbW92ZSBoYW5kbGluZwoJb2YgRlVOQ1RJT05fREVDTHMuICBBcyBwZXIgbmFtZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgZGVhbCBvbmx5IGluCglURU1QTEFURV9ERUNMcy4KCShkZWNsX3RlbXBsYXRlX3Bhcm1fcCk6IENoYW5nZSBuYW1lIG9mIG9sZGRlY2wgcGFyYW1ldGVyIHRvIGRlY2wuCgkoY2hlY2tfdGVtcGxhdGVfc2hhZG93KTogQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHRzdWJzdF9kZWNsKTogVHdlYWsgc28gYXMgbm90IHRvIGNvbmZ1c2UgbWVtYmVyIHRlbXBsYXRlcyB3aXRoCgljb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMuCgkodW5pZnkpOiBIYW5kbGUgVU5JT05fVFlQRXMuCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfaWRlbnRpZmllcik6IEFkanVzdCBmb3IgbmV3IG5hbWUtbG9va3VwIHNjaGVtZS4KCShsYW5nX3ByaW50X3hub2RlKTogQWRqdXN0IGZvciBuZXcgbmFtZS1sb29rdXAgc2NoZW1lLgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IExpa2V3aXNlLgoJKGNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgoKMTk5OC0xMi0wOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsbG93IGZpZWxkIHdpdGggc2FtZSBuYW1lIGFzIGNsYXNzCglpbiBleHRlcm4gIkMiLgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRG9uJ3QgbGltaXQgZmllbGQgbG9va3VwIHRvIHR5cGVzLgoJKiBjbGFzcy5jIChjaGVja19tZW1iZXJfZGVjbF9pc19zYW1lX2luX2NvbXBsZXRlX3Njb3BlKTogTm8gZXJyb3IKCWlmIGljdiBhbmQgeCBhcmUgdGhlIHNhbWUuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogVHdlYWsgZXJyb3IgbWVzc2FnZS4KCjE5OTgtMTItMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2VudW0pOiBVc2UgcHVzaF9vYnN0YWNrcywgbm90CgllbmRfdGVtcG9yYXJ5X2FsbG9jYXRpb24uCgkoZmluaXNoX2VudW0pOiBDYWxsIHBvcF9vYnN0YWNrcy4KCjE5OTgtMTItMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogUmV0dXJuIGVycm9yX21hcmtfbm9kZSByYXRoZXIgdGhhbgoJanVuay4KCjE5OTgtMTItMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKG1vc3Rfc3BlY2lhbGl6ZWRfaW5zdGFudGlhdGlvbik6IE5ldyBmdW5jdGlvbi4KCShwcmludF9jYW5kaWRhdGVzKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKHZhbGlkYXRlX2xocyk6IFJlbW92ZS4KCShyZXNvbHZlX2FkZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0CglhbmQgdGhlbiBzdWJzdGFudGlhbGx5IHJld29ya2VkLCBmcm9tIC4uLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBVc2UgaXQuICBTaW1wbGlmeS4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogQ29tcGxhaW4gd2hlbiBjYWxsZXIgaGFzIGluZGljYXRlZAoJdGhhdCdzIHRoZSByaWdodCB0aGluZyB0byBkby4gIERvbid0IGNyYXNoIGlmIGluc3RhbnRpYXRlX3R5cGUKCWZhaWxzLgoJKiBwdC5jOiBTdWJzdGl0dXRlIGBwYXJhbWV0ZXJzJyBmb3IgYHBhcmFtdGVycycgdGhyb3VnaG91dC4KCShwcmludF9jYW5kaWRhdGVzKTogRG9uJ3QgbWFrZSBpdCBzdGF0aWMuCgkobW9zdF9zcGVjaWFsaXplZF9pbnN0YW50aWF0aW9uKTogU3BsaXQgb3V0IGZyb20gLi4uCgkobW9zdF9zcGVjaWFsaXplZCk6IEhlcmUuCgpXZWQgRGVjICA5IDE1OjMzOjAxIDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemUgY3BwbGliLgoJKiBkZWNsMi5jIChwYXJzZV9vcHRpb25zLGNwcF9pbml0aWFsaXplZCk6IFJlbW92ZWQuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogTW92ZSBpbml0aWFsaXphdGlvbiBvZiBjcHBsaWIgdG8KCWxhbmdfaW5pdF9vcHRpb25zLgoKMTk5OC0xMi0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVcGRhdGUgdGhlIG5hbWUgb2YgdGhlIFRFTVBMQVRFX0RFQ0wsIGFzCgl3ZWxsIGFzIHRoZSBUWVBFX0RFQ0wsIHdoZW4gYSB0eXBlZGVmIG5hbWUgaXMgYXNzaWduZWQgdG8gYQoJcHJldmlvdXNseSBhbm9ueW1vdXMgdHlwZS4KCjE5OTgtMTItMDggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwL2V4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBVc2UgX19zdGFydF9jcF9oYW5kbGVyIGluc3RlYWQgb2YKCV9fY3BfZWhfaW5mbyBmb3IgZ2V0dGluZyB0aGUgZWggaW5mbyBwb2ludGVyLiAgQWRkIHRhYmxlX2luZGV4IHRvCglmaWVsZCBsaXN0LgoJKHB1c2hfZWhfY2xlYW51cCk6IERvbid0IGluY3JlbWVudCAnaGFuZGxlcnMnIGRhdGEgZmllbGQuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9jayk6IERvbid0IHNldCB0aGUgJ2NhdWdodCcgZmllbGQuCgoJKiBjcC9leGNlcHRpb24uY2MgKENQX0VIX0lORk8pOiBOZXcgbWFjcm8gZm9yIGdldHRpbmcgdGhlCglleGNlcHRpb24gaW5mbyBwb2ludGVyIHdpdGhpbiBsaWJyYXJ5IHJvdXRpbmVzLgoJKF9fY3BfZWhfaW5mbyk6IFVzZSBDUF9FSF9JTkZPLgoJKF9fc3RhcnRfY3BfaGFuZGxlcik6IEdldCBleGNlcHRpb24gaW5mbyBwb2ludGVyLCBzZXQgY2F1Z2h0IGZpZWxkLAoJYW5kIGluY3JlbWVudCB0aGUgaGFuZGxlcnMgZmllbGQuICBBdm9pZHMgdGhpcyBiZWluZyBkb25lIGJ5IGhhbmRsZXJzLgoJKF9fdW5jYXRjaF9leGNlcHRpb24sIF9fY2hlY2tfZWhfc3BlYyk6IFVzZSBDUF9FSF9JTkZPIG1hY3JvLgoJKHVuY2F1Z2h0X2V4Y2VwdGlvbik6IFVzZSBDUF9FSF9JTkZPIG1hY3JvLgoKVHVlIERlYyAgOCAxMDo0ODoyMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlLWxhbmcuaW4gKGN4eG1haW4ubyk6IERlcGVuZCBvbiAkKERFTUFOR0xFX0gpLCBub3QgZGVtYW5nbGUuaAoKTW9uIERlYyAgNyAxNzo1NjowNiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IEFkZCBzdXBwb3J0IGZvciBcIGFzIGBuYXR1cmFsJwoJY2hhcmFjdGVycyBpbiBmaWxlIG5hbWVzIGluICNsaW5lIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCAjaW5jbHVkZQoJaGFuZGxpbmcuICBXZSBzdXBwb3J0IGVzY2FwZSBwcm9jZXNzaW5nIGluIHRoZSAjIDEgIi4uLiIgdmVyc2lvbiBvZgoJdGhlIGNvbW1hbmQuICBTZWUgYWxzbyBzdXBwb3J0IGluIGNwL2xleC5jLgoKMTk5OC0xMi0wNyAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwL2RlY2wyLmM6IHMvZGF0YS9vcHRzLyB3aGVuIGluaXRpYWxpemluZyBjcHBfcmVhZGVyCglzdHJ1Y3R1cmUuCgoxOTk4LTEyLTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX3R5cGVuYW1lX3R5cGUpOiBTZXQgREVDTF9BUlRJRklDSUFMLgoKCSogZXJyb3IuYyAoZHVtcF9zaW1wbGVfZGVjbCk6IEFsc28gcHJpbnQgbmFtZXNwYWNlIGNvbnRleHQuCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IERvbid0IHByaW50IG9sZCB2YWx1ZSBpZiBpdCdzCgllcnJvcl9tYXJrX25vZGUuCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBGaXggaGFuZGxpbmcgb2YgbG9jYWwgdHlwZXMgc2hhZG93ZWQKCWJ5IGEgbm9uLXR5cGUgZGVjbC4gIFJlbW92ZSBvYnNvbGV0ZSBjb2RlLgoJKiBjcC10cmVlLmggKERFQ0xfRlVOQ1RJT05fU0NPUEVfUCk6IE5ldyBtYWNyby4KCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZwZXJtaXNzaXZlLgoJKiBkZWNsMi5jOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBBZGQgZmxhZ19wZXJtaXNzaXZlLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSWYgbmVpdGhlciAtZnBlcm1pc3NpdmUgb3IgLXBlZGFudGljCgl3ZXJlIHNwZWNpZmllZCwgc2V0IGZsYWdfcGVkYW50aWNfZXJyb3JzLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFR1cm4gZHJvcHBlZCBxdWFsaWZpZXIgbWVzc2FnZXMKCWJhY2sgaW50byBwZWR3YXJucy4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgoxOTk4LTEyLTA1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChjb2VyY2VfbmV3X3R5cGUpOiBVc2Ugc2FtZV90eXBlX3AuCgkoY29lcmNlX2RlbGV0ZV90eXBlKTogTGlrZXdpc2UuCgoJKiBjYWxsLmMgKGNoZWNrX2R0b3JfbmFtZSk6IFJldHVybiAxLCBub3QgZXJyb3JfbWFya19ub2RlLgoKMTk5OC0xMi0wNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBEaXNhYmxlICNwcmFnbWEgaW50ZXJmYWNlL2ltcGxlbWVudGF0aW9uCglpZiBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTLgoKCSogcHQuYyAoY2hlY2tfdGVtcGxhdGVfc2hhZG93KTogTmV3IGZuLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBVc2UgaXQuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBMaWtld2lzZS4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKHhyZWZfdGFnKTogRG9uJ3QgdHJ5IHRvIHVzZSAndCcgaWYgd2UncmUgZGVmaW5pbmcuCgoJKiBjYWxsLmMgKGNoZWNrX2R0b3JfbmFtZSk6IEp1c3QgcmV0dXJuIGFuIGVycm9yX21hcmtfbm9kZS4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogQ29tcGxhaW4gYWJvdXQgdXNpbmcgbm9uLXRlbXBsYXRlIGhlcmUuCgkqIHBhcnNlLnkgKGFwcGFyZW50X3RlbXBsYXRlX3R5cGUpOiBOb3QgaGVyZS4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQ29tcGxhaW4gYWJvdXQgc3BlY2lhbGl6YXRpb24KCXdpdGggQyBsaW5rYWdlLgoKCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZntuby0sfWltcGxpY2l0LWlubGluZS10ZW1wbGF0ZXMuCgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBEb24ndCBhc3N1bWUgdGhhdCBhbnkgaW50ZWdlcgoJYXJndW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgYSBjb25zdGFudC1leHByZXNzaW9uLgoKMTk5OC0xMi0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGhhbmRsZV91c2luZ19kZWNsKTogRml4IGNvbW1lbnQuICBEb24ndCBsb29rdXAKCWNvbnN0cnVjdG9ycyBpbiBiYXNlIGNsYXNzZXMuCgkodmFsaWRhdGVfbGhzKTogRml4IHR5cG8gaW4gY29tbWVudC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZF8xKTogRG9uJ3QgcmV0dXJuIGEgVVNJTkdfREVDTC4KCgkqIGNwLXRyZWUuaCAoREVDTF9BQ0NFU1MpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgoJKiBkZWNsLmMgKGV4cGFuZF9zdGF0aWNfaW5pdCk6IERvbid0IHNldCB0aGUgaW5pdGlhbGl6YXRpb24tZG9uZQoJZmxhZyB1bnRpbCB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZS4KCjE5OTgtMTItMDIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsMi5jICh2YWxpZGF0ZV9ub25tZW1iZXJfdXNpbmdfZGVjbCk6IENvbXBsYWluIGFib3V0IHVzaW5nCglkZWNsYXJhdGlvbnMgZm9yIGNsYXNzIG1lbWJlcnMuCgoxOTk4LTExLTI5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IFVzZSBzYW1lX3R5cGVfcC4KCgkqIGRlY2wuYyAoY2hlY2tfdGFnX2RlY2wpOiBEb24ndCB3YXJuIGFib3V0IG51bGwgZGVjbCBpbnNpZGUgYQoJY2xhc3MuCgoJKiBwdC5jICh1bmlmeSwgY2FzZSBPRkZTRVRfVFlQRSk6IFBhc3MgZG93biAnc3RyaWN0JyByYXRoZXIgdGhhbgoJVU5JRllfQUxMT1dfTk9ORS4KCShjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBVc2UgVFlQRV9QVFJNRU1GVU5DX0ZOX1RZUEUuCgkocmVzb2x2ZV9vdmVybG9hZGVkX3VuaWZpY2F0aW9uKTogU3RyaXAgYmFzZWxpbmtzLgoKRnJpIE5vdiAyNyAxMzowNzoyMyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnKytzcGVjLmM6IERvbid0IHByb3RvdHlwZSB4bWFsbG9jLgoKMTk5OC0xMS0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IFVzZSBUWVBFX1BUUl9QIHRvIGNoZWNrIGZvciBwb2ludGVycy4KCgkqIGRlY2wuYyAoY2hlY2tfdGFnX2RlY2wpOiBEbyBjb21wbGFpbiBhYm91dCBudWxsIGZyaWVuZCBkZWNsIGF0CglmaWxlIHNjb3BlLgoKMTk5OC0xMS0yNSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogbGV4LmMgKG1ha2VfbGFuZ190eXBlKTogQ2xlYXIgdGhlIHdob2xlIHN0cnVjdCBsYW5nX3R5cGUsIG5vdAoJb25seSB0aGUgZmlyc3QgbXVsdGlwbGUgb2Ygc2l6ZW9mIChpbnQpLgoKMTk5OC0xMS0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogQW4gZXhwbGljaXQgc3BlY2lhbGl6YXRpb24gb2YgYSBzdGF0aWMgZGF0YQoJbWVtYmVyIGlzIG9ubHkgYSBkZWZpbml0aW9uIGlmIGl0IGhhcyBhbiBpbml0aWFsaXplci4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBVc2UgY3BfZmluaXNoX2RlY2wgZm9yIHRoZSB0aHJvdyB0ZW1wLgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogUGFzcyBESVJFQ1RfQklORCBkb3duIGludG8KCWNwX2ZpbmlzaF9kZWNsLgoJKiBpbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBDaGVjayBmb3IgRElSRUNUX0JJTkQgaW5zdGVhZCBvZgoJREVDTF9BUlRJRklDSUFMLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBVc2UgYnVpbGRfZGVjbC4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBKdXN0IHVzZSBjb252ZXJ0LCBub3QKCWJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QuCgoJKiBsZXguYyAoaGFuZGxlX2dlbmVyaWNfcHJhZ21hKTogVXNlIHRva2VuX2J1ZmZlci4KCgkqIGRlY2wuYyAoY2hlY2tfdGFnX2RlY2wpOiBEb24ndCBjb21wbGFpbiBhYm91dCBudWxsIGZyaWVuZCBkZWNsLgoKMTk5OC0xMS0yNCAgRGF2ZSBQaXR0cyAgPGRwaXR0c0Bjb3p4LmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoREVNQU5HTEVSX1BST0cpOiBNb3ZlIHRoZSBvdXRwdXQgYXJndW1lbnRzIHRvIHRoZQoJZmlyc3QgcG9zaXRpb24uCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogVXNlIElTQUxQSEEuCgkocmVhZGVzY2FwZSk6IFVzZSBJU0dSQVBILgoJKHl5ZXJyb3IpOiBVc2UgSVNHUkFQSC4KCjE5OTgtMTEtMjQgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBzZWFyY2guYyAoZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzKTogRG8gbm90IHVzZSBpbml0aWFsCglDTEFTU1RZUEVfQUJTVFJBQ1RfVklSVFVBTFMuCgkqIHR5cGVjazIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBTaG93IGxvY2F0aW9uIG9mIGFic3RyYWN0CglkZWNsYXJhdGlvbi4KCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBVc2UKCUNMQVNTVFlQRV9BQlNUUkFDVF9WSVJUVUFMLCByYXRoZXIgdGhhbiByZWNhbGN1bGF0ZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9iaXRzKTogRG9uJ3QgYm90aGVyIHdvcmtpbmcgb3V0IHdoZXRoZXIKCWdldF9hYnN0cmFjdF92aXJ0dWFscyB3aWxsIGRvIGFueXRoaW5nLCBqdXN0IGRvIGl0LgoKMTk5OC0xMS0yNCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IFJlbW92ZSB1bnVzZWQgc3RhdGVtZW50LgoKMTk5OC0xMS0yNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IENhdGNoIGludmFsaWQgb3ZlcmxvYWRzLgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IEJ1aWxkIHVwIE9WRVJMT0FEcyBwcm9wZXJseSBmb3IgY29udmVyc2lvbiBvcHMuCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBIYW5kbGUgZ2V0dGluZyByZWFsIE9WRVJMT0FEcy4KCShhZGRfY29udmVyc2lvbnMpOiBMaWtld2lzZS4gIFJldmVydCBsYXN0IGNoYW5nZS4KCSogY2FsbC5jIChhZGRfY29udl9jYW5kaWRhdGUpOiBQYXNzIHRvdHlwZSB0byBhZGRfY2FuZGlkYXRlIGluc3RlYWQKCW9mIGZuLiAgRG9uJ3QgYWRkIGEgbmV3IGNhbmRpZGF0ZSBpZiB0aGUgbGFzdCBvbmUgd2FzIGZvciB0aGUgc2FtZQoJdHlwZS4KCShwcmludF96X2NhbmRpZGF0ZXMpOiBIYW5kbGUgZ2V0dGluZyBhIHR5cGUgYXMgYSBmdW5jdGlvbi4KCShqb3VzdCk6IElmIHdlIGdvdCB0d28gY29udmVyc2lvbiBjYW5kaWRhdGVzIHRvIHRoZSBzYW1lIHR5cGUsCglqdXN0IHBpY2sgb25lLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogTG9zZSAndGVtcGxhdGVzJy4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSGFuZGxlIGdldHRpbmcgcmVhbCBPVkVSTE9BRHMuCgoxOTk4LTExLTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IElmIHRoZXJlIGFyZSBlbGVtZW50cwoJdGhhdCBkb24ndCBoYXZlIGluaXRpYWxpemVycyBhbmQgdGhleSBuZWVkIHRvIGhhdmUgY29uc3RydWN0b3JzCglydW4sIHN1cHBseSB0aGVtIHdpdGggaW5pdGlhbGl6ZXJzLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQSBjbGFzcyB3aXRoIGEgMC13aWR0aCBiaXRmaWVsZCBpcwoJc3RpbGwgZW1wdHkuCgoxOTk4LTExLTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCB0cnkgdG8gZmlndXJlIG91dCB3aGF0CglzcGVjaWFsaXphdGlvbiB0byB1c2UgZm9yIGEgcGFydGlhbCBpbnN0YW50aWF0aW9uLiAgQ29ycmVjdAoJdHlwb3MgaW4gYSBjb3VwbGUgb2YgY29tbWVudHMuICBBdm9pZCBjYWxsaW5nIHVzZXNfdGVtcGxhdGVfcGFybXMKCW11bHRpcGxlIHRpbWVzLgoKMTk5OC0xMS0yMyAgQmVuamFtaW4gS29zbmlrICA8YmtvekBjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IEFkZCBjYWxsIHRvCglidWlsZF9tYW5nbGVkX0M5eF9uYW1lIGZvciBpbnRUSV90eXBlX25vZGVzLgoJKGJ1aWxkX21hbmdsZWRfQzl4X25hbWUpOiBBZGQgcHJvdG90eXBlLCBkZWZpbmUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgbmFtZXMgZm9yCglUSW1vZGVfdHlwZV9ub2RlLgoKMTk5OC0xMS0yMyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZCk6IFVwZGF0ZSBDTEFTU1RZUEVfREVDTEFSRURfQ0xBU1MuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBTZXQgdGhpbmdzIHVwIGZvciAwLXdpZHRoIGJpdGZpZWxkcwoJbGlrZSB3ZSBkbyBmb3Igb3RoZXJzLgoKCSogZGVjbC5jIChjaGVja190YWdfZGVjbCk6IE5ldyBmbi4KCShzaGFkb3dfdGFnKTogU3BsaXQgb3V0IGZyb20gaGVyZS4KCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBDYWxsIGl0LgoKMTk5OC0xMS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jOiBMb3NlIHdhcm5fYWJvdXRfcmV0dXJuX3R5cGUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBbHdheXMgY29tcGxhaW4gYWJvdXQgaW1wbGljaXQgaW50LCBleGNlcHQgZm9yCglgbWFpbiAoKSB7IC4uLiB9Jy4KCgkqIGRlY2wuYyAodGFnX25hbWUpOiBOZXcgZm4uCgkoeHJlZl90YWcpOiBDb21wbGFpbiBhYm91dCB1c2luZyB0eXBlZGVmLW5hbWUgYWZ0ZXIgY2xhc3Mta2V5LgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBBbHNvIGtlZXAgZ29pbmcgaWYgZnJvbV9hcnJheS4KCgkqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IEFsc28gaGFuZGxlIHRoZSBvdXRwdXQgb2YKCWJ1aWxkX29mZnNldF9yZWYuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIGNvbnN0cnVjdG9yX25hbWUgd2hlbiBjb21wYXJpbmcKCWZpZWxkIG5hbWUgYWdhaW5zdCBlbmNsb3NpbmcgY2xhc3MuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IExpa2V3aXNlLgoKMTk5OC0xMS0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBSZW1vdmUgY29kZSB0byBoYW5kbGUgS0VFUCA9PSAyLgoJKGZpbmlzaF9mdW5jdGlvbik6IERvbid0IGNvbmZ1c2UgQkxPQ0stb3JkZXIgd2hlbgoJcHJvY2Vzc2luZyBhIGRlc3RydWN0b3IuCgoxOTk4LTExLTIxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZXNfZm9yX3Bhcm1zKTogQ2FsbCBsYXlvdXRfZGVjbAoJYWZ0ZXIgd2UndmUgY29tcGxldGVkIHRoZSB0eXBlLgoKMTk5OC0xMS0yMSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogQWxsb3cgdXNpbmcgdGVtcGxhdGVzCglmcm9tIHRoZSBnbG9iYWwgbmFtZXNwYWNlLgoKMTk5OC0xMS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUhhbmRsZSBzcGVjaWZ5aW5nIHRlbXBsYXRlIGFyZ3MgdG8gbWVtYmVyIGZ1bmN0aW9uIHRlbXBsYXRlcy4KCSogdHJlZS5jIChidWlsZF9vdmVybG9hZCk6IEFsd2F5cyBjcmVhdGUgYW4gT1ZFUkxPQUQgZm9yIGEgdGVtcGxhdGUuCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBIYW5kbGUgZmluZGluZyBhbiBPVkVSTE9BRC4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IExpa2V3aXNlLgoJKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogU2VlIHRocm91Z2ggYSBiYXNlbGluay4KCSogcGFyc2UueSAoZG9faWQpOiBEb24ndCBjYWxsIGRvX2lkZW50aWZpZXIgaWYgd2UgZ290IGEgYmFzZWxpbmsuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUsIGNhc2UgVFJFRV9MSVNUKTogUmVjdXJzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBbGxvdyBhIGJvb2xlYW4gY29uc3RhbnQgZm9yIGFycmF5Cglib3VuZHMsIG9kZCBhcyB0aGF0IHNvdW5kcy4KCgkqIHB0LmMgKHVuaWZ5KTogQmUgbW9yZSBzdHJpY3QgYWJvdXQgbm9uLXR5cGUgcGFybXMsIGV4Y2VwdCBmb3IKCWFycmF5IGJvdW5kcy4KCShVTklGWV9BTExPV19JTlRFR0VSKTogTmV3IG1hY3JvLgoKMTk5OC0xMS0xOSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZS1sYW5nLmluIChtYW5kaXIpOiBSZXBsYWNlIGFsbCB1c2VzIG9mICQobWFuZGlyKSBieSAkKG1hbjFkaXIpLgoKMTk5OC0xMS0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBDYWxsCgltYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24gYmVmb3JlIHB1c2hfdGVtcGxhdGVfZGVjbC4KCURvbid0IGNhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIGZvciBhIHNwZWNpYWxpemF0aW9uLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogRG8gcmV0dXJuIGEgbWVtYmVyIHRlbXBsYXRlIGNsYXNzLgoJKiBkZWNsMi5jIChoYW5kbGVfY2xhc3NfaGVhZCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgY2xhc3Nlcy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBIHBhcm0gdHlwZSBuZWVkIG5vdCBiZSBjb21wbGV0ZS4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IEZpeCB0aGlua28uCgoxOTk4LTExLTE4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChQVFJNRU1fQ1NUX0NMQVNTKTogRml4IHR5cG8uCgkoZ2xvYmFsX2RlbGV0ZV9mbmRlY2wpOiBOZXcgdmFyaWFibGUuCgkqIGRlY2wuYyAoZ2xvYmFsX2RlbGV0ZV9mbmRlY2wpOiBEZWZpbmUgaXQuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTZXQgaXQuCgkqIGluaXQuYyAoYnVpbGRfYnVpbHRpbl9kZWxldGVfY2FsbCk6IFVzZSBpdC4KCSogdHJlZS5jIChtYXBjYXIpOiBSZWN1cnNpdmVseSBjYWxsIG1hcGNhciBmb3IgdGhlIHR5cGUgb2YgRVhQUgoJbm9kZXMuCgoxOTk4LTExLTE4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBBbHdheXMgY29tcGxhaW4gYWJvdXQgdW5yZXNvbHZlZAoJdHlwZS4KCgkqIHRyZWUuYyAobHZhbHVlX3BfMSk6IEFuIElORElSRUNUX1JFRiB0byBhIGZ1bmN0aW9uIGlzIGFuIGx2YWx1ZS4KCSogY2FsbC5jIChidWlsZF9vYmplY3RfY2FsbCk6IEFsc28gc3VwcG9ydCByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucy4KCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogRG9uJ3QgZGVjYXkgYSBmdW5jdGlvbgoJaWYgdGhlIHRhcmdldCBpcyBhIHJlZmVyZW5jZSB0byBmdW5jdGlvbi4KCgkqIHNlYXJjaC5jIChhZGRfY29udmVyc2lvbnMpOiBHZXQgYWxsIHRoZSBvdmVybG9hZHMgZnJvbSBhIGNsYXNzLgoKCSogZGVjbC5jIChncm9rX2N0b3JfcHJvcGVydGllcyk6IENvbXBsYWluIGFib3V0IGFueSBjb25zdHJ1Y3RvcgoJdGhhdCB3aWxsIHRha2UgYSBzaW5nbGUgYXJnIG9mIHRoZSBjbGFzcyB0eXBlIGJ5IHZhbHVlLgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBDYW4ndCBjcmVhdGUgb2JqZWN0cyBvZgoJYWJzdHJhY3QgY2xhc3NlcyB0aGlzIHdheS4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBNZW1iZXIgZnVuY3Rpb25zIG9mIGxvY2FsIGNsYXNzZXMgYXJlIG5vdAoJcHVibGljLgoKMTk5OC0xMS0xOCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoY2MxcGx1cyk6IEFkZCBkZXBlbmRlbmN5IG9uIGhhc2guby4KCjE5OTgtMTEtMTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfYWJzdHJhY3RfdmlydHVhbHMpOiBDb21wbGFpbiBhYm91dCB2aXJ0dWFscyB3aXRoCglubyBmaW5hbCBvdmVycmlkZXIuCgkqIHR5cGVjazIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBSZW1vdmUgaGFuZGxpbmcgZm9yIHZpcnR1YWxzCgl3aXRoIG5vIGZpbmFsIG92ZXJyaWRlci4KCSogY2xhc3MuYyAob3ZlcnJpZGVfb25lX3Z0YWJsZSk6IERvbid0IHNldCBERUNMX0FCU1RSQUNUX1ZJUlRVQUxfUAoJb24gdmlydHVhbHMgd2l0aCBubyBmaW5hbCBvdmVycmlkZXIuCgoJKiBsZXguYyAocmVpbml0X3BhcnNlX2Zvcl9ibG9jayk6IEFkZCBhIHNwYWNlIGFmdGVyIHRoZSBpbml0aWFsICc6Jy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHJlbW92ZSB6ZXJvLXdpZHRoIGJpdC1maWVsZHMgdW50aWwKCWFmdGVyIGxheW91dF90eXBlLgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IERvbid0IHNldF9tYW5nbGVkX25hbWVfZm9yX2RlY2wuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2Fub24pOiBDb21wbGFpbiBhYm91dCBub24tZmllbGRzLgoJKiBkZWNsMi5jIChidWlsZF9hbm9uX3VuaW9uX3ZhcnMpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBOb3JtYWwgZGF0YSBtZW1iZXJzIGNhbid0IGhhdmUgdGhlIHNhbWUKCW5hbWUgYXMgdGhlIGNsYXNzLCBlaXRoZXIuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IE5laXRoZXIgY2FuIG1lbWJlcnMgb2YgYW4KCWFub255bW91cyB1bmlvbi4KCjE5OTgtMTEtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfQUxJQVNfU0VUKTogRG9jdW1lbnQgbGFuZ3VhZ2UtZGVwZW5kZW50IHVzZXMuCgkoVFlQRV9CSU5GTyk6IExpa2V3aXNlLgoJKElTX0FHR1JfVFlQRSk6IFR3ZWFrLgoJKFNFVF9JU19BR0dSX1RZUEUpOiBOZXcgbWFjcm8uCgkoQ0xBU1NfVFlQRV9QKTogVHdlYWsuCgkobGFuZ190eXBlKTogR3JvdXAgbWFyayBiaXRmaWVsZHMgdG9nZXRoZXIuICBSZW1vdmUgbGluZW51bS4KCShDTEFTU1RZUEVfU09VUkNFX0xJTkUpOiBSZW1vdmUgbWFjcm8uCgkoQ0xBU1NUWVBFX01BUktFRF9OKTogTmV3IG1hY3JvLgoJKFNFVF9DTEFTU1RZUEVfTUFSS0VEX04pOiBMaWtld2lzZS4KCShDTEVBUl9DTEFTU1RZUEVfTUFSS0VEX04pOiBMaWtld2lzZS4KCShDTEFTU19UWVBFX01BUktFRF8qKTogVXNlIHRoZW0uCgkoU0VUX0NMQVNTVFlQRV9NQVJLRURfKik6IExpa2V3aXNlLgoJKENMRUFSX0NMQVNTVFlQRV9NQVJLRURfKik6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfSU5GTyk6IExpa2V3aXNlLgoJKFRZUEVfVEVNUExBVEVfSU5GTyk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNcyBhcyB3ZWxsLgoJKFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUpOiBVc2UgVFlQRV9CSU5GTyByYXRoZXIgdGhhbiBDTEFTU1RZUEVfU0laRS4KCSogY2xhc3MuYyAoY2xhc3NfY2FjaGVfb2JzdGFjayk6IE5ldyB2YXJpYWJsZS4KCShjbGFzc19jYWNoZV9maXJzdG9iaik6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX1NPVVJDRV9MSU5FLgoJKHB1c2hjbGFzcyk6IEZyZWUgdGhlIGNhY2hlLCB3aGVuIGFwcHJvcHJpYXRlLgoJKHBvcGNsYXNzKTogVGlkeS4KCShtYXliZV9wdXNoX2NhY2hlX29ic3RhY2spOiBVc2UgY2xhc3NfY2FjaGVfb2JzdGFjay4KCSogZGVjbC5jIChpbmNsdWRlIGhhc2guaCkuCgkodHlwZW5hbWVfaGFzaCk6IE5ldyBmdW5jdGlvbi4KCSh0eXBlbmFtZV9jb21wYXJlKTogTGlrZXdpc2UuCgkoYnVpbGRfdHlwZW5hbWVfdHlwZSk6IENoZWNrIHRoZSBoYXNoIHRhYmxlIHRvIGF2b2lkIGNyZWF0aW5nCglkdXBsaWNhdGVzLgoJKGJ1aWxkX3B0cm1lbWZ1bmNfdHlwZSk6IFVzZSBTRVRfSVNfQUdHUl9UWVBFLgoJKGdyb2tkZWNsYXJhdG9yKTogVXNlIENMQVNTX1RZUEVfUC4KCSh4cmVmX2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuICBEb24ndCBwdXQgY3VycmVudF9jbGFzc19yZWYgb24gdGhlCglwZXJtYW5lbnQgb2JzdGFjay4KCSogZXJyb3IuYyAoZHVtcF90eXBlX3JlYWwpOiBVc2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPCglhbmQgVFlQRV9USV9BUkdTLgoJKiBsZXguYyAobm90ZV9nb3Rfc2VtaWNvbG9uKTogVXNlIENMQVNTX1RZUEVfUC4KCShtYWtlX2xhbmdfdHlwZSk6IERvbid0IGNyZWF0ZSBUWVBFX0xBTkdfU1BFQ0lGSUMgYW5kIGFzc29jaWF0ZWQKCWZpZWxkcyBmb3IgdHlwZXMgb3RoZXIgdGhhbiBjbGFzcyB0eXBlcy4gIERvIGNsZWFyIFRZUEVfQUxJQVNfU0VUCglmb3IgdHlwZXMgb3RoZXIgdGhhbiBjbGFzcyB0eXBlcywgdGhvdWdoLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IFVzZSBDTEFTU19UWVBFX1AgYW5kCglURU1QTEFURV9URU1QTEFURV9QQVJNX1RFTVBMQVRFX0lORk8uCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IERvbid0IHNldAoJQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04uCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogVXNlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1fVEVNUExBVEVfSU5GTy4KCUNvZXJjZSBhcmd1bWVudHMgb24gdGhlIG1vbWVudGFyeSBvYnN0YWNrLgoJKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBVc2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTV9URU1QTEFURV9JTkZPLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsY3VsYXRlIHRlbXBsYXRlIGFyZ3VtZW50cyBvbiB0aGUKCW1vbWVudGFyeSBvYnN0YWNrLiAgVGlkeS4KCSh0c3Vic3RfdGVtcGxhdGVfYXJnX3ZlY3Rvcik6IFVzZSBtYWtlX3RlbXBfdmVjLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBQdXQgdGVtcGxhdGUgYXJndW1lbnRzIG9uIHRoZSBtb21lbnRhcnkKCW9ic3RhY2suCgkodHN1YnN0X2RlY2wpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBDb3B5IHRoZSBhcnJheSBib3VuZHMgaW5kZXggdG8gdGhlIHBlcm1hbmVudCBvYnN0YWNrCgliZWZvcmUgYnVpbGRpbmcgaW5kZXggdHlwZXMuICBVc2UgbmV3IG1hY3Jvcy4KCSh1bmlmeSk6IFVzZSBuZXcgbWFjcm9zLgoJKGRvX3R5cGVfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZuZmllbGRzXzEpOiBVc2UgbmV3IG1hY3Jvcy4KCShkZnNfcHVzaGRlY2xzKTogQnVpbGQgZW52ZWxvcGVzIG9uIHRoZSBjYWNoZSBvYnN0YWNrLgoJKGRmc19jb21wcmVzc19kZWNscyk6IFVzZSBuZXcgbWFjcm9zLgoJKHB1c2hfY2xhc3NfZGVjbHMpOiBCdWlsZCBvbiB0aGUgY2FjaGUgb2JzdGFjay4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90eXBlb2YpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04uCgkqIHNpZ24uYyAoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfb3JfcmVmZXJlbmNlX3R5cGUpOiBVc2UKCVNFVF9JU19BR0dSX1RZUEUuCgkqIHRyZWUuYyAobWFrZV9iaW5mbyk6IENoZWNrIENMQVNTX1RZUEVfUC4KCShjb3B5X3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBBZGp1c3QuCgkobWFrZV90ZW1wX3ZlYyk6IFVzZSBwdXNoX2V4cHJlc3Npb25fb2JzdGFjay4KCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBVc2UgbmV3IG1hY3Jvcy4KCShjb21wdHlwZXMpOiBMaWtld2lzZS4KCjE5OTgtMTEtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IEFkZCBkaWFnbm9zdGljcyBmb3IgaW52YWxpZCBhcnJheSwgcmVmZXJlbmNlCglhbmQgcG9pbnRlciB0byBtZW1iZXIgdHlwZXMuCgoxOTk4LTExLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogRG9uJ3QgZmF0YWwgdHdpY2UgaW4gYSByb3cuCgoJKiB0eXBlY2suYyAoY19leHBhbmRfc3RhcnRfY2FzZSk6IFVzZSBidWlsZF9leHByX3R5cGVfY29udmVyc2lvbi4KCVNpbXBsaWZ5LgoKCSogcGFyc2UueSAoc3RydWN0c3ApOiBGaXggY3V0LWFuZC1wYXN0ZSBlcnJvci4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogQ29tcGxhaW4gYWJvdXQgbm9uLWludGVncmFsIHNpemUuCgoJKiBwYXJzZS55ICh1bmFyeV9leHByKTogQ29tcGxhaW4gYWJvdXQgZGVmaW5pbmcgdHlwZXMgaW4gc2l6ZW9mLgoKCSogdHlwZWNrLmMgKGV4cHJfc2l6ZW9mKTogQ29tcGxhaW4gYWJvdXQgc2l6ZW9mIGFuIG92ZXJsb2FkZWQgZm4uCgoJKiBydHRpLmMgKGJ1aWxkX3hfdHlwZWlkKTogQ29tcGxhaW4gYWJvdXQgdHlwZWlkIHdpdGhvdXQKCWluY2x1ZGluZyA8dHlwZWluZm8+LgoJKGdldF90eXBlaWQpOiBMaWtld2lzZS4gIENvbXBsYWluIGFib3V0IHR5cGVpZCBvZiBpbmNvbXBsZXRlIHR5cGUuCgkoZ2V0X3RpbmZvX2ZuX2R5bmFtaWMpOiBMaWtld2lzZS4KCShnZXRfdHlwZWlkXzEpOiBOb3Qgc3RhdGljIGFueW1vcmUuCgkqIGV4Y2VwdC5jIChidWlsZF9laF90eXBlX3R5cGUpOiBVc2UgZ2V0X3R5cGVpZF8xLgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3RfMSk6IEdpdmUgZXJyb3JzIGZvciBkeW5hbWljX2Nhc3QgdG8KCWFtYmlndW91cyBvciBwcml2YXRlIGJhc2VzLiAgRml4IHdhcm5pbmcgZm9yIHJlZmVyZW5jZSBjYXN0LgoKMTk5OC0xMS0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9URU1QTEFURV9JTlNUQU5USUFURUQpOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUmVtb3ZlIHNwZWNpYWwtY2FzZSBjb2RlIHRvIGRlYWwgd2l0aAoJdGVtcGxhdGUgZnJpZW5kcywgYW5kIGp1c3QgZG8gdGhlIG9idmlvdXMgdGhpbmcuCgkqIHB0LmMgKHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogVHdlYWsgZm9yIGNsYXJpdHksIGFuZCBhbHNvIHRvCgljbGVhciBERUNMX0lOSVRJQUwgZm9yIGFuIGluc3RhbnRpYXRpb24gYmVmb3JlIGl0IGlzIG1lcmdlZCB3aXRoIGEKCXNwZWNpYWxpemF0aW9uLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRml4IGluZGVudGF0aW9uLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBIYW5kbGUgYm90aCBkZWZpbml0aW9ucyBpbiBmcmllbmQKCWRlY2xhcmF0aW9uIGFuZCBvdXRzaWRlIGZyaWVuZCBkZWNsYXJhdGlvbnMuCgkodHN1YnN0X2RlY2wpOiBEb24ndCBjbGVhciBERUNMX0lOSVRJQUwgZm9yIGFuIGluc3RhbnRpYXRpb24uCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBUd2VhayBhY2NvcmRpbmdseS4KCShpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UuCgoxOTk4LTExLTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwbHVzX2V4cGFuZF9leHByX3N0bXQpOiBQcm9tb3RlIHdhcm5pbmcgYWJvdXQgbmFrZWQKCW1lbWJlciBmdW5jdGlvbiByZWZlcmVuY2UgdG8gZXJyb3IuCgkqIGN2dC5jIChvY3BfY29udmVydCk6IENvbXBsYWluIGFib3V0IGNvbnZlcnRpbmcgYW4gb3ZlcmxvYWRlZAoJZnVuY3Rpb24gdG8gdm9pZC4KCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IEp1c3QgcmV0dXJuIGEgbG9uZSBzdGF0aWMgbWVtYmVyCglmdW5jdGlvbi4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBPbmx5IGNvbXBsYWluIGFib3V0IHJlYWwgQ09OU1RSVUNUT1JzLAoJbm90IGludGVybmFsIG9uZXMuCgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IEltcHJvdmUgZXJyb3IgaGFuZGxpbmcuCgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBDb21wbGFpbiBhYm91dCBtYWtpbmcgJ21haW4nIGEgdGVtcGxhdGUuCgoJKiB0eXBlY2suYyAoc3RyaW5nX2NvbnZfcCk6IERvbid0IGNvbnZlcnQgZnJvbSB3Y2hhcl90W10gdG8gY2hhciouCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogSGFuZGxlIGEgQklUX05PVF9FWFBSIGFyb3VuZCBhCglUWVBFX0RFQ0wgaW4gYSB0ZW1wbGF0ZS4KCjE5OTgtMTEtMTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAobXlfZnJpZW5kbHlfYWJvcnQpOiBBZGQgVVJMIGluIHRoZSBvdGhlciBjYXNlLCB0b28uCgoJKiBkZWNsLmMgKHN0cnVjdCBjcF9mdW5jdGlvbik6IEFkZCBuYW1lZF9sYWJlbF91c2VzLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IFNhdmUgaXQuCgkocG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBSZXN0b3JlIGl0LgoJKGRlZmluZV9sYWJlbCk6IEFsc28gY29tcGxhaW4gYWJvdXQganVtcGluZyBpbnRvIHRoZSBzY29wZSBvZgoJbm9uLVBPRCBvYmplY3RzIHRoYXQgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuCgkqIHRyZWUuYyAocG9kX3R5cGVfcCk6IE5ldyBmbi4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2xlYXIgVFlQRV9CRUlOR19ERUZJTkVEIHNvb25lci4KCSogcnR0aS5jIChzeW50aGVzaXplX3RpbmZvX2ZuKTogQ2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wgaGVyZS4KCShnZXRfdGluZm9fZm4pOiBOb3QgaGVyZS4KCSogcmVwby5jIChyZXBvX2dldF9pZCk6IEFib3J0IGlmIHdlIGdldCBjYWxsZWQgZm9yIGFuIGluY29tcGxldGUKCXR5cGUuCgoxOTk4LTExLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IE1ha2Ugc3VyZSBmaXJzdCBhcmd1bWVudCB0bwoJX19jcF9wdXNoX2V4Y2VwdGlvbiBpcyBvZiB0eXBlIGB2b2lkKicgdG8gYXZvaWQgc3B1cmlvdXMgZXJyb3IKCW1lc3NhZ2VzLgoKMTk5OC0xMS0xMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHJ5X29uZV9vdmVybG9hZCk6IFRha2Ugb3JpZ190YXJncyBhZ2Fpbi4gIE9ubHkgY2hlY2sgZm9yCgltaXNtYXRjaGVzIGFnYWluc3QgdGhlbTsgd2UgZG9uJ3QgY2FyZSB3aGF0IGEgcHJldmlvdXMgY2FsbCBmb3VuZC4KCShyZXNvbHZlX292ZXJsb2FkZWRfdW5pZmljYXRpb24pOiBBZGp1c3QuCgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogRG9uJ3QgcmV0dXJuIGFueXRoaW5nIGZvciBhIG5vbi10eXBlCglmaWVsZCBmcm9tIGEgZGVwZW5kZW50IHR5cGUuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZXNvbHZlIFNDT1BFX1JFRnMgb2YgdGhlIGN1cnJlbnQgY2xhc3MKCWluIGFuIGFycmF5IGRlY2xhcmF0b3IuCgkoc3RhcnRfZGVjbCk6IFB1c2ggaW50byB0aGUgY2xhc3MgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZSBmaWVsZC4KCjE5OTgtMTEtMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgUkVGRVJFTkNFX1RZUEUuCgoxOTk4LTExLTA4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsbG93IG5hbWVzcGFjZS1zY29wZWQgbWVtYmVycyBpZiB0aGV5CglhcmUgZnJpZW5kcy4KCjE5OTgtMTEtMDggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogRG9uJ3QgbWVzcyB3aXRoIHRoZSBnbG9iYWwgdmFsdWUgb2YgYW4KCXVuLW1hbmdsZWQgREVDTF9BU1NFTUJMRVJfTkFNRS4KCjE5OTgtMTEtMDMgIENocmlzdG9waGVyIEZheWxvciAgPGNnZkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFJlbW92ZSBDWUdXSU4gY29uZGl0aW9uYWwKCXNpbmNlIENZR1dJTiBpcyBub3cgYWJsZSB0byBkZWFsIHdpdGggdHJhcHBpbmcgc2lnbmFscy4KClNhdCBOb3YgIDcgMTU6NDg6MDIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3AtdHJlZS5oOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKiBleGNlcHRpb24uY2M6IEluY2x1ZGUgZ2Fuc2lkZWNsLmggKHNpbmNlIHdlIGRvbid0IGluY2x1ZGUgY29uZmlnLmgpCgkqIGcrK3NwZWMuYzogRG9uJ3QgaW5jbHVkZSBnYW5zaWRlY2wuaC4KCjE5OTgtMTEtMDYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGxhbmdfZGVjbF9mbGFncyk6IEFkZCBkZWZpbmVkX2luX2NsYXNzLiAgRGVjcmVhc2UKCXNpemUgb2YgZHVtbXkuCgkoREVDTF9ERUZJTkVEX0lOX0NMQVNTX1ApOiBOZXcgbWFjcm8uCgkoVEVNUExBVEVfUEFSTVNfRk9SX0lOTElORSk6IERvY3VtZW50LgoJKGNoZWNrX3N0YXRpY192YXJpYWJsZV9kZWZpbml0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogU2V0IERFQ0xfREVGSU5FRF9JTl9DTEFTU19QLCBpZgoJYXBwcm9wcmlhdGUuCgkoY2hlY2tfc3RhdGljX3ZhcmlhYmxlX2RlZmluaXRpb24pOiBTcGxpdCBvdXQgZnJvbSAuLi4KCShncm9rZGVjbGFyYXRvcik6IEhlcmUuCgkqIHB0LmMgKGNoZWNrX2RlZmF1bHRfdG1wbF9hcmdzKTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQgZnJvbSAuLi4KCShwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IEhlcmUuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBGaXggY29tbWVudC4KCjE5OTgtMTEtMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKENQX1RZUEVfQ09OU1RfUCk6IE1ha2UgezAsMX0tdmFsdWVkLgoJKENQX1RZUEVfVk9MQVRJTEVfUCk6IExpa2V3aXNlLgoJKENQX1RZUEVfUkVTVFJJQ1RfUCk6IExpa2V3aXNlLgoKMTk5OC0xMS0wMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSBidWlsZF9pbmRleF90eXBlLCBub3QgYnVpbGRfaW5kZXhfMl90eXBlLgoKMTk5OC0xMS0wMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IEJlIG1vcmUgaGVscGZ1bC4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IENhbGwgaW1wb3J0X2V4cG9ydF9jbGFzcy4KCgkqIGNwLXRyZWUuaCAoRU1QVFlfQ09OU1RSVUNUT1JfUCk6IENoZWNrICFUUkVFX0hBU19DT05TVFJVQ1RPUi4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBQcm9wYWdhdGUgVFJFRV9IQVNfQ09OU1RSVUNUT1IuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgoxOTk4LTExLTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBGaXggb2ZmLWJ5LW9uZSBlcnJvci4KCjE5OTgtMTEtMDIgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogcGFyc2UueSAoYXBwYXJlbnRfdGVtcGxhdGVfdHlwZSk6IE5ldyB0eXBlLgoJKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogVXNlIGl0LgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogT25lIG5ldyBjb25mbGljdC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgoxOTk4LTExLTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChDT01QQVJFX1NUUklDVCk6IE5ldyBtYWNyby4KCShDT01QQVJFX0JBU0UpOiBMaWtld2lzZS4KCShDT01QQVJFX1JFTEFYRUQpOiBMaWtld2lzZS4KCShDT01QQVJFX1JFREVDTEFSQVRJT04pOiBMaWtld2lzZS4KCShzYW1lX3R5cGVfcCk6IExpa2V3aXNlLgoJKHNhbWVfb3JfYmFzZV90eXBlX3ApOiBMaWtld2lzZS4KCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogVXNlIHRoZW0sIGluIHBsYWNlIG9mIGNvbXB0eXBlcwoJd2l0aCBudW1lcmljIGFyZ3VtZW50cy4KCShyZWZlcmVuY2VfYmluZGluZyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGlzX3N1YnNlcSk6IExpa2V3aXNlLgoJKGlzX3Byb3Blcmx5X2Rlcml2ZWRfZnJvbSk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgkoam91c3QpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoZGVsZXRlX2R1cGxpY2F0ZV9maWVsZHNfMSk6IExpa2V3aXNlLgoJKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4gIFJlbW92ZSAjaWYgMCdkIGNvZGUuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBMaWtld2lzZS4gIFVzZSBDT01QQVJFX1JFREVDTEFSQVRJT04gaGVyZS4KCShwdXNoZGVjbCk6IExpa2V3aXNlLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBMaWtld2lzZS4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLiAgQ2hlY2sgZm9yIGlsbGVnYWwgYXJyYXkgZGVjbGFyYXRpb25zLgoJKGdyb2twYXJtcyk6IExpa2V3aXNlLgoJKGdyb2tfb3BfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBMaWtld2lzZS4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9hZ2dyX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfdmVjX2luaXQpOiBMaWtld2lzZS4KCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlX2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKGlzX3NwZWNpYWxpemF0aW9uX29mKTogVXNlIENPTVBBUkVfKiBhbmQgbmV3IG1hY3Jvcy4KCShjb21wX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogTGlrZXdpc2UuCgkoY29lcmNlX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkodGVtcGxhdGVfYXJnc19lcXVhbCk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGNvdmFyaWFudF9yZXR1cm5fcCk6IExpa2V3aXNlLgoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTGlrZXdpc2UuCgkqIHNpZy5jIChtYXRjaF9tZXRob2RfdHlwZXMpOiBMaWtld2lzZS4KCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogTGlrZXdpc2UuCgkoY3BfdHJlZV9lcXVhbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBMaWtld2lzZS4KCShjb21wX2FycmF5X3R5cGVzKTogTGlrZXdpc2UuICBHZXQgaXNzdWVzIGludm9sdmluZyB1bmtub3duIGFycmF5Cglib3VuZHMgcmlnaHQuCgkoY29tcHR5cGVzKTogVXBkYXRlIGNvbW1lbnRzLiAgVXNlIG5ldyBmbGFncy4KCShjb21wX3RhcmdldF90eXBlcyk6IFVzZSBuZXcgbWFjcm9zLgoJKGNvbXBwYXJtcyk6IExpa2V3aXNlLgoJKGNvbXBfdGFyZ2V0X3Bhcm1zKTogTGlrZXdpc2UuCgkoc3RyaW5nX2NvbnZfcCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9pbmRpcmVjdF9yZWYpOiBMaWtld2lzZS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9yZWludGVycHJldF9jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfY29uc3RfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoJKGNvbXBfcHRyX3R0eXBlc19yZWFsKTogTGlrZXdpc2UuCgkocHRyX3JlYXNvbmFibHlfc2ltaWxhcik6IExpa2V3aXNlLgoJKGNvbXBfcHRyX3R0eXBlc19jb25zdCk6IExpa2V3aXNlLgoKMTk5OC0xMC0zMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3RfMSk6IEZpeCBjdXQtYW5kLXBhc3RlIGVycm9yLgoKMTk5OC0xMC0zMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBQYXNzIGludGVnZXJfemVyb19ub2RlLCBub3QKCWludGVnZXJfdHdvX25vZGUsIHRvIGJ1aWxkX3ZlY19kZWxldGUuCgkqIGluaXQuYyAoYnVpbGRfYXJyYXlfZWhfY2xlYW51cCk6IFJlbW92ZS4KCShleHBhbmRfdmVjX2luaXRfdHJ5X2Jsb2NrKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF92ZWNfaW5pdF9jYXRjaF9jbGF1c2UpOiBMaWtld2lzZS4KCShidWlsZF92ZWNfZGVsZXRlXzEpOiBEb24ndCBkZWFsIHdpdGggY2FzZSB0aGF0IGF1dG9fZGVsZXRlX3ZlYwoJbWlnaHQgYmUgaW50ZWdlcl90d29fbm9kZSBhbnltb3JlLgoJKGV4cGFuZF92ZWNfaW5pdCk6IFJld29yayBmb3IgaW5pdGlhbGl6YXRpb24tY29ycmVjdG5lc3MgYW5kCglleGNlcHRpb24tY29ycmVjdG5lc3MuCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogTWFrZSBtdXR1YWwgZXhjbHVzaXZpdHkKCW9mIGNhc2VzIG1vcmUgb2J2aW91cy4KCjE5OTgtMTAtMjkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IE9LLCBvbmx5IHdhcm4gaWYgbm90IGxleGluZy4KCVNpbXBsaWZ5IHN1Z2dlc3RlZCBmaXguCgoJKiBjcC10cmVlLmggKElERU5USUZJRVJfTUFSS0VEKTogTmV3IG1hY3JvLgoJKiBzZWFyY2guYyAobG9va3VwX2NvbnZlcnNpb25zKTogVXNlIGJyZWFkdGhfZmlyc3Rfc2VhcmNoLgoJKGFkZF9jb252ZXJzaW9ucyk6IEF2b2lkIGFkZGluZyB0d28gY29udmVyc2lvbnMgdG8gdGhlIHNhbWUgdHlwZS4KCShicmVhZHRoX2ZpcnN0X3NlYXJjaCk6IFdvcmsgd2l0aCBiYXNlIGJpbmZvcywgcmF0aGVyCgl0aGFuIGJpbmZvcyBhbmQgYmFzZSBpbmRpY2VzLgoJKGdldF92aXJ0dWFsX2Rlc3RydWN0b3IpOiBBZGp1c3QuCgkodHJlZV9oYXNfYW55X2Rlc3RydWN0b3JfcCk6IEFkanVzdC4KCShnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IEFkanVzdC4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogR2VuZXJhbGl6ZSBjaGVjayBmb3IgaW5jb3JyZWN0CgludW1iZXIgb2YgdGVtcGxhdGUgcGFybXMuCgkoaXNfbWVtYmVyX3RlbXBsYXRlX2NsYXNzKTogI2lmIDAuCgoxOTk4LTEwLTI5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNjMXBsdXMpOiBQdXQgQ1hYX09CSlMsIGFuZCB0aGVuY2UgQGV4dHJhX2N4eF9vYmpzQCwKCWxhc3QuCgoxOTk4LTEwLTI4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogbGV4LmM6IENhbGwgY2hlY2tfbmV3bGluZSBmcm9tIGxhbmdfaW5pdCBhbHdheXMuICBBZnRlcgoJY2FsbGluZyBjcHBfc3RhcnRfcmVhZCwgc2V0IHl5X2N1ciBhbmQgeXlfbGltIHRvIHJlYWQgZnJvbSB0aGUKCWNwcGxpYiB0b2tlbiBidWZmZXIuCgoxOTk4LTEwLTI4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgY29uc2lkZXIgdGVtcGxhdGVzIGZvciBhIG5vcm1hbAoJbWF0Y2guCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBjb21wbGFpbiBhYm91dCBub24tY29weQoJYXNzaWdubWVudCBvcHMgaW4gdW5pb24gbWVtYmVycy4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IERvbid0IHBhc3MgYXRfZW9mIHRvIGltcG9ydF9leHBvcnRfdnRhYmxlLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogRG9uJ3QgY2FsbCBpbXBvcnRfZXhwb3J0X2NsYXNzLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBEbyBpbXBvcnQvZXhwb3J0IHN0dWZmLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IExvc2UuCgkoZmluaXNoX2ZpbGUpOiBEb24ndCBjYWxsIGl0LgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IFJlbW92ZSBpdC4KCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogUmVzZXQgVFlQRV9IQVNfREVTVFJVQ1RPUiBoZXJlLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE5vdCBoZXJlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRG8gc2V0IERFQ0xfSU5JVElBTC4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogQ29tcGxhaW4gYWJvdXQgZGVmYXVsdCB0ZW1wbGF0ZQoJYXJncyBmb3IgZW5jbG9zaW5nIGNsYXNzZXMuCgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBUcmVhdCBjb252ZXJzaW9uIGZ1bmN0aW9ucwoJYXMgY29taW5nIGZyb20gdGhlIGFyZ3VtZW50J3MgY2xhc3MuCgkqIGNwLXRyZWUuaCAoREVDTF9DT05WX0ZOX1ApOiBOZXcgZm4uCgkoREVDTF9ERVNUUlVDVE9SX1ApOiBBbHNvIGNoZWNrIERFQ0xfTEFOR1VBR0UuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBVc2UgREVDTF9DT05WX0ZOX1AuCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9mdW5jdGlvbl9uYW1lKTogTGlrZXdpc2UuCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogTGlrZXdpc2UuCgkqIHB0LmMgKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGFkZF9jb252ZXJzaW9ucyk6IExpa2V3aXNlLgoKMTk5OC0xMC0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBBbHNvIGdlbmVyYXRlIExPT0tVUF9FWFBSIGZvciBSRVNVTFRfREVDTC4KCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEFsc28gY2hlY2sgZm9yIHVzaW5nIFJFU1VMVF9ERUNMCglmcm9tIG91dGVyIGNvbnRleHQuCgoxOTk4LTEwLTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFVzZSB0eXBlX3F1YWxzLCByYXRoZXIgdGhhbiBjb25zdHAsCgljb25zaXN0ZW50bHkuCgoxOTk4LTEwLTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBpbnN0YW50aWF0ZV90eXBlIGhlcmUuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBBbmQgaGVyZS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTm90IGhlcmUuCgkoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBObyBuZWVkIHRvIGNvbnMgdXAgYW4gT1ZFUkxPQUQuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBpbnN0YW50aWF0ZV90eXBlIGhlcmUuCgkoY29udmVydF90b19yZWZlcmVuY2UpOiBBbmQgaGVyZS4KCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogTm90IGhlcmUuCgkoZ3Jva3Bhcm1zKTogT3IgaGVyZS4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IE9yIGhlcmUuCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogVGFrZSB0aGUgYWRkcmVzcyBvZiBvdmVybG9hZGVkCglmdW5jdGlvbnMsIHRvby4KCShyZXF1aXJlX2luc3RhbnRpYXRlZF90eXBlKTogTG9zZS4KCShjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGhhbmRsZSB1bmtub3duIHR5cGVzIGhlcmUuCgkoYnVpbGRfY19jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfYmluYXJ5X29wKTogR3V0LgoJKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBEb24ndCByZXF1aXJlX2luc3RhbnRpYXRlZF90eXBlLgoJKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2Nhc3QpOiBEb24ndCBpbnN0YW50aWF0ZV90eXBlLgoJKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9jb25zdF9jYXN0KTogTGlrZXdpc2UuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCShidWlsZF9wdHJtZW1mdW5jKTogVXNlIHR5cGVfdW5rbm93bl9wLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBBbHNvIGRvIGRlZmF1bHRfY29udmVyc2lvbiBvbiBvdmVybG9hZGVkCglmdW5jdGlvbnMuICBIYW5kIHRoZW0gb2ZmIHRvIG9jcF9jb252ZXJ0LgoKMTk5OC0xMC0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IERlYWwgd2l0aCBURU1QTEFURV9ERUNMcyB0aGF0IGFyZQoJVkFSX0RFQ0xzLiAgSGFuZGxlIHZ0YWJsZXMgd2hvc2UgREVDTF9DT05URVhUIGlzIG5vdCBhIHR5cGUuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBVc2UgYnVpbGRfY3BsdXNfYXJyYXlfdHlwZSB0byBidWlsZAoJYXJyYXkgdHlwZXMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfZWhfc3BlYyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBTaW1wbGlmeSB2ZXJ5IHNsaWdodGx5LgoKMTk5OC0xMC0yNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IENvbXBsYWluIGFib3V0IGEgdmFyaWFibGUgdXNpbmcKCWNvbnN0cnVjdG9yIHN5bnRheCBjb21pbmcgYmFjayBudWxsIGZyb20gc3RhcnRfZGVjbC4KCgkqIGZyaWVuZC5jIChtYWtlX2ZyaWVuZF9jbGFzcyk6IENvbXBsYWluIGFib3V0IHRyeWluZyB0byBtYWtlCglhIG5vbi1jbGFzcyB0eXBlIGEgZnJpZW5kLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogU2V0IERFQ0xfSU5JVElBTCBmb3IgYSBkZWZuIGhlcmUuCgkoc3RhcnRfZnVuY3Rpb24pOiBOb3QgaGVyZS4KCjE5OTgtMTAtMjYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRGlzYWxsb3cgYGV4cGxpY2l0JyBpbiBhIGZyaWVuZCBkZWNsYXJhdGlvbi4KCjE5OTgtMTAtMjYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogT25seSBza2lwIGFub255bW91cyBmaWVsZHMKCWlmIHRoZXkgYXJlIGJpdGZpZWxkcy4KCgkqIGNwLXRyZWUuZGVmIChUWVBFT0ZfVFlQRSk6IE5ldyBjb2RlLgoJKiBlcnJvci5jIChkdW1wX3R5cGVfcmVhbCk6IEhhbmRsZSBpdC4KCSogcHQuYyAodHN1YnN0KTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoc2VhcmNoX3RyZWUpOiBMaWtld2lzZS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90eXBlb2YpOiBOZXcgZm4uCgkqIHBhcnNlLnkgKHR5cGVzcGVjKTogVXNlIGl0LgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgoxOTk4LTEwLTI2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjcC10cmVlLmggKEZPUk1BVF9WQkFTRV9OQU1FKTogTWFrZSBkZWZpbml0aW9uIHVuY29uZGl0aW9uYWwuCgoxOTk4LTEwLTI2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBEb24ndCBoYW5kbGUgcG1mIHJlZmVyZW5jZXMKCXNwZWNpYWxseS4KCgkqIGluaXQuYyAoYnVpbGRfbWVtYmVyX2NhbGwpOiBEb24ndCB0cnkgdG8gY29udmVydCB0byB0aGUgYmFzZSB0eXBlCglpZiBpdCdzIGFtYmlndW91cyBvciBwZWRhbnRpYy4KCgkqIHR5cGVjazIuYyAoY2hlY2tfZm9yX25ld190eXBlKTogT25seSBkZXBlbmQgb24gcGVkYW50aWMgZm9yCglDLXN0eWxlIGNhc3RzLgoKMTk5OC0xMC0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBTZXQgREVDTF9OT05DT05WRVJUSU5HX1AgZm9yIGFsbAoJbm9uLWNvbnZlcnRpbmcgY29uc3RydWN0b3JzLgoKMTk5OC0xMC0yNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGd4eGludC50ZXhpOiBDb3JyZWN0IGRvY3VtZW50YXRpb24gZm9yIG4sIE4sIFEsIGFuZCBCLgoKMTk5OC0xMC0yMyAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHBhcnNlLnkgKGNvbmRpdGlvbik6IENvbnZlcnQgVkFSX0RFQ0wgZnJvbSByZWZlcmVuY2UgdG8gaW5kaXJlY3QKCXJlZmVyZW5jZS4KCjE5OTgtMTAtMjMgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYyAoX19jcF9wb3BfZXhjZXB0aW9uKTogRnJlZSB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uCgl2YWx1ZSwgbm90IHRoZSBwb3RlbnRpYWxseSBjb2VyY2VkIG9uZS4KCjE5OTgtMTAtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBNYWtlZmlsZS5pbiAoaGFzaC5oKTogUnVuIGdwZXJmIHdoZW4gbmVjZXNzYXJ5LgoKCSogY3AtdHJlZS5oIChDUF9UWVBFX1JFQURPTkxZKTogUmVtb3ZlLgoJKENQX1RZUEVfVk9MQVRJTEUpOiBMaWtld2lzZS4KCShDUF9UWVBFX1FVQUxTKTogTmV3IG1hY3JvLgoJKENQX1RZUEVfQ09OU1RfUCk6IExpa2V3aXNlLgoJKENQX1RZUEVfVk9MQVRJTEVfUCk6IExpa2V3aXNlLgoJKENQX1RZUEVfUkVTVFJJQ1RfUCk6IExpa2V3aXNlLgoJKENQX1RZUEVfQ09OU1RfTk9OX1ZPTEFUSUxFX1ApOiBMaWtld2lzZS4KCShjcF9idWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUgdG8gLi4uCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkoY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wpOiBEZWNsYXJlLgoJKFNJR05BVFVSRV9QT0lOVEVSX05BTUVfRk9STUFUKTogTW9kaWZ5IHRvIGFsbG93IGByZXN0cmljdCcuCgkoU0lHTkFUVVJFX1JFRkVSRU5DRV9OQU1FX0ZPUk1BVCk6IExpa2V3aXNlLgoJKGNwX3R5cGVfcXVhbF9mcm9tX3JpZCk6IE5ldyBmdW5jdGlvbi4KCShjb21wcGFybXMpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlci4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoY3BfdHlwZV9xdWFscyk6IE5ldyBmdW5jdGlvbi4KCShhdF9sZWFzdF9hc19xdWFsaWZpZWRfcCk6IExpa2V3aXNlLgoJKG1vcmVfcXVhbGlmaWVkX3ApOiBMaWtld2lzZS4KCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IFJlcGxhY2UgY2FsbHMgdG8KCWNwX2J1aWxkX3R5cGVfdmFyaWFudCB3aXRoIGNwX2J1aWxkX3F1YWxpZmllZF90eXBlLiAgVXNlCglDUF9UWVBFX1FVQUxTIHRvIGdldCBxdWFsaWZpZXJzIGFuZCBhdF9sZWFzdF9hc19xdWFsaWZpZWRfcCB0bwoJY29tcGFyZSB0aGVtLiAgVXNlIENQX1RZUEVfKiBtYWNyb3MgdG8gY2hlY2sgcXVhbGlmaWVycy4KCShyZWZlcmVuY2VfYmluZGluZyk6IExpa2V3aXNlLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogTGlrZXdpc2UuCgkoYnVpbGRfb3Zlcl9jYWxsKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKG92ZXJyaWRlcyk6IENvbXBhcmUgYWxsIHF1YWxpZmllcnMsIG5vdCBqdXN0IGBjb25zdCcsCglvbiBtZXRob2QgZGVjbGFyYXRpb25zLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBNb3JlIENQX1RZUEVfUVVBTFMgY29udmVyc2lvbiwgZXRjLgoJKGNvbnZlcnRfcG9pbnRlcl90b19yZWFsKTogTGlrZXdpc2UuCgkodHlwZV9wcm9tb3Rlc190byk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGNoZWNrX2Zvcl91bmluaXRpYWxpemVkX2NvbnN0X3Zhcik6IE5ldyBmdW5jdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkoY3BfZmluaXNoX2RlY2wpOiBVc2UgY2hlY2tfZm9yX3VuaW5pdGlhbGl6ZWRfY29uc3RfdmFyLgoJKGdyb2tkZWNsYXJhdG9yKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4gIFVwZGF0ZSB0bwoJaGFuZGxlIGByZXN0cmljdCcuCgkoZ3Jva19jdG9yX3Byb3BlcnRpZXMpOiBMaWtld2lzZS4KCShncm9rX29wX3Byb3BlcnRpZXMpOiBMaWtld2lzZS4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHJldmVyX3N0YXRpY19tZW1iZXJfZm4pOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZ3Jva19tZXRob2RfcXVhbHMpOiBMaWtld2lzZS4KCShncm9rZmllbGQpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9yZWFkb25seV9vcl92b2xhdGlsZSk6IFJlbmFtZSB0byAuLi4KCShkdW1wX3F1YWxpZmllcnMpOiBOZXcgZnVuY3Rpb24uICBIYW5kbGUgYHJlc3RyaWN0Jy4KCShkdW1wX3R5cGVfcmVhbCk6IFVzZSBpdC4KCShkdW1wX2FnZ3JfdHlwZSk6IExpa2V3aXNlLgoJKGR1bXBfdHlwZV9wcmVmaXgpOiBMaWtld2lzZS4KCShkdW1wX3R5cGVfc3VmZml4KTogTGlrZXdpc2UuCgkoZHVtcF9mdW5jdGlvbl9kZWNsKTogTGlrZXdpc2UuCgkoY3ZfYXNfc3RyaW5nKTogTGlrZXdpc2UuCgkqIGd4eC5ncGVyZjogQWRkIF9fcmVzdHJpY3QgYW5kIF9fcmVzdHJpY3RfXy4KCSogZ3h4aW50LnRleGk6IERvY3VtZW50IGB1JyBhcyB1c2VkIGZvciBgX19yZXN0cmljdCcsIGFuZCBhIGZldwoJb3RoZXIgcHJldmlvdXNseSB1bmRvY3VtZW50ZWQgY29kZXMuCgkqIGhhc2guaDogUmVnZW5lcmF0ZWQuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdCk6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkoYnVpbGRfbWVtYmVyX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfMSk6IExpa2V3aXNlLgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IEFkZCBlbnRyeSBmb3IgUklEX1JFU1RSSUNULgoJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkoY3BfdHlwZV9xdWFsX2Zyb21fcmlkKTogRGVmaW5lLgoJKiBsZXguaCAoZW51bSByaWQpOiBBZGQgUklEX1JFU1RSSUNULgoJKiBtZXRob2QuYyAocHJvY2Vzc19tb2RpZmllcnMpOiBEZWFsIHdpdGggYHJlc3RyaWN0Jy4KCSogcGFyc2UueSAocHJpbWFyeSk6IE1vcmUgQ1BfVFlQRV9RVUFMUyBjb252ZXJzaW9uLCBldGMuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBNb3JlIENQX1RZUEVfUVVBTFMgY29udmVyc2lvbiwgZXRjLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCShjaGVja19jdl9xdWFsc19mb3JfdW5pZnkpOiBMaWtld2lzZS4KCSh1bmlmeSk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoYnVpbGRfaGVhZG9mKTogTGlrZXdpc2UuCgkoZ2V0X3RpbmZvX3Zhcik6IExpa2V3aXNlLgoJKGJ1aWRsX2R5bmFtaWNfY2FzdF8xKTogTGlrZXdpc2UuICBGaXggYHZvbGF0aWxlJyBoYW5kbGluZy4KCShleHBhbmRfY2xhc3NfZGVzYyk6IExpa2V3aXNlLgoJKGV4cGFuZF9hdHRyX2Rlc2MpOiBMaWtld2lzZS4KCShzeW50aGVzaXplX3RpbmZvX2ZuKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChjb3ZhcmlhbnRfcmV0dXJuX3ApOiBMaWtld2lzZS4gIEZpeCBgdm9sYXRpbGUnIGhhbmRsaW5nLgoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogTGlrZXdpc2UuCgkoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBMaWtld2lzZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV9uYW1lKTogVGFrZQoJdHlwZV9xdWFscywgbm90IGNvbnN0cCBhbmQgdm9sYXRpbGVwLgoJKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV90eXBlKTogTGlrZXdpc2UuCgkobWF0Y2hfbWV0aG9kX3R5cGVzKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJKGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX2FycmF5X3R5cGUpOiBMaWtld2lzZS4KCShjcF9idWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUgdG8gLi4uCgkoY3BfYnVpbGRfcXVhbGlmaWVkX3R5cGUpOiBOZXcgZnVuY3Rpb24uICBEZWFsIHdpdGggYF9fcmVzdHJpY3QnLgoJKGNhbm9uaWNhbF90eXBlX3ZhcmlhbnQpOiBNb3JlIENQX1RZUEVfUVVBTFMgY29udmVyc2lvbiwgZXRjLgoJKGJ1aWxkX2V4Y2VwdGlvbl92YXJpYW50KTogTGlrZXdpc2UuCgkobWFwY2FyKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChxdWFsaWZfdHlwZSk6IExpa2V3aXNlLgoJKGNvbW1vbl90eXBlKTogTGlrZXdpc2UuCgkoY29tcHR5cGVzKTogTGlrZXdpc2UuCgkoY29tcF9jdl90YXJnZXRfdHlwZXMpOiBMaWtld2lzZS4KCShhdF9sZWFzdF9hc19xdWFsaWZpZWRfcCk6IERlZmluZS4KCShtb3JlX3F1YWxpZmllZF9wKTogTGlrZXdpc2UuCgkoY29tcF9jdl9xdWFsaWZpY2F0aW9uKTogTW9yZSBDUF9UWVBFX1FVQUxTIGNvbnZlcnNpb24sIGV0Yy4KCShjb21wcGFybXMpOiBMaWtld2lzZS4KCShpbmxpbmVfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKHN0cmluZ19jb252X3ApOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfaW5kaXJlY3RfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfYXJyYXlfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfdW5hcnlfb3ApOiBMaWtld2lzZS4KCShidWlsZF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCgkoYnVpbGRfc3RhdGljX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9jX2Nhc3QpOiBMaWtld2lzZS4KCShidWlsZF9tb2RpZnlfZXhwcik6IExpa2V3aXNlLgoJKGNvbnZlcnRfRm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCShjb21wX3B0cl90dHlwZXNfcmVhbCk6IExpa2V3aXNlLgoJKGNwX3R5cGVfcXVhbHMpOiBOZXcgZnVuY3Rpb24uCgoxOTk4LTEwLTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKENQX1RZUEVfUkVBRE9OTFkpOiBOZXcgbWFjcm8gdG8gaGFuZGxlIGFycmF5cy4KCShDUF9UWVBFX1ZPTEFUSUxFKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgdGhlbS4KCSogdHJlZS5jIChjYW5vbmljYWxfdHlwZV92YXJpYW50KTogTGlrZXdpc2UuCgoxOTk4LTEwLTIyICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZCk6IFB1c2ggaW50byBjbGFzcyB3aGlsZSBwYXJzaW5nIHRoZQoJYmFzZSBjbGFzcyBsaXN0LgoJKiBkZWNsMi5jIChwdXNoX3Njb3BlLCBwb3Bfc2NvcGUpOiBOZXcgZnVuY3Rpb25zLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgdGhlbS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IERlbGF5IGNsZWFudXAgdW50aWwgZW5kIG9mIGZ1bGwgZXhwcmVzc2lvbi4KCjE5OTgtMTAtMjEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogVXNlIG9mIGEgdHlwZSBoZXJlIGlzIGFuIGVycm9yLgoKMTk5OC0xMC0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCVJldmFtcCByZWZlcmVuY2VzIHRvIG1lbWJlciBmdW5jdGlvbnMuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBDYWxsIGJ1aWxkX2NvbXBvbmVudF9yZWYgZm9yIGEKCXJlZmVyZW5jZSB0byBhIG1lbWJlciBmdW5jdGlvbi4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBPbmx5IHJldHVybiBhIHNpbmdsZSBmdW5jdGlvbgoJaWYgaXQncyBzdGF0aWMuICBPdGhlcndpc2UsIHJldHVybiBhIENPTVBPTkVOVF9SRUYuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIGEgQ09NUE9ORU5UX1JFRi4KCShidWlsZF91bmFyeV9vcCk6IEhhbmRsZSBhbGwgdW5rbm93bi10eXBlIHRoaW5ncy4KCSogZGVjbDIuYyAoYXJnX2Fzc29jKTogSGFuZGxlIENPTVBPTkVOVF9SRUYuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBDb21wbGFpbiBpZiB0aGUgZnVuY3Rpb24gd2UgZ2V0IGlzIGEKCW5vbnN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uICBSZW1vdmUgY29kZSBmb3IgZmluZGluZyAiY29tcGF0aWJsZSIKCWZ1bmN0aW9ucy4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgTk9QX0VYUFIuCgkqIHRyZWUuYyAoYnVpbGRfZHVtbXlfb2JqZWN0KTogTmV3IGZuLgoJKG1heWJlX2R1bW15X29iamVjdCk6IE5ldyBmbi4KCShpc19kdW1teV9vYmplY3QpOiBOZXcgZm4uCgkqIGNwLXRyZWUuaDogRGVjbGFyZSB0aGVtLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogVXNlIG1heWJlX2R1bW15X29iamVjdC4KCSogZXJyb3IuYyAoZHVtcF9leHByLCBjYXNlIE9GRlNFVF9SRUYpOiBVc2UgaXNfZHVtbXlfb2JqZWN0LgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogVXNlIG1heWJlX2R1bW15X29iamVjdCBhbmQKCWlzX2R1bW15X29iamVjdC4KCShidWlsZF9vZmZzZXRfcmVmKTogVXNlIG1heWJlX2R1bW15X29iamVjdC4KCShyZXNvbHZlX29mZnNldF9yZWYpOiBVc2UgaXNfZHVtbXlfb2JqZWN0LgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogQ2FsbCBidWlsZF9kdW1teV9vYmplY3QuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBDYWxsIGlzX2R1bW15X29iamVjdC4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfYWRkcik6IE1ha2Ugc3VyZSBmaWVsZCBpcyBhIGZpZWxkLgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBEZWxldGUgb2Jzb2xldGUgY29kZS4KCgkqIHB0LmMgKHRzdWJzdCwgVEVNUExBVEUqUEFSTSopOiBBYm9ydCBpZiB3ZSBkb24ndCBoYXZlIGFueSBhcmdzLgoKMTk5OC0xMC0xOCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogRml4IHVzaW5nLWRpcmVjdGl2ZXMgb2YKCXN0ZCBpZiBzdGQgaXMgaWdub3JlZC4KCjE5OTgtMTAtMTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBGaXggdGhpbmtvLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEVtYmVkZGVkIGF0dHJzIGJpbmQgdG8gdGhlIHJpZ2h0LAoJbm90IHRoZSBsZWZ0LgoKCSogcGFyc2UueSAoZm4uZGVmMik6IEZpeCAnYXR0cnMnIGZvcm1hdC4KCjE5OTgtMTAtMTggIEFsYXN0YWlyIEouIEhvdWdodG9uICA8YWpoOEBkb2MuaWMuYWMudWs+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogVXBkYXRlLgoJKiBwYXJzZS55IChleHByX29yX2RlY2xhcmF0b3JfaW50ZXJuKTogTmV3IHJ1bGUuCgkoZXhwcl9vcl9kZWNsYXJhdG9yLCBkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IsIHByaW1hcnksCglmdW5jdGlvbmFsX2Nhc3QpOiBVc2UgaXQuCgkobm90eXBlX2RlY2xhcmF0b3JfaW50ZXJuKTogTmV3IHJ1bGUuCgkobm90eXBlX2RlY2xhcmF0b3IsIGNvbXBsZXhfbm90eXBlX2RlY2xhcmF0b3IpOiBVc2UgaXQuCgoxOTk4LTEwLTE3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBTZXQgREVDTF9DT05URVhUIHRvIG5hbWVzcGFjZSBpZiBhcHByb3ByaWF0ZS4KCShncm9rdmFyZGVjbCk6IExpa2V3aXNlLgoKU2F0IE9jdCAxNyAyMzoyNzoyMCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjbGFzcy5jIChtYWtlX21ldGhvZF92ZWMpOiBDYXN0IDFzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIChQVFIpLgoJKGFkZF9tZXRob2QpOiBMaWtld2lzZSBmb3IgYXJndW1lbnRzIDEgJiAyIG9mIGBiY29weScuCgoJKiBkZWNsLmMgKHNpZ25hbF9jYXRjaCk6IE1hcmsgd2l0aCBBVFRSSUJVVEVfTk9SRVRVUk4uCgoJKiBwdC5jIChwcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDYXN0IDFzdCBhcmd1bWVudCBvZgoJYGJ6ZXJvJyB0byAoUFRSKS4KCgkqIHRyZWUuYyAoYnVpbGRfYmFzZV9maWVsZHMpOiBDYXN0IGBiYXNlX2FsaWduJyB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoxOTk4LTEwLTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogSGFuZGxlIHRlbXBsYXRlIHBhcmFtZXRlcnMgZm9yIG1lbWJlcgoJdGVtcGxhdGVzIHdoZXJlIHNhaWQgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlCglzdXJyb3VuZGluZyBjbGFzcy4KCgkqIGRlY2wuYyAoZXhwYW5kX3N0YXRpY19pbml0KTogQnVpbGQgY2xlYW51cHMgYmVmb3JlIGVudGVyaW5nIHRoZQoJYW5vbnltb3VzIGZ1bmN0aW9uIHVzZWQgdG8gZG8gdGhlbSB0byBhdm9pZCBhY2Nlc3MtY2hlY2tpbmcKCWNvbmZ1c2lvbi4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEFkZCBiYWNrIGNhbGwgdG8gY3BsdXNfZGVjbF9hdHRyaWJ1dGVzCglhY2NpZGVudGFsbHkgcmVtb3ZlZCBieSBwcmV2aW91cyBjaGFuZ2UsIGFuZCBtYWtlIERFQ0xfUlRMIGhlcmUuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBEb24ndCBtYWtlIERFQ0xfUlRMIGhlcmUuCgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogRG9uJ3QgZXhhbWluZSB1bmluc3RhbnRpYXRlZAoJZGVmYXVsdCBhcmd1bWVudHMuCgoxOTk4LTEwLTE2ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IEZpeCB1bmFsaWduZWQgYWNjZXNzIG9mIHdjaGFyX3QuCgoxOTk4LTEwLTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoYWRkX21ldGhvZCk6IEZpeCBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgcHJldmlvdXMKCWNoYW5nZXMuICBDaGVjayBmb3IgZHVwbGljYXRlIG1ldGhvZCBkZWNsYXJhdGlvbnMgaGVyZS4KCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IEhhbmRsZSBGVU5DVElPTl9ERUNMIHZzIFRFTVBMQVRFX0RFQ0wKCWNvcnJlY3RseTsgc3VjaCB0aGluZ3MgbmV2ZXIgbWF0Y2guCgkoZ3Jva2ZuZGVjbCk6IERvbid0IGxvb2sgZm9yIGR1cGxpY2F0ZSBtZXRob2RzIGhlcmUuCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBEb24ndCBhc3N1bWUgbmFtZXMgYXJlIG1hbmdsZWQuCglEb24ndCBhZGQgYm9ndXMgbWVtYmVyIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyB0byBhIGNsYXNzIGJlZm9yZSB0aGUKCWNsYXNzIHR5cGUgaXMgY29tcGxldGUuCgkoZ3Jva2ZpZWxkKTogUmVmb3JtYXQgZXJyb3IgbWVzc2FnZS4KCSogbWV0aG9kLmMgKHNldF9tYW5nbGVkX25hbWVfZm9yX2RlY2wpOiBEb24ndCBtYW5nbGUgbmFtZXMgd2hpbGUKCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4KCjE5OTgtMTAtMTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBDb21wbGFpbiBhYm91dCBhIHBvaW50ZXIgdG8gZGF0YQoJbWVtYmVyLCB0b28uCgkqIHR5cGVjazIuYyAoYnVpbGRfbV9jb21wb25lbnRfcmVmKTogRG9uJ3QgaW5kaXJlY3QgYSBwb2ludGVyIHRvCglkYXRhIG1lbWJlci4KCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBEb24ndCB1bmRvIHRoZSBhYm92ZS4KCgkqIGNwLXRyZWUuaCAoREVDTF9DX0JJVF9GSUVMRCwgU0VUX0RFQ0xfQ19CSVRfRklFTEQpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCBsYW5nX2RlY2xfZmxhZ3MpOiBBZGQgYGJpdGZpZWxkJy4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIERFQ0xfQ19CSVRfRklFTEQgaW5zdGVhZCBvZgoJREVDTF9CSVRfRklFTEQuCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCwgZ3Jva19hbGlnbm9mKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X2FkZHIsIGV4cHJfc2l6ZW9mKTogTGlrZXdpc2UuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEb24ndCBjcmFzaCBpZiB0YWtpbmcgdGhlIGFkZHJlc3MKCXJldHVybnMgZXJyb3JfbWFya19ub2RlLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogQWxzbyBjaGVjayBjdHlwZSB3aGVuIGNoZWNraW5nIGZvciA6Om1haW4oKS4KCjE5OTgtMTAtMTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IDo6bWFpbiBhbmQgX19idWlsdGluXyogZ2V0IEMgbGlua2FnZS4KCURvIG1hbmdsaW5nIGhlcmUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBJbnN0ZWFkIG9mIGhlcmUuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBMb3NlIHNwZWNpYWwgaGFuZGxpbmcgb2YgOjptYWluIGFuZAoJX19idWlsdGluXyouCgkqIGNwLXRyZWUuaCAoREVDTF9NQUlOX1ApOiBDaGVjayBmb3IgQyBsaW5rYWdlLgoKCSogc3Bldy5jICh5eWxleCk6IENsZWFyIGxvb2tpbmdfZm9yX3R5cGVuYW1lIGlmIHdlIGdvdAoJJ2VudW0geyAuLi4gfTsnLgoKMTk5OC0xMC0xNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKG1heWJlX3dhcm5fYWJvdXRfb3Zlcmx5X3ByaXZhdGVfY2xhc3MpOiBJbXByb3ZlIGVycm9yCgltZXNzYWdlcyBmb3IgY2xhc3Mgd2l0aCBvbmx5IHByaXZhdGUgY29uc3RydWN0b3JzLgoKCSogY3AtdHJlZS5kZWYgKFRZUEVOQU1FX1RZUEUpOiBBZGQgdG8gZG9jdW1lbnRhdGlvbi4KCSogY3AtdHJlZS5oIChUWVBFTkFNRV9UWVBFX0ZVTExOQU1FKTogRG9jdW1lbnQuCgkoYnVpbGRfdHlwZW5hbWVfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChidWlsZF90eXBlbmFtZV90eXBlKTogQnJva2VuIG91dCBmcm9tIC4uLgoJKG1ha2VfdHlwZW5hbWVfdHlwZSk6IFVzZSBpdC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoKMTk5OC0xMC0xNCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogQ2hlY2sgYWdhaW5zdCB0eXBlX3JlZmVycmVkX3RvLgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogQ2hlY2sgZm9yIGRlY2xhcmF0b3IgbmFtZSBiZWZvcmUgYnVpbGRpbmcKCURFQ0xfQVNTRU1CTEVSX05BTUUuCgoxOTk4LTEwLTE0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogQWRkIGNvbW1lbnQuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBtYXJrIHRoZSBfVFlQRSBub2RlIGZvcgoJbWVtYmVyIGNsYXNzIHRlbXBsYXRlcyBhcyBhbiBpbnN0YW50aWF0aW9uLgoKMTk5OC0xMC0xNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogRml4IG15IHRoaW5rby4KCjE5OTgtMTAtMTMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRpbmZvMi5jYyAoZmFzdF9jb21wYXJlKTogUmVtb3ZlLgoJKGJlZm9yZSk6IEp1c3QgdXNlIHN0cmNtcC4KCSogdGluZm8uY2MgKG9wZXJhdG9yPT0pOiBKdXN0IHVzZSBzdHJjbXAuCgoxOTk4LTEwLTEzICBLbGF1cy1HZW9yZyBBZGFtcyAgPEtsYXVzLUdlb3JnLkFkYW1zQGNoZW1pZS51bmkta2FybHNydWhlLmRlPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogRG9uJ3QgY2hlY2sgZm9yIGxpbmthZ2UgaW4gYGV4dGVybiAiQyInCglkZWNsYXJhdGlvbnMuCgoxOTk4LTEwLTEzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChzcGVjaWFsaXphdGlvbnNfb2Zfc2FtZV90ZW1wbGF0ZV9wKTogUmVtb3ZlLgoJKiBzZWFyY2guYyAoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBEb24ndCB1c2UgaXQuCgkoZ2V0X3RlbXBsYXRlX2Jhc2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkqIHB0LmMgKHNwZWNpYWxpemF0aW9uc19vZl9zYW1lX3RlbXBsYXRlX3ApOiBSZW1vdmUuCgkodW5pZnkpOiBEb24ndCB1c2UgaXQuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRmluZCB0aGUgY29ycmVjdCBwYXJlbnQgd2hlbiBzZXR0aW5nCglDTEFTU1RZUEVfVElfVEVNUExBVEUuCgoxOTk4LTEwLTEyICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0aW5mby5jYyAob3BlcmF0b3I9PSk6IEFsd2F5cyBjb21wYXJlIG5hbWVzLgoKMTk5OC0xMC0xMiAgSGVybWFuIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogZGVjbC5jIChzdGFydF9mdW5jdGlvbik6IEZpeCBjdXQtYW5kLXBhc3RlIGVycm9yLgoKMTk5OC0xMC0xMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5jL3R5cGVpbmZvOiBBZGQgI3ByYWdtYSBpbnRlcmZhY2UuCgkob3BlcmF0b3IhPSk6IEp1c3QgY2FsbCBvcGVyYXRvcj09LgoJKiB0aW5mby5jYzogQWRkICNwcmFnbWEgaW1wbGVtZW50YXRpb24uCgkob3BlcmF0b3I9PSk6IE1vdmUgZnJvbSBpbmMvdHlwZWluZm8gYW5kIHRpbmZvMi5jYy4KCUNoZWNrIF9fQ09NTU9OX1VOUkVMSUFCTEUgaW5zdGVhZCBvZiBfV0lOMzIuCgoJKiB0eXBlY2syLmMgKG15X2ZyaWVuZGx5X2Fib3J0KTogQWRkIFVSTC4KCjE5OTgtMTAtMTIgIEFsYXN0YWlyIEouIEhvdWdodG9uICA8YWpoOEBkb2MuaWMuYWMudWs+CgoJKiBkZWNsLmMgKHN0YXJ0X21ldGhvZCk6IEFkZGVkIGV4dHJhIHBhcmFtZXRlciBmb3IgYXR0cmlidXRlcy4KCSogY3AtdHJlZS5oIChzdGFydF9tZXRob2QpOiBVcGRhdGUgcHJvdG90eXBlLgoJKiBwYXJzZS55IChmbi5kZWYyKTogVXBkYXRlIHN0YXJ0X21ldGhvZCBwYXJhbWV0ZXIgbGlzdC4KCjE5OTgtMTAtMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKHNwZWNpYWxpemF0aW9uc19vZl9zYW1lX3RlbXBsYXRlX3ApOiBEZWNsYXJlLgoJKiBwdC5jIChzcGVjaWFsaXphdGlvbnNfb2Zfc2FtZV90ZW1wbGF0ZV9wKTogTmV3IGZ1bmN0aW9uLgoJKHVuaWZ5KTogVXNlIGl0LgoJKiBzZWFyY2guYyAoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBVc2UgaXQuCgkoZ2V0X3RlbXBsYXRlX2Jhc2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgoxOTk4LTEwLTEwICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBkZWNsMi5jIChzdGFydF9vYmplY3RzKTogQWRkIG5ldyB2YXJpYWJsZSBgam9pbmVyJyBhbmQKCWluaXRpYWxpemUgaXQgcHJvcGVybHkuCgoxOTk4LTEwLTA5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogVHdlYWsgdG8gbWF0Y2ggMTk5OC0xMC0wNwoJY2hhbmdlIHRvIHZ0YWJsZSB0eXBlcy4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IEF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBjYXVzZWQgYnkKCTE5OTgtMTAtMDMgY2hhbmdlLgoKMTk5OC0xMC0wOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocmVzb2x2ZV9vdmVybG9hZGVkX3VuaWZpY2F0aW9uKTogTmV3IGZuLgoJKHRyeV9vbmVfb3ZlcmxvYWQpOiBMaWtld2lzZS4KCSh1bmlmeSk6IERvbid0IGZhaWwgb24gdW5rbm93biB0eXBlLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLiAgVXNlIHJlc29sdmVfb3ZlcmxvYWRlZF91bmlmaWNhdGlvbgoJdG8gaGFuZGxlIGFuIG92ZXJsb2FkZWQgYXJndW1lbnQuCgkodGVtcGxhdGVfYXJnc19lcXVhbCk6IFNwbGl0IG91dC4uLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IEZyb20gaGVyZS4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBBbHNvIGFsbG93IGEgdGVtcGxhdGUgd2l0aCBtb3JlCglwYXJtcyB0aGFuIHdlcmUgZXhwbGljaXRseSBzcGVjaWZpZWQuCgkqIGNwLXRyZWUuaDogQWRkIHRlbXBsYXRlX2FyZ3NfZXF1YWwuCgkqIGNhbGwuYyAocmVzb2x2ZV9hcmdzKTogUmVtb3ZlIFRFTVBMQVRFX0lEX0VYUFIgY29kZS4KClRodSBPY3QgIDggMTU6NTg6MzAgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2FzbV9zdG10KTogUmV2ZXJ0IG15IDE5OTgtMDktMjgKCWNoYW5nZS4KClRodSBPY3QgIDggMDY6MDA6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrLmMgKHVuc2lnbmVkX3R5cGUpOiBPbmx5IHJldHVybiBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKHNpZ25lZF90eXBlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBPbmx5IGRlY2xhcmUKCXdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogT25seSBjcmVhdGUgVEl0eXBlIG5vZGVzIHdoZW4KCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgPj0gNjQgYml0cy4KCSogY3AtdHJlZS5oIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IE9ubHkgZGVjbGFyZQoJd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgpXZWQgT2N0ICA3IDEyOjMyOjQ0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChoYXNoLmgpOiBBZGQgLUwgS1ItQyAtRiAnLCAwLCAwJyBmbGFncyB0byBncGVyZi4KCShneHguZ3BlcmYpOiBVcGRhdGUgY29tbWVudHMgZGVzY3JpYmluZyBpbnZvY2F0aW9uIGZsYWdzLgoJKGhhc2guaCk6IFJlZ2VuZXJhdGUgdXNpbmcgZ3BlcmYgMi43LjEgKDE5OTgxMDA2IGVnY3MpLgoKMTk5OC0xMC0wNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEFkZCBjb21tZW50YXJ5IG9uIHByZXZpb3VzIGNoYW5nZS4KCgkqIGNwLXRyZWUuaCAodnRibF9wdHJfdHlwZV9ub2RlKTogTmV3IHZhcmlhYmxlLgoJKiBjbGFzcy5jIChidWlsZF92dGJsX3JlZik6IERvbid0IGluZGlyZWN0IHRocm91Z2ggdGhlIHZwdHI7IGl0J3MKCWFscmVhZHkgb2YgdGhlIHJpZ2h0IHR5cGUuCgkoZmluaXNoX3N0cnVjdF8xKTogTWFrZSB0aGUgdnB0ciBiZSBvZiB0eXBlIHZ0YmxfcHRyX3R5cGVfbm9kZS4KCVNpbXBsaWZ5IGNvZGUgdG8gZ3JvdyB2dGFibGUuCgkqIGRlY2wuYyAodnRibF9wdHJfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBpdC4KCjE5OTgtMTAtMDYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmRlZiAoUFRSTUVNX0NTVCk6IE5ldyB0cmVlIG5vZGUuCgkqIGNwLXRyZWUuaCAocHRybWVtX2NzdCk6IE5ldyB0eXBlLgoJKGxhbmdfdHlwZSk6IFJlbW92ZSBsb2NhbF90eXBlZGVjbHMuCgkoZHVtbXkpOiBJbmNyZWFzZSB0byAxMiBiaXRzIGZyb20gMTEuCgkoQ0xBU1NUWVBFX0xPQ0FMX1RZUEVERUNMUyk6IFJlbW92ZS4KCShQVFJNRU1fQ1NUX0NMQVNTKTogTmV3IG1hY3JvLgoJKFBUUk1FTV9DU1RfTUVNQkVSKTogTGlrZXdpc2UuCgkoY3VycmVudF9hY2Nlc3Nfc3BlY2lmaWVyKTogTmV3IHZhcmlhYmxlLgoJKGN1cnJlbnRfY2xhc3NfdHlwZSk6IFJlbW92ZSBkdXBsaWNhdGUgZGVjbGFyYXRpb24uCgkoZmluaXNoX3N0cnVjdCk6IENoYW5nZSBwcm90b3R5cGUuCgkodW5yZXZlcnNlX21lbWJlcl9kZWNsYXJhdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGdyb2tfZW51bV9kZWNscyk6IFJlbW92ZS4KCShmaXh1cF9hbm9ueW1vdXNfdW5pb24pOiBOZXcgZnVuY3Rpb24uCgkoZ3Jva194X2NvbXBvbmVudHMpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKHRzdWJzdF9jaGFpbik6IFJlbW92ZS4KCShmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEZpeCBpbmRlbnRhdGlvbi4KCShmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IENoYW5nZSBwcm90b3R5cGUuCgkoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKGZpbmlzaF9tZW1iZXJfZGVjbGFyYXRpb24pOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfbXVsdGlwbGVfZGVjbGFyYXRvcnMpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoY2xhc3Nfc3RhY2tfbm9kZV90KTogTmV3IHR5cGUuCgkoY3VycmVudF9jbGFzc19iYXNlKTogUmVtb3ZlLgoJKGN1cnJlbnRfY2xhc3Nfc3RhY2spOiBDaGFuZ2UgdHlwZS4KCShjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIpOiBOZXcgdmFyaWFibGUuCgkoZ3Jvd19tZXRob2QpOiBSZW1vdmUuCgkoY2hlY2tfbWVtYmVyX2RlY2xfaXNfc2FtZV9pbl9jb21wbGV0ZV9zY29wZSk6IEJyZWFrIG91dCBmcm9tCglmaW5pc2hfc3RydWN0LgoJKG1ha2VfbWV0aG9kX3ZlYyk6IE5ldyBmdW5jdGlvbi4KCShmcmVlX21ldGhvZF92ZWMpOiBMaWtld2lzZS4KCShhZGRfaW1wbGljaXRseV9kZWNsYXJlZF9tZW1iZXJzKTogQnJlYWsgb3V0IGZyb20gZmluaXNoX3N0cnVjdF8xLgoJKGZyZWVfbWV0aG9kX3ZlY3MpOiBOZXcgdmFyaWFibGUuCgkoYWRkX21ldGhvZCk6IFJld29yayBmb3IgZGlyZWN0IHVzZSBmcm9tIHBhcnNlci4KCShoYW5kbGVfdXNpbmdfZGVjbCk6IFdhdGNoIGZvciBOVUxMX1RSRUUgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2gKCUNMQVNTVFlQRV9NRVRIT0RfVkVDLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IERvbid0IGJ1aWxkIENMQVNTVFlQRV9NRVRIT0RfVkVDIGhlcmU7CglqdXN0IGRvIHNvbWUgZXJyb3ItY2hlY2tpbmcuCgkod2Fybl9oaWRkZW4pOiBDaGFuZ2UgaXRlcmF0aW9uIHRocm91Z2ggQ0xBU1NUWVBFX01FVEhPRF9WRUMuCgkoZmluaXNoX3N0cnVjdF8xKTogU2ltcGxpZnkuICBVc2UgYWRkX2ltcGxpY2l0bHlfZGVjbGFyZWRfbWVtYmVycy4KCShmaW5pc2hfc3RydWN0KTogQ2hhbmdlIHByb3RvdHlwZS4gIFNpbXBsaWZ5OyBmaWVsZHMgYW5kIG1ldGhvZHMKCWFyZSBhbHJlYWR5IHNldCB1cCBhdCB0aGlzIHBvaW50LgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IFNldCB1cCBjdXJyZW50X2NsYXNzX3N0YWNrLgoJKHB1c2hjbGFzcyk6IFNhdmUgY3VycmVudF9hY2Nlc3Nfc3BlY2lmaWVyLgoJKHBvcGNsYXNzKTogUmVzdG9yZSBpdC4KCShjdXJyZW50bHlfb3Blbl9jbGFzcyk6IFNpbXBsaWZ5LgoJKGJ1aWxkX3NlbGZfcmVmZXJlbmNlKTogUmVtb3ZlIHVzZSBvZiBDTEFTU1RZUEVfTE9DQUxfVFlQRURFQ0xTLgoJKiBkZWNsLmMgKHNhdmVkX3Njb3BlKTogQWRkIGFjY2Vzc19zcGVjaWZpZXIuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIGl0LgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFJlc3RvcmUgaXQuCgkobWF5YmVfcHJvY2Vzc190ZW1wbGF0ZV90eXBlX2RlY2xhcmF0aW9uKTogVXNlCglmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uLgoJKHB1c2h0YWcpOiBMaWtld2lzZS4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IERvbid0IHJldHVybiBhIHZhbHVlLgoJKGZpeHVwX2Fub255bW91c191bmlvbik6IEJyZWFrIG91dCBmcm9tIGdyb2tfeF9jb21wb25lbnRzLgoJKHNoYWRvd190YWcpOiBVc2UgaXQuCgkoeHJlZl90YWcpOiBDb21wbGFpbiBhYm91dCB1c2luZyBhbiBlbGFib3JhdGVkIHR5cGUgc3BlY2lmaWVyIHRvCglyZWZlcmVuY2UgYSB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlciBvciB0eXBlZGVmIG5hbWUuCgkoeHJlZl9iYXNldHlwZXMpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0xPQ0FMX1RZUEVERUNMUy4KCShjdXJyZW50X2xvY2FsX2VudW0pOiBSZW1vdmUuCgkoYnVpbGRfZW51bWVyYXRvcik6IENhbGwgZmluaXNoX21lbWJlcl9kZWNsYXJhdGlvbi4KCShncm9rX2VudW1fZGVjbHMpOiBSZW1vdmUuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogU2ltcGxpZnkuCgkoY2hlY2tfY2xhc3Nmbik6IENoYW5nZSBpdGVyYXRpb24gdGhyb3VnaCBDTEFTU1RZUEVfTUVUSE9EX1ZFQy4KCShncm9rZmllbGQpOiBEb24ndCBzZXQgQ0xBU1NUWVBFX0xPQ0FMX1RZUEVERUNMUy4KCShtZXJnZV9mdW5jdGlvbnMpOiBBZGQgdG8gY29tbWVudC4KCShhcmdfYXNzb2NfdHlwZSk6IFByb3RvdHlwZS4KCShhcmdfYXNzb2MpOiBQYXNzIGFzIG1hbnkgYXJndW1lbnRzIGFzIHRoZXJlIGFyZSBwYXJhbWV0ZXJzLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgUFRSTUVNX0NTVC4gIEltcHJvdmUgaGFuZGxpbmcgb2YKCU9GRlNFVF9SRUYuCgkqIGV4cHIuYyAoY3Bsc19leHBhbmRfZXhwcik6IFJlbW92ZSBkZWFkIGNvZGUuICBIYW5kbGUKCVBUUk1FTV9DU1QuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBMb29rdXAgZnJpZW5kcyB3aGVuIGluIG5lc3RlZCBjbGFzc2VzLgoJQ2hhbmdlIGNvbW1lbnRzLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBEbyBsb29rdXAgZXZlbiBmb3IgY2xhc3NlcyB0aGF0IGFyZQoJb25seSBwYXJ0aWFsbHkgZGVmaW5lZC4KCShkZWNsX2NvbnN0YW50X3ZhbHVlKTogUmVtb3ZlIGRlYWQgY29kZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogUmVtb3ZlIGhhY2sgd2hlcmUgYnkgVFlQRSB3YXMKCW5vdCBhIFRZUEUuICBIYW5kbGUgUFRSTUVNX0NTVC4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogRG9uJ3QgcGFzcyBhIFBBUk1fREVDTCB3aGVyZSBhIFRZUEUKCXNob3VsZCBnby4KCSogcGFyc2UueSAoY29tcG9uZW50cywgbm90eXBlX2NvbXBvbmVudHMsIGNvbXBvbmVudF9kZWNsLAoJY29tcG9uZW50X2RlY2xfMSwgY29tcG9uZW50X2RlY2xhcmF0b3IsIGNvbXBvbmVudF9kZWNsYXJhdG9yMCk6CglOb3cgYWxsIGFyZSBpdHlwZSByYXRoZXIgdGhhbiB0dHlwZS4gIFJld29yayB0byBhZGQgbWVtYmVycyB0bwoJY2xhc3NlcyBvbiB0aGUgZmx5LgoJKHR5cGVzcXBlY3F1YWxfcmVzZXJ2ZWQpOiBVc2UgY2hlY2tfbXVsdGlwbGVfZGVjbGFyYXRvcnMuCgkoc3RydWN0c3ApOiBVcGRhdGUgY2xhc3MgdG8gZmluaXNoX2NsYXNzX2RlZmluaXRpb24uCgkoZG9feHJlZl9kZWZuKTogVW5zcGxpdCBpbnRvIG5hbWVkX2NsYXNzX2hlYWQuCgkoYWNjZXNzX3NwZWNpZmllcik6IFNldCBjdXJyZW50X2FjY2Vzc19zcGVjaWZpZXIuCgkqIHB0LmMgKHNldF9jdXJyZW50X2FjY2Vzc19mcm9tX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogRG9uJ3QgdGFrZSB0aGUgcGFyYW1ldGVycy4KCShjb21wX3RlbXBsYXRlX2FyZ3MpOiBNYWtlIG1vcmUgcm9idXN0LgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IHVzZSBjdXJyZW50X2xvY2FsX2VudW0uCgkoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IEhhbmRsZSBQVFJNRU1fQ1NULgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIHNldF9jdXJyZW50X2FjY2Vzc19mcm9tX2RlY2wsCglmaW5pc2hfbWVtYmVyX2RlY2xhcmF0aW9uIGFuZCB1bnJldmVyc2VfbWVtYmVyX2RlY2xhcmF0aW9ucy4gIFNldAoJbGluZW5vL2lucHV0X2ZpbGVuYW1lIGJlZm9yZSBnZW5lcmF0aW5nIGltcGxpY2l0IG1lbWJlciBmdW5jdGlvbnMuCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogRG9uJ3QgYXNzdW1lIGJhY2stdW5pZmljYXRpb24gaGFwcGVucwoJb25seSBmb3IgdGhlIGxhc3QgYXJndW1lbnQuCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBDYWxsIHB1c2hjbGFzcyBhIGJpdCBlYXJsaWVyLgoJKHRzdWJzdF9jaGFpbik6IFJlbW92ZS4KCSh0c3Vic3RfZW51bSk6IFVzZSBzZXRfY3VycmVudF9hY2Nlc3NfZnJvbV9kZWNsLgoJKHNldF9tYW5nbGVkX25hbWVfZm9yX3RlbXBsYXRlX2RlY2wpOiBGaXggaW5kZW50YXRpb24uCgkqIHNlYXJjaC5jIChsb29rdXBfZm5maWVsZHNfMSk6IENoYW5nZSBpdGVyYXRpb24gdGhyb3VnaAoJQ0xBU1NUWVBFX01FVEhPRF9WRUMuCgkoZGZzX3B1c2hkZWNscyk6IExpa2V3aXNlLgoJKGRmc19jb21wcmVzc19kZWNscyk6IExpa2V3aXNlLgoJKGFkZF9jb252ZXJzaW9ucyk6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NsYXNzX2RlZmluaXRpb24pOiBEb24ndCB0YWtlIGNvbXBvbmVudHMuCglDaGFuZ2UgY2FsbCB0byBmaW5pc2hfc3RydWN0LgoJKGZpbmlzaF9tZW1iZXJfZGVjbGFyYXRpb24pOiBOZXcgZnVuY3Rpb24uCgkoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IERvbid0IHRha2UgdGVtcGxhdGUgcGFyYW1ldGVycy4KCUNoYW5nZSBjYWxsIHRvIGdyb2tfeF9jb21wb25lbnRzLiAgQ2FsbCBmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wuCgkoY2hlY2tfbXVsdGlwbGVfZGVjbGFyYXRvcnMpOiBOZXcgZnVuY3Rpb24uCgkqIHNpZy5jIChhcHBlbmRfc2lnbmF0dXJlX2ZpZWxkcyk6IFdvcmsgZnJvbSB0aGUgVFlQRV9NRVRIT0RTLCBub3QKCWEgcGFzc2VkIGluIGZpZWxkbGlzdC4KCSogdHJlZS5jIChzZWFyY2hfdHJlZSk6IEhhbmRsZSBQVFJNRU1fQ1NULgoJKG1hcGNhcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBCdWlsZCBQVFJNRU1fQ1NUcywgbm90CglJTlRFR0VSX0NTVHMsIGZvciBwb2ludGVyLXRvLWRhdGEgbWVtYmVycy4KCgkqIGNhbGwuYyAocmVzb2x2ZV9hcmdzKTogUmVzb2x2ZSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMsIGlmCglwb3NzaWJsZS4KClR1ZSBPY3QgIDYgMDc6NTc6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHNwZXcubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNhbGwuYyAoY29tcGFyZV9pY3MpOiBJbml0aWFsaXplIHZhcmlhYmxlcyBgZGVyZWZfZnJvbV90eXBlMicsCglgZGVyZWZfdG9fdHlwZTEnIGFuZCBgZGVyZWZfdG9fdHlwZTInLgoKCSogZXhjZXB0LmMgKGdldF9laF90eXBlKTogSGlkZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBSZW1vdmUgdW51c2VkIHN0YXRpYyBwcm90b3R5cGUuCgoJKiBwdC5jICh0c3Vic3RfZGVjbCk6IEluaXRpYWxpemUgdmFyaWFibGUgYGFyZ3ZlYycuCgoJKiBzcGV3LmM6IEluY2x1ZGUgdG9wbGV2LmguCgoxOTk4LTEwLTA1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG8gc2F2ZSBhbmQgcmVzdG9yZSBmaWxlIHBvc2l0aW9uLgoKMTk5OC0xMC0wNSAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIG1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBDbGVhcgoJbnVtZXJpY19vdXRwdXRfbmVlZF9iYXIgYWZ0ZXIgX18uCgoxOTk4LTEwLTA1ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBJc3N1ZSAnaW5jb21wbGV0ZSB0eXBlJyBlcnJvciwKCWlmIGNsYXNzIGlzIG5vdCBkZWZpbmVkLgoKMTk5OC0xMC0wNSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbC5jIChidWlsZF9vYmplY3RfY2FsbCk6IE1vdmUgZGVjbGFyYXRpb24gb2YgdmFyaWFibGUKCWBmbicgaW50byB0aGUgc2NvcGUgd2hlcmUgaXQgaXMgdXNlZC4gIERvbid0IGFjY2VzcyB2YXJpYWJsZQoJYGZuJyB3aGVuIGl0IGlzIHVuaW5pdGlhbGl6ZWQsIGluc3RlYWQgdXNlIGBmbnMnLgoKMTk5OC0xMC0wNCAgVGhlb2RvcmUgUGFwYWRvcG91bG8gIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBlcnJmbi5jIChjcF90aGluZyk6IFByaW50IGJ1ZiBhcyBhIHN0cmluZyBub3QgYXMgYSBwcmludGYgZm9ybWF0Cgl0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBvcGVyYXRvciUuICBDb25zZXF1ZW50bHksIGAlJScgc2VxdWVuY2VzCglpbiBmb3JtYXQgYXJlIGNvcGllZCBhcyBgJScgaW4gYnVmLgoKMTk5OC0xMC0wNCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocG9wX3RpbnN0X2xldmVsKTogQ2FsbCBleHRyYWN0X2ludGVyZmFjZV9pbmZvLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBEb24ndCBzYXZlIGFuZCByZXN0b3JlIGZpbGUgcG9zaXRpb24uCgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogTWFrZSBzdGF0aWNzIGluIGV4dGVybiBpbmxpbmVzIGFuZAoJdGVtcGxhdGVzIGNvbW1vbiwgaWYgcG9zc2libGUgYW5kIHRoZSB0YXJnZXQgZG9lc24ndCBzdXBwb3J0IHdlYWsKCXN5bWJvbHMuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxscyB0bwoJYnVpbGRfdHlwZV92YXJpYW50IGFuZCBzb21lIGR1cGxpY2F0ZWQgY29kZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9yZWZlcmVuY2VfdHlwZSk6IE9ubHkgdGFrZSB0aGUgdHlwZSBwYXJtLgoJKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX3R5cGUpOiBMaWtld2lzZS4KCSogdHJlZS5jIChidWlsZF9jcGx1c19tZXRob2RfdHlwZSk6IEFkanVzdC4KCSogY3AtdHJlZS5oOiBVcGRhdGUuCgoxOTk4LTEwLTA0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBNYWtlIHBlZHdhcm5zIGFib3V0IGRyb3BwZWQgcXVhbGlmaWVycwoJaW50byBmdWxsLWZsZWRnZWQgZXJyb3JzLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X3Z0YWJsZXMpOiBJbiBhZGRpdGlvbiB0byB1bnNldHRpbmcKCVRSRUVfUkVBRE9OTFksIHJlbW92ZSB0b3AtbGV2ZWwgY29uc3QgdHlwZSBxdWFsaWZpZXIuCgoxOTk4LTEwLTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAoY3VycmVudF9jbGFzc19wdHIsIGN1cnJlbnRfY2xhc3NfcmVmKTogQ2xhcmlmeQoJZG9jdW1lbnRhdGlvbi4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogRG9uJ3QgZXhwZWN0IGZvbGQgdG8gcmVtb3ZlIGFsbCB0cml2aWFsCglOT1AgdHlwZSBjb252ZXJzaW9ucy4KCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IFVzZSBjb21wdHlwZXMgZGlyZWN0bHk7IGlnbm9yZQoJcXVhbGlmaWVycyBvbiB0aGUgREVDTC4KCShkdXBsaWNhdGVfZGVjbHMpOiBSZW1vdmUgcXVhbGlmaWVyIGNoZWNrcyBvbiBERUNMLgoJKGdyb2tkZWNsYXJhdG9yKTogTWFrZSB0aGUgdHlwZSBidWlsdCB1cCBpbmNsdWRlIHRvcC1sZXZlbAoJcXVhbGlmaWVycy4KCSogZGVjbDIuYyAoZG9fZHRvcnMpOiBGaXggc3BlbGxpbmcgZXJyb3IuCgkqIGVycm9yLmMgKGR1bXBfc2ltcGxlX2RlY2wpOiBEb24ndCBsb29rIGF0IHF1YWxpZmllcnMgb24gdGhlIGRlY2wKCXdoZW4gcHJpbnRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IEFkZCBkb2N1bWVudGF0aW9uLiAgRGVhbCB3aXRoIHRoZSBmYWN0Cgl0aGF0IHR5cGUgb2YgYWxsb2NhdGVkIG1lbW9yeSBub3cgY29udGFpbnMgcXVhbGlmaWVycy4KCSogbGV4LmMgKGlzX2dsb2JhbCk6IEltcHJvdmUgZXJyb3ItcmVjb3ZlcnkuCgkqIHNpZy5jIChidWlsZF9tZW1iZXJfZnVuY3Rpb25fcG9pbnRlcik6IERvbid0IGNhc3QgYXdheSBjb25zdAoJb24gZmllbGRzIG9mIHNpZ3RhYmxlX2VudHJ5X3R5cGUuCgkqIHRyZWUuYyAobHZhbHVlX3R5cGUpOiBEb24ndCBsb29rIGF0IHRvcC1sZXZlbCBxdWFsaWZpZXJzIG9uCglleHByZXNzaW9ucy4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShidWlsZF9jb21wb25lbnRfcmVmKTogTWFrZSBzdXJlIHRoZSB0eXBlIG9mIHRoZSBDT01QT05FTlRfUkVGCgljb250YWlucyB0b3AtbGV2ZWwgcXVhbGlmaWVycywgYXMgYXBwcm9wcmlhdGUuICBJbXByb3ZlCgllcnJvci1oYW5kbGluZy4KCShidWlsZF9pbmRpcmVjdF9yZWYpOiBTaW1wbGlmeS4gIERvbid0IHN0cmlwIHRvcC1sZXZlbCBxdWFsaWZpZXJzLgoJKGJ1aWxkX2FycmF5X3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX3VuYXJ5X29wKTogSW1wcm92ZSBlcnJvci1yZWNvdmVyeS4KCSh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IE1ha2UgdGFraW5nIHRoZSBhZGRyZXNzIGEgYm91bmQgbWVtYmVyCglmdW5jdGlvbiBhbiBlcnJvciwgbm90IGEgc29ycnkuCgkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IExvb2sgYXQgdGhlIHR5cGUgcXVhbGlmaWVycywgbm90IHRoZQoJcXVhbGlmaWVycyBvbiB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuCgoxOTk4LTEwLTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChtZXJnZV9mdW5jdGlvbnMpOiBSZW1vdmUgZHVwbGljYXRlcy4KCgkqIGRlY2wyLmM6IEFkZCAtZntuby0sfWltcGxpY2l0LWlubGluZS10ZW1wbGF0ZXMuCgkoaW1wb3J0X2V4cG9ydF9kZWNsKTogQ2hlY2sgaXQuCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBUZW1wbGF0ZSBwYXJtcyBhbHNvIHRha2UgcHJlY2VkZW5jZQoJb3ZlciBpbXBsaWNpdCB0eXBlbmFtZS4gIE9ubHkgd2FybiBpZiB5eWxleC4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogT25seSBmb2xkIGlmIGlmZXhwIGlzIGFuCglJTlRFR0VSX0NTVC4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IENoZWNrIERFQ0xfSU5URVJGQUNFX0tOT1dOCglpbnN0ZWFkIG9mIGxpbmthZ2UuCgoxOTk4LTEwLTAxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKEZPUk1BVF9WQkFTRV9OQU1FKTogTmV3IG1hY3JvLgoJKiBjbGFzcy5jIChidWlsZF92YmFzZV9wb2ludGVyKTogVXNlIGl0LgoJKiBydHRpLmMgKGV4cGFuZF9jbGFzc19kZXNjKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoYnVpbGRfdmJhc2VfcG9pbnRlcl9maWVsZHMpOiBMaWtld2lzZS4KClRodSBPY3QgIDEgMTA6NDM6NDUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IEFkZCBpbnZvY2F0aW9uIG9mCglTRVRfREVGQVVMVF9ERUNMX0FUVFJJQlVURVMsIGlmIGRlZmluZWQuCgkoc3RhcnRfZnVuY3Rpb24pOiBBZGQgaW52b2NhdGlvbiBvZgoJU0VUX0RFRkFVTFRfREVDTF9BVFRSSUJVVEVTLCBpZiBkZWZpbmVkLgoKCSogbGV4LmM6IFJlcGxhY2Ugb2NjdXJyZW5jZXMgb2YgSEFORExFX1NZU1ZfUFJBR01BIHdpdGgKCUhBTkRMRV9HRU5FUklDX1BSQUdNQVMuCgoxOTk4LTA5LTI4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfYXNtX3N0bXQpOiBBbHdheXMgcGVybWl0IHZvbGF0aWxlIGFzbXMuCgoxOTk4LTA5LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFRpZ2h0ZW4gY2hlY2tzIGZvciBpbnZhbGlkCglkZXN0cnVjdG9ycy4gIEltcHJvdmUgZXJyb3ItbWVzc2FnZXMgYW5kIGVycm9yLXJlY292ZXJ5LgoJKiBkZWNsMi5jIChjaGVja19jbGFzc2ZuKTogRG9uJ3QgYXNzdW1lIHRoYXQgbWFuZ2xlZCBkZXN0cnVjdG9yCgluYW1lcyBjb250YWluIHR5cGUgaW5mb3JtYXRpb24uCgoxOTk4LTA5LTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBSZW1vdmUgYXNzZXJ0LgoKCSogZGVjbDIuYyAoYnVpbGRfYW5vbl91bmlvbl92YXJzKTogRG9uJ3QgcHJvY2VzcyBhIGZpZWxkIHdpdGggbm8KCW5hbWUuCgkoZmluaXNoX2Fub25fdW5pb24pOiBBbHNvIGNvbXBsYWluIGFib3V0IGxvY2FsIGFub24gdW5pb25zIHdpdGggbm8KCW1lbWJlcnMuCgoxOTk4LTA5LTI1ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZXNwYWNlX25hbWUpOiBJZiB0aGUgbmFtZSBpcyBhIG5hbWVzcGFjZSwKCXJldHVybiBpdCBpbW1lZGlhdGVseS4KCkZyaSBTZXAgMjUgMTE6NDU6MzggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3AtdHJlZS5oIChkZWZpbmVfY2FzZV9sYWJlbCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyLgoJKGNoZWNrX2phdmFfbWV0aG9kKTogTGlrZXdpc2UuCgkoZ3Jva2NsYXNzZm4pOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl9pbml0KTogTGlrZXdpc2UuCgkoYnVpbGRfeF9kZWxldGUpOiBMaWtld2lzZS4KCShtYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCSh1bnNoYXJlX2Jhc2VfYmluZm9zKTogQWRkIHByb3RvdHlwZS4KCShzdHJpbmdfY29udl9wKTogTGlrZXdpc2UuCgkobXlfZnJpZW5kbHlfYWJvcnQpOiBNYXJrIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyCglgY2hlY2tjb25zdCcsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogTWFyayBwYXJhbWV0ZXIgYGNvZGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBJbml0aWFsaXplIHZhcmlhYmxlIGBjb252Jy4KCgkqIGRlY2wuYyAocHVzaF9uYW1lc3BhY2UpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBkJy4KCShkZWZpbmVfY2FzZV9sYWJlbCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBkZWNsJywgYWxsIGNhbGxlcnMKCWNoYW5nZWQuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBJZiAhVVNFX0NQUExJQiwgbWFyayBwYXJhbWV0ZXIKCWBhcmdjJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoZ3Jva2NsYXNzZm4pOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgY25hbWUnLCBhbGwgY2FsbGVycwoJY2hhbmdlZC4KCShjaGVja19qYXZhX21ldGhvZCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGN0eXBlJy4KCShjb3B5X2Fzc2lnbm1lbnRfYXJnX3ApOiBNYXJrIHBhcmFtZXRlciBgdmlydHVhbHAnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgcHJldicuCgoJKiBleHByLmMgKGV4dHJhY3RfaW5pdCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBkZWNsJyBhbmQgYGluaXQnLgoKCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlcgoJYGFsaWFzX3RoaXMnLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGV4cGFuZF9hZ2dyX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfZGVmYXVsdF9pbml0KTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3XzEpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBzdXNwJy4KCShidWlsZF94X2RlbGV0ZSk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGB0eXBlJywgYWxsIGNhbGxlcnMKCWNoYW5nZWQuCgoJKiBsZXguYyAoc2V0X3R5cGVkZWNsX2ludGVyZmFjZV9pbmZvKTogTWFyayBwYXJhbWV0ZXIgYHByZXYnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkocmVhZGVzY2FwZSk6IFVzZSAodW5zaWduZWQpIHZhbHVlIGluIHNoaWZ0LgoJKHJlYWxfeXlsZXgpOiBMaWtld2lzZS4gIExpa2V3aXNlLiAgQWxzbyBjYXN0IGBzaXplb2YnIHRvIGludCB3aGVuCgljb21wYXJpbmcgdG8gYSBzaWduZWQgcXVhbnRpdHkuCgoJKiBwdC5jIChtYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBSZW1vdmUgdW51c2VkCglwYXJhbWV0ZXIgYGRlY2wnLCBhbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogQWRkIGJyYWNlcyBhcm91bmQgZW1wdHkgYm9keSBpbgoJYW4gZWxzZS1zdGF0ZW1lbnQuCgkoY3VycmVudF90ZW1wbGF0ZV9hcmdzKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgYXJncycuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBwcmV2X2xvY2FsX2VudW0nLgoJKHRzdWJzdF9kZWNsKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGByJy4KCShzZXRfbWFuZ2xlZF9uYW1lX2Zvcl90ZW1wbGF0ZV9kZWNsKTogSW5pdGlhbGl6ZSB2YXJpYWJsZQoJYGNvbnRleHQnLgoKCSogc3Bldy5jIChzY2FuX3Rva2Vucyk6IENoYW5nZSB0eXBlIG9mIHBhcmFtZXRlciBgbicgdG8gdW5zaWduZWQuCglMaWtld2lzZSBmb3IgdmFyaWFibGUgYGknLgoJKHl5bGV4KTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgdHJycicuCgoJKiB0eXBlY2suYyAoY29tcHBhcm1zKTogTWFyayB2YXJpYWJsZSBgc3RyaWN0JyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogeHJlZi5jIChzaW1wbGlmeV90eXBlKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBmdW5jdGlvbiB0bwoJYHVuc2lnbmVkIGNoYXInLgoKMTk5OC0wOS0yNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwLXRyZWUuaCAobGFuZ3VhZ2VfbHZhbHVlX3ZhbGlkKTogUmVtb3ZlLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgZGlzYWxsb3cgcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMuCgkqIHRyZWUuYyAobHZhbHVlX3BfMSk6IE5ldyBmdW5jdGlvbiwgY29tYmluaW5nIGR1cGxpY2F0ZWQKCWNvZGUgZnJvbSAuLi4KCShsdmFsdWVfcCk6IFVzZSBpdC4KCShyZWFsX2x2YWx1ZV9wKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChsYW5ndWFnZV9sdmFsdWVfdmFsaWQpOiBSZW1vdmUuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBUcmVhdCBGVU5DVElPTl9UWVBFcyBhcyByZWFkb25seSwgZXZlbiB0aG91Z2gKCXRoZXkgZG9uJ3QgaGF2ZSBUUkVFX1JFQURPTkxZIHNldC4KCSogdHlwZWNrMi5jIChyZWFkb25seV9lcnJvcik6IEFkZCBjYXNlIGZvciBGVU5DVElPTl9ERUNMcy4KCjE5OTgtMDktMjQgIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIHNwZXcuYyAoeXlsZXgpOiBHaXZlIGRpYWdub3N0aWMuCgkqIGhhc2guaCAoaXNfcmVzZXJ2ZWRfd29yZCk6IEFkZCBleHBvcnQuCgkqIGd4eC5ncGVyZjogTGlrZXdpc2UuCgkqIGxleC5oIChyaWQpOiBBZGQgUklEX0VYUE9SVC4KCSogbGV4LmMgKGluaXRfcGFyc2UpOiBMaWtld2lzZS4KClR1ZSBTZXAgMjIgMjE6MDE6MTkgMTk5OCAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IE1ha2Ugd2FybmluZyBhIGZ1bGwgc2VudGVuY2UuCgoxOTk4LTA5LTIyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2xfbGlzdCk6IEltcHJvdmUgZXJyb3ItcmVjb3ZlcnkuCgoxOTk4LTA5LTIyICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IE1vdmUgZXJyb3IgdG8gcG9pbnQgd2hlcmUgbmFtZQoJdmFyaWFibGUgY2FuIGJlIHVzZWQgYnkgZHVtcF90eXBlLgoKMTk5OC0wOS0yMiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEltcHJvdmUgZXJyb3ItcmVjb3ZlcnkuCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKiBwdC5jIChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBMaWtld2lzZS4KCjE5OTgtMDktMjAgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogRmluZGluZyBtdWx0aXBsZSBtZW1iZXJzIGlzIGFsd2F5cwoJYW4gZXJyb3IuCgoxOTk4LTA5LTIxICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLWZpbHQpOiAgTGluayBsaWJpYmVydHkuYSBhZnRlciBjeHhtYWluLm8uCgpNb24gU2VwIDIxIDAxOjUzOjA1IDE5OTggIEZlbGl4IExlZSAgPGZsZWVAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChpbml0X2xleCk6IFVzZSBnZXRlbnYgKCJMQU5HIiksIG5vdCBHRVRfRU5WSVJPTk1FTlQgKCkuCgoxOTk4LTA5LTIwICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2xhc3MuYyAobWF5YmVfd2Fybl9hYm91dF9vdmVybHlfcHJpdmF0ZV9jbGFzcyk6IFJlZm9ybWF0LgoKMTk5OC0wOS0xNyAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IFJlYWxpZ24gc29tZSBjb2RlLgoKMTk5OC0wOS0xNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAodGluZm8ubyk6IFVzZSBDWFhGTEFHUyB3aGVuIGNvbXBpbGluZy4KCSh0aW5mbzIubyk6IExpa2V3aXNlLgoJKGV4Y2VwdGlvbi5vKTogTGlrZXdpc2UuCgkobmV3Lm8pOiBMaWtld2lzZS4KCShvcG5ldy5vKTogTGlrZXdpc2UuCgkob3BuZXdudC5vKTogTGlrZXdpc2UuCgkob3B2bmV3Lm8pOiBMaWtld2lzZS4KCShvcHZuZXdudC5vKTogTGlrZXdpc2UuCgkob3BkZWwubyk6IExpa2V3aXNlLgoJKG9wZGVsbnQubyk6IExpa2V3aXNlLgoJKG9wdmRlbC5vKTogTGlrZXdpc2UuCgkob3B2ZGVsbnQubyk6IExpa2V3aXNlLgoKMTk5OC0wOS0xNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBLaWxsIF9fYnVpbHRpbl9mcCBhbmQgX19idWlsdGluX3NwLgoKMTk5OC0wOS0xNSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBjYWxsLmMgKGJ1aWxkX2ZpZWxkX2NhbGwpOiBIYW5kbGUgc3RhdGljIGRhdGEgbWVtYmVycyB0b28uCgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogV2hlbiBjb21wYXJpbmcgcG9pbnRlciB0eXBlcywgY2hlY2sKCXdoZXRoZXIgcmVmZXJyZWQgdHlwZXMgbWF0Y2ggZXZlbiBpbiBzdHJpY3Rlc3QgbW9kZXMuCgoxOTk4LTA5LTE1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSogY2xhc3MuYzogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZS4KCShtYXliZV93YXJuX2Fib3V0X292ZXJseV9wcml2YXRlX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IERlY2xhcmUgaGVyZSwgYW5kIG1ha2Ugc3RhdGljLiAgUmVtb3ZlCgl1bm5lY2Vzc2FyeSBwYXJhbWV0ZXJzLiAgVGlkeSBzbGlnaHRseS4gIFVzZQoJbWF5YmVfd2Fybl9hYm91dF9vdmVybHlfcHJpdmF0ZV9jbGFzcy4KCShmaW5pc2hfc3RydWN0XzEpOiBBZGp1c3QuICBSZW1vdmUgY2hlY2sgZm9yIHByaXZhdGUgY29uc3RydWN0b3JzLAoJbm93IGRvbmUgZWxzZXdoZXJlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBBZGp1c3QuCgoxOTk4LTA5LTE1ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTm8gbmVlZCB0byBjaGVjayBmb3IgbmV3CglleGNlcHRpb24gbW9kZWwuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBEZWxldGVkLgoJKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2spOiBBZGQgY2FsbCB0byBzdGFydF9kZWNsXzEoKS4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogQWRkIGNhbGwgdG8gZW5kX2NhdGNoX2hhbmRsZXIoKS4KCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IE9ubHkgY2hlY2sgdGhlIGV4Y2VwdGlvbgoJbGFuZ3VhZ2UgaWYgdGhlcmUgaXMgYW4gZXhjZXB0aW9uIHRhYmxlLgoKMTk5OC0wOS0xNSAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGV4cGFuZF9pbmRpcmVjdF92dGJsc19pbml0KTogTWFyayB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMKCWFzIHVzZWQgdG8gcHJldmVudCBjb25mbGljdHMgd2l0aCB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlcy4KCjE5OTgtMDktMTQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGxhbmdfdHlwZSk6IEFkZCBoYXNfbm9uX3ByaXZhdGVfc3RhdGljX21lbV9mbi4KCShDTEFTU1RZUEVfSEFTX05PTl9QUklWQVRFX1NUQVRJQ19NRU1fRk4pOiBOZXcgbWFjcm8sIHRvIGFjY2VzcyBpdC4KCSogY2xhc3MuYyAobWF5YmVfY2xhc3NfdG9vX3ByaXZhdGVfcCk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBVc2UgaXQuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdCk6IFNldCBDTEFTU1RZUEVfSEFTX05PTl9QUklWQVRFX1NUQVRJQ19NRU1fRk4gaWYKCWFwcHJvcHJpYXRlLgoKCSogcHQuYyAoY2hlY2tfc3BlY2lhbGl6YXRpb25fc2NvcGUpOiBGaXggc3BlbGxpbmcgZXJyb3IuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBSZW1vdmUgY29kZSB0byBoYW5kbGUgZXhwbGljaXQKCXNwZWNpYWxpemF0aW9ucyBpbiBjbGFzcyBzY29wZTsgdGhleSBhcmUgbm93IGNvcnJlY3RseSBkaWFnbm9zZWQKCWFzIGVycm9ycy4KCjE5OTgtMDktMTAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogRG9uJ3QgY29weSB0eXBlcyBpZiB0aGUKCURFQ0xfQUJTVFJBQ1RfT1JJR0lOIG9mIHRoZSBuZXcgZGVjbCBtYXRjaGVzIHRoZSBUWVBFX05BTUUgb2YgdGhlCgl0eXBlLgoKMTk5OC0wOS0wOSAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YtZnMudXNjLmVkdT4KCgkqIGNsYXNzLmMgKGdldF9lbmNsb3NpbmdfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoaXNfYmFzZV9vZl9lbmNsb3NpbmdfY2xhc3MpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChnZXRfZW5jbG9zaW5nX2NsYXNzKTogRGVjbGFyZS4KCShpc19iYXNlX29mX2VuY2xvc2luZ19jbGFzcyk6IExpa2V3aXNlLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBVc2UgdGhlbS4KCjE5OTgtMDktMDkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBDaGVjayB3aGV0aGVyIE1BVEhfTElCUkFSWSBpcwoJbnVsbCB0byBkZWNpZGUgd2hldGhlciB0byB1c2UgaXQuCgoJKiBlcnJvci5jIChkdW1wX3R5cGVfcmVhbCk6IEhhbmRsZSBOQU1FU1BBQ0VfREVDTC4KCSogcGFyc2UueSAoYmFzZV9jbGFzcy4xKTogQXZvaWQgY3Jhc2ggb24gZXJyb3IuCgoxOTk4LTA5LTA4ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBJZiBjb250ZXh0IGlzIGEgbmFtZXNwYWNlLCB0aGUgY29kZQoJaXMgaW4gZXJyb3IuCgoxOTk4LTA5LTA4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIHBhcnNlLnkgKG5vbW9kc19pbml0ZGNsMCk6IFNldCB1cCB0aGUgcGFyc2VyIHN0YWNrIGNvcnJlY3RseS4KCjE5OTgtMDktMDggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGFub255bW91c19uYW1lc3BhY2VfbmFtZSk6IERlY2xhcmUuCgkqIGRlY2wuYzogRGVmaW5lIGl0LgoJKHB1c2hfbmFtZXNwYWNlKTogVXNlIGFub255bW91c19uYW1lc3BhY2VfbmFtZSwgcmF0aGVyIHRoYW4gbG9jYWwKCXN0YXRpYyBhbm9uX25hbWUuCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IElmIGEgbmFtZXNwYWNlIGlzIG5hbWVkCglhbm9ueW1vdXNfbmFtZXNwYWNlX25hbWUsIGNhbGwgaXQge2Fub255bW91c30uCgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IERpc3Rpbmd1aXNoIGJldHdlZW4gcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMKCWluIGVycm9yIG1lc3NhZ2UuCgoxOTk4LTA5LTA4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoJICAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChwcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBDb25zaXN0ZW50bHkgYWxsb2NhdGUKCWFuZCB6ZXJvIHRwZC5wYXJtcyBiYXNlZCBvbiBudHBhcm1zLiAgVXNlIHRwZDIucGFybXMsIG5vdAoJdHBkLnBhcm1zLCB3aGVyZSBhcHByb3ByaWF0ZS4KClN1biBTZXAgIDYgMDA6MDA6NTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogVXBkYXRlIGFmdGVyIHJlY2VudCB0b3BsZXZlbCBnY2MKCXJlb3JnYW5pemF0aW9ucy4KCjE5OTgtMDktMDUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKFRJX1BFTkRJTkdfU1BFQ0lBTElaQVRJT05fRkxBRyk6IFJlbW92ZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IFJlbW92ZSBoYWNrZXJ5IHRvIGRlYWwgd2l0aCBleHBsaWNpdAoJc3BlY2lhbGl6YXRpb25zIGluIGNsYXNzIHNjb3BlLgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBJbXByb3ZlIGVycm9yLXJlY292ZXJ5LgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4KCSogcHQuYyAoY2hlY2tfc3BlY2lhbGl6YXRpb25fc2NvcGUpOiBOZXcgZnVuY3Rpb24uCgkoYmVnaW5fc3BlY2lhbGl6YXRpb24pOiBDYWxsIGl0LgoJKHByb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbik6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20KCXB1c2hfdGVtcGxhdGVfZGVjbC4gIENoZWNrIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zIG1vcmUKCXN0cmluZ2VudGx5LgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENhbGwgaXQuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBhdHRlbXB0IHRvIGhhbmRsZSBleHBsaWNpdAoJc3BlY2lhbGl6YXRpb25zIGluIGNsYXNzIHNjb3BlLgoJKHRlbXBsYXRlX3Bhcm1fZGF0YSk6IERvY3VtZW50LiAgQWRkIGN1cnJlbnRfYXJnIGFuZAoJYXJnX3VzZXNfdGVtcGxhdGVfcGFybXMuCgkobWFya190ZW1wbGF0ZV9wYXJtKTogU2V0IGl0LgoJKHRzdWJzdF9hcmdfdHlwZXMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY2xhc3NfZGVmaW5pdGlvbik6IFR3ZWFrLgoKMTk5OC0wOS0wNCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGluYy90eXBlaW5mbyAodHlwZV9pbmZvOjp0eXBlX2luZm8oY29uc3QgY2hhciopKTogTWFrZQoJYGV4cGxpY2l0Jy4KCgkqIGNwLXRyZWUuaCAoaGFzaF90cmVlX2NvbnNfc2ltcGxlKTogTmV3IG1hY3JvLgoJKiBwdC5jICh0c3Vic3RfYXJnX3R5cGVzKTogTmV3IGZ1bmN0aW9uLiAgVXNlIGhhc2hfdHJlZV9jb25zLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSBtYWtlX3RlbXBfdmVjLCBpbnN0ZWFkIG9mCgltYWtlX3RyZWVfdmVjLiAgRG9jdW1lbnQgdGhpcyBiZWhhdmlvci4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSh0c3Vic3QsIGNhc2VzIE1FVEhPRF9UWVBFLCBGVU5DVElPTl9UWVBFKTogVXNlIHRzdWJzdF9hcmdfdHlwZXMuCglSZW1vdmUgZGVhZCBjb2RlIChhbmQgYWRkIGFzc2VydGlvbiB0byBjaGVjayBpdHMgZGVhZG5lc3MpLiAgRml4CglidWcgdy5yLnQuIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9ucy4KCjE5OTgtMDktMDMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogQWx3YXlzIG1ha2UgYXJ0aWZpY2lhbHMgY29tZGF0LgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoJKiBwdC5jIChtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogTGlrZXdpc2UuCgoxOTk4LTA5LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChmaW5pc2hfZ2xvYmFsbHlfcXVhbGlmaWVkX21lbWJlcl9jYWxsX2V4cHIpOgoJUmVuYW1lIHRvIC4uLgoJKGZpbmlzaF9xdWFsaWZpZWRfY2FsbF9leHByKS4KCSogc2VtYW50aWNzLmM6IExpa2V3aXNlLgoJKiBwYXJzZS55IChwcmltYXJ5KTogVXNlIGl0LgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgoKCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBDYWxsIGNvbnZlcnRfZnJvbV9yZWZlcmVuY2UgdG8KCWhhbmRsZSBtZW1iZXJzIG9mIHJlZmVyZW5jZSB0eXBlLiAgSW1wcm92ZSBlcnJvciByZWNvdmVyeS4KCjE5OTgtMDktMDMgIEJlbmphbWluIEtvc25payAgPGJrb3pAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogRGVjbGFyZSB3YXJuX25vbnRlbXBsYXRlX2ZyaWVuZC4KCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0LgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1Xbm9uLXRlbXBsYXRlLWZyaWVuZC4KCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFVzZSB0byB0b2dnbGUgbm9uLXRlbXBsYXRlIGZ1bmN0aW9uIHdhcm5pbmcuCgoxOTk4LTA5LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IERvbid0IHJlc29sdmUgQ09OU1RfREVDTHMgdG8gdGhlaXIKCWNvcnJlc3BvbmRpbmcgSU5URUdFUl9DU1RzIHdoZW4gcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IFR3ZWFrIGFjY29yZGluZ2x5LgoKMTk5OC0wOS0wMyAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoZGVjbF9jbGFzc19sZXZlbCk6IEFkZCB3YXJuaW5nIGhlcmUuCgkocHVzaGRlY2wpOiBUd2Vhay4KCjE5OTgtMDktMDIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IFRpZHkuCgkqIHNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBTaW1wbGlmeS4KCShnZXRfYmFzZV9kaXN0YW5jZSk6IExpa2V3aXNlLgoKCSogcHQuYyAodW5pZnkpOiBPbmx5IHNwZWNpYWwtY2FzZSBJTlRFR0VSX1RZUEUgaWYgaXQgdXNlcyB0ZW1wbGF0ZQoJcGFybXMuCgpXZWQgU2VwIDAyIDA5OjI1OjI5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6ICBDYWxsIEhBTkRMRV9QUkFHTUEgYmVmb3JlCglIQU5ETEVfU1lTVl9QUkFHTUEgaWYgYm90aCBhcmUgZGVmaW5lZC4gIEdlbmVyYXRlIHdhcm5pbmcgbWVzc2FnZXMKCWlmIHVua25vd24gcHJhZ21hcyBhcmUgZW5jb3VudGVyZWQuCgkoaGFuZGxlX3N5c3ZfcHJhZ21hKTogSW50ZXJwcmV0IHJldHVybiBjb2RlIGZyb20KCWhhbmRsZV9wcmFnbWFfdG9rZW4gKCkuICBSZXR1cm4gc3VjY2Vzcy9mYWlsdXJlIGluZGljYXRpb24gcmF0aGVyCgl0aGFuIG5leHQgdW5wcm9jZXNzZWQgY2hhcmFjdGVyLgoJKHByYWdtYV9nZXRjKTogTmV3IGZ1bmN0aW9uOiByZXRyaWV2ZXMgY2hhcmFjdGVycyBmcm9tIHRoZQoJaW5wdXQgc3RyZWFtLiAgRGVmaW5lZCB3aGVuIEhBTkRMRV9QUkFHTUEgaXMgZGVmaW5lZC4KCShwcmFnbWFfdW5nZXRjKTogTmV3IGZ1bmN0aW9uOiByZXBsYWNlcyBjaGFyYWN0ZXJzIGJhY2sgaW50byB0aGUKCWlucHV0IHN0cmVhbS4gIERlZmluZWQgd2hlbiBIQU5ETEVfUFJBR01BIGlzIGRlZmluZWQuCgoxOTk4LTA5LTAxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChvdXRwdXRfdnRhYmxlX2luaGVyaXQpOiBVc2UgJWNESUdJVCBpbiB0aGUgb3BlcmFuZHMuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeV9yZWYpOiBMaWtld2lzZS4KCjE5OTgtMDktMDEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKERFQ0xfRlJJRU5EX1BTRVVET19URU1QTEFURV9JTlNUQU5USUFUSU9OKTogTmV3IG1hY3JvLgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IFVzZSBpdC4KCjE5OTgtMDktMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFsc28gZG8gaW1wbGljaXQgdHlwZW5hbWUgdGhpbmcgZm9yCglhcnRpZmljaWFsIFRZUEVfREVDTHMuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHMsIGxvb2t1cF9maWVsZCk6IEFkanVzdCBmb3IgaW1wbGljaXQgdHlwZW5hbWUga2x1ZGdlLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IFVzZSBlbnRlcl9zY29wZV9vZi4KCShlbnRlcl9zY29wZV9vZik6IEV4dHJhY3QgdHlwZSBmcm9tIGltcGxpY2l0IHR5cGVuYW1lLgoJKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCSogbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IEhhbmRsZSBpbXBsaWNpdCB0eXBlbmFtZSB3aGVuIGNoZWNraW5nCglmb3IgU0VMRk5BTUUuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ19zdHJpY3RfcHJvdG90eXBlLgoJKiBsZXguYyAoZG9fc2NvcGVkX2lkLCBkb19pZGVudGlmaWVyKTogRG9uJ3QgaW1wbGljaXRseV9kZWNsYXJlIGlmCgktZnN0cmljdC1wcm90b3R5cGUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJZiAtZntubywtfXN0cmljdC1wcm90b3R5cGUgd2Fzbid0CglzcGVjaWZpZWQsIHNldCBpdCB0byB0aGUgdmFsdWUgb2YgcGVkYW50aWMuCgoxOTk4LTA5LTAxICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jKTogSGFuZGxlIHRlbXBsYXRlLWlkIGV4cHJlc3Npb25zIGFzIGFyZ3VtZW50cy4KCjE5OTgtMDgtMzEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9lbnVtKTogSGFuZGxlIG1lbWJlciBlbnVtcyBvZiBjbGFzc2VzIGRlY2xhcmVkIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IFN0cmlwIGF0dHJpYnV0ZXMgYmVmb3JlIGNhbGxpbmcKCWdyb2t0eXBlbmFtZS4KCjE5OTgtMDgtMzEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCwgZGVjbDIuYzogUmVtb3ZlIHN1cHBvcnQgZm9yIC1mYWxsLXZpcnR1YWwsCgktZmVudW0taW50LWVxdWl2YWxlbmNlIGFuZCAtZm5vLW5vbm51bGwtb2JqZWN0cy4KCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlKTogUmVtb3ZlIHN1cHBvcnQgZm9yIC1mYWxsLXZpcnR1YWwuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogUmVtb3ZlIHN1cHBvcnQgZm9yIC1mZW51bS1pbnQtZXF1aXZhbGVuY2UuCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogTGlrZXdpc2UuCgkqIGN2dC5jIChvY3BfY29udmVydCk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX3ZmaWVsZF9yZWYpOiBSZW1vdmUgc3VwcG9ydCBmb3IgLWZuby1ub25udWxsLW9iamVjdHMuCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBMaWtld2lzZS4KClN1biBBdWcgMzAgMjI6MTY6MzEgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogTWFrZWZpbGUuaW4gKElOVEVSRkFDRSk6IE5ldywgc2V0IHRvIDEuCgoxOTk4LTA4LTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogVXNlIENQX0RFQ0xfQ09OVEVYVCwgbm90IERFQ0xfQ09OVEVYVCwgd2hlbgoJY29tcGFyaW5nIHdpdGggZ2xvYmFsX25hbWVzcGFjZS4KCShkdW1wX2FnZ3JfdHlwZSk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogSXNzdWUgZXJyb3Igb24gZGVjbGFyYXRpb24gb2YgZnJpZW5kCgl0ZW1wbGF0ZXMgd2l0aCBleHBsaWNpdCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgoJKiBwdC5jIChjb252ZXJ0X3RlbXBsYXRlX2FyZ3VtZW50KTogTmV3IGZ1bmN0aW9uLCBzcGxpdCBvdXQKCWZyb20uLi4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBIZXJlLgoJKHRzdWJzdCk6IEF0dGVtcHQgYmV0dGVyIGVycm9yLXJlY292ZXJ5LgoKMTk5OC0wOC0yOCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogcHQuYyAoZGVjbF90ZW1wbGF0ZV9wYXJtX3ApOiBBZGQgY2hlY2tzIGZvcgoJVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCjE5OTgtMDgtMjggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IEZpeCB0aGlua28gaW4gcHJldmlvdXMgY2hhbmdlLgoKMTk5OC0wOC0yOCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGRmc19zZWFyY2gsIGJpbmZvX2Zvcl92dGFibGUsIGRmc19iZnZfaGVscGVyKTogTmV3IGZucy4KCSogZGVjbDIuYyAob3V0cHV0X3Z0YWJsZV9pbmhlcml0KTogQ2FsbCBiaW5mb19mb3JfdnRhYmxlLgoKMTk5OC0wOC0yOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglBZGQgc3VwcG9ydCBmb3IgZGlzY2FyZGluZyB1bnVzZWQgdmlydHVhbCBmdW5jdGlvbnMuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZ2dGFibGUtZ2MuCgkqIGNwLXRyZWUuaDogQWRkIGZsYWdfdnRhYmxlX2djLgoJKiBkZWNsMi5jIChvdXRwdXRfdnRhYmxlX2luaGVyaXQpOiBOZXcgZm4uCgkoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogQ2FsbCBpdC4KCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5X3JlZik6IE5ldyBmbi4KCShidWlsZF92dGJsX3JlZik6IENhbGwgaXQuCgoxOTk4LTA4LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChidWlsZF9lbnVtZXJhdG9yKTogVGFrZSB0aGUgZW51bWVyYXRpb24gdHlwZSBhcyBhCglwYXJhbWV0ZXIuCgkqIGRlY2wuYyAoZmluaXNoX2VudW0pOiBEb24ndCBzZXQgdGhlIFRSRUVfVFlQRSBmb3IgdGhlCgllbnVtZXJhdGlvbiBjb25zdGFudCB2YWx1ZXMgaWYgd2UncmUgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNscy4KCURvbid0IHNldCB0aGUgdHlwZSBmb3IgdGhlIENPTlNUX0RFQ0xzIGVpdGhlcjsgdGhhdCdzIGRvbmUgaW4KCWJ1aWxkX2VudW1lcmF0b3IuCgkoYnVpbGRfZW51bWVyYXRvcik6IFRha2UgdGhlIGVudW1lcmF0aW9uIHR5cGUgYXMgYQoJcGFyYW1ldGVyLgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IERvbid0IHJlc29sdmUgZW51bWVyYXRpb24gY29uc3RhbnRzIHdoaWxlCglwcm9jZXNzaW5nIHRlbXBsYXRlIGRlY2xhcmF0aW9ucywgZXZlbiBpZiB0aGV5IGhhcHBlbiB0byBiZQoJVEVNUExBVEVfUEFSTV9JTkRFWHMuCgoJKiBwYXJzZS55IChjdXJyZW50X2VudW1fdHlwZSk6IE5ldyB2YXJpYWJsZS4KCShwcmltYXJ5KTogRG9uJ3QgYWxsb3cgc3RhdGVtZW50LWV4cHJlc3Npb24gaW4gbG9jYWwgY2xhc3NlcyBqdXN0CglhcyB3ZSBkb24ndCBpbiBnbG9iYWwgY2xhc3Nlcy4KCShzdHJ1Y3RzcCk6IFVzZSBjdXJyZW50X2VudW1fdHlwZS4KCShlbnVtX2xpc3QpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBEb24ndCBjaGVjayBmb3IgTk9QX0VYUFJzIGludHJvZHVjZWQgYnkKCWZpbmlzaF9lbnVtOyB0aGV5IG5vIGxvbmdlciBvY2N1ci4KCgkqIGNwLXRyZWUuaCAoZmluaXNoX2Jhc2Vfc3BlY2lmaWVyKTogTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS55IChiYXNlX2NsYXNzKTogVXNlIGl0LgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2Jhc2Vfc3BlY2lmaWVyKTogRGVmaW5lIGl0LgoKCSogcGFyc2UueSAoc3RydWN0c3ApOiBXYXJuIG9uIHVzZSBvZiB0eXBlbmFtZSBvdXRzaWRlIG9mIHRlbXBsYXRlCglkZWNsYXJhdGlvbnMuCgoxOTk4LTA4LTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IFJlbW92ZSAjcHJhZ21hIHZ0YWJsZS4KCSogbGFuZy1vcHRpb25zLmg6IFJlbW92ZSArZSBvcHRpb25zLgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IERvbid0IGNoZWNrIHdyaXRlX3ZpcnR1YWxzLgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCwgZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGRmc19kZWJ1Z19tYXJrKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSwgZmluaXNoX3Z0YmxzLCBmaW5pc2hfc3RydWN0XzEpOiBMaWtld2lzZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2hlY2sgZmxhZ19lbGlkZV9jb25zdHJ1Y3RvcnMuCgkqIGRlY2wyLmM6IGZsYWdfZWxpZGVfY29uc3RydWN0b3JzIGRlZmF1bHRzIHRvIDEuCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IFJlbW92ZSByZXR1cm5fbG9jIHBhcm0uCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogQWRqdXN0LgoKCSogc2VhcmNoLmM6IFRlYXIgb3V0IGFsbCBtaV9tYXRyaXggYW5kIG1lbW9pemUgY29kZS4KCShsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkcyk6IFVzZSBzY3JhdGNoX3RyZWVfY29ucy4KCSogbGFuZy1vcHRpb25zLmg6IFJlbW92ZSBkb2N1bWVudGF0aW9uIGZvciAtZmhhbmRsZS1leGNlcHRpb25zLAoJLWZtZW1vaXplLWxvb2t1cHMgYW5kIC1mc2F2ZS1tZW1vaXplZC4KCSogY3AtdHJlZS5oOiBMb3NlIG1pX21hdHJpeCBhbmQgbWVtb2l6ZSBzdXBwb3J0LgoJKiBkZWNsMi5jOiBJZ25vcmUgLWZtZW1vaXplLWxvb2t1cHMgYW5kIC1mc2F2ZS1tZW1vaXplZC4KCSogY2xhc3MuYzogTG9zZSBzdHJ1Y3QgY2xhc3NfbGV2ZWwuCgkocHVzaGNsYXNzLCBwb3BjbGFzcyk6IExvc2UgbWVtb2l6ZSBzdXBwb3J0LgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCglOZXZlciBjaGFuZ2UgQklORk9fSU5IRVJJVEFOQ0VfQ0hBSU4uCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBDaGFuZ2UgbW9kaWZpY2F0aW9uIG9mCglCSU5GT19JTkhFUklUQU5DRV9DSEFJTiB0byBhbiBhc3NlcnQuCgkqIHNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBMaWtld2lzZS4KCShnZXRfYmFzZV9kaXN0YW5jZSk6IExpa2V3aXNlLgoJKGxvb2t1cF9tZW1iZXIpOiBMaWtld2lzZS4KCShjb252ZXJ0X3BvaW50ZXJfdG9fc2luZ2xlX2xldmVsKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuICBMb3NlIHNldHRpbmcgVFJFRV9WSUFfKiBvbiBUUkVFX0xJU1RzLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzKTogRG9uJ3QgY2FsbCB1bnNoYXJlX2Jhc2VfYmluZm9zLgoJKHVuc2hhcmVfYmFzZV9iaW5mb3MpOiBEb24ndCBjYWxsIHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzLgoJKGxheW91dF9iYXNldHlwZXMpOiBDYWxsIHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzIGluc3RlYWQgb2YKCXVuc2hhcmVfYmFzZV9iaW5mb3MuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBDYWxsIHVuc2hhcmVfYmFzZV9iaW5mb3MuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAocmV2ZXJzZV9wYXRoKTogUmVtb3ZlICdjb3B5JyBwYXJtOyBhbHdheXMgbWFrZSBhCgl0ZW1wb3JhcnkgY29weS4KCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IEp1c3QgY2FsbCBpdC4KCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogTGlrZXdpc2UuICBEb24ndCByZS1yZXZlcnNlLgoKMTk5OC0wOC0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BhdGgpOiBVc2UgcmV2ZXJzZV9wYXRoLgoJKGZpbmlzaF9iYXNlX3N0cnVjdCk6IE1vdmUgd2FybmluZ3MgZm9yIGluYWNjZXNzaWJsZSBiYXNlcyB0bwoJbGF5b3V0X2Jhc2V0eXBlcy4KCShtb2RpZnlfb25lX3Z0YWJsZSk6IFJlbW92ZSBjaGVjayBvZiBUUkVFX1VTRUQgKGJpbmZvKS4KCShmaXh1cF92dGFibGVfZGVsdGFzMSk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKEJJTkZPX0lOSEVSSVRBTkNFX0NIQUlOKTogRG9jdW1lbnQgaGVyZS4KCSh4cmVmX3RhZyk6IFJlbW92ZSBiaW5mb3MgcGFyYW1ldGVyLgoJKG1ha2VfYmluZm8pOiBSZW1vdmUgY2hhaW4gcGFyYW1ldGVyLgoJKHJldmVyc2VfcGF0aCk6IEFkZCBjb3B5IHBhcmFtZXRlci4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENoYW5nZSBjYWxscyB0byB4cmVmX3RhZy4KCSh4cmVmX3RhZyk6IFJlbW92ZSBiaW5mb3MgcGFyYW1ldGVyLgoJKHhyZWZfYmFzZXR5cGVzKTogQ2hhbmdlIGNhbGxzIHRvIG1ha2VfYmluZm8uCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogQ2hhbmdlIGNhbGxzIHRvIHhyZWZfdGFnLgoJKGhhbmRsZV9jbGFzc19oZWFkKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBMaWtld2lzZS4KCSogbGV4LmMgKG1ha2VfbGFuZ190eXBlKTogQ2hhbmdlIGNhbGxzIHRvIG1ha2VfYmluZm8uCgkqIHBhcnNlLnkgKHN0cnVjdHNwKTogQ2hhbmdlIGNhbGxzIHRvIHhyZWZfdGFnLgoJKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogTGlrZXdpc2UuCgkobmFtZWRfY2xhc3NfaGVhZCk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IENoYW5nZSBjYWxscyB0byByZXZlcnNlX3BhdGguCgkoZGZzX2dldF92YmFzZV90eXBlcyk6IENoYW5nZSBjYWxscyB0byBtYWtlX2JpbmZvLgoJKGdldF92YmFzZV90eXBlcyk6IFJlbW92ZSBkZWFkIGNvZGUuCgkqIHRyZWUuYyAodW5zaGFyZV9iYXNlX2JpbmZvcyk6IENoYW5nZSBjYWxscyB0byBtYWtlX2JpbmZvLgoJKGxheW91dF9iYXNldHlwZXMpOiBXYXJuIGhlcmUgYWJvdXQgaW5hY2Nlc3NpYmxlIGJhc2VzLgoJKG1ha2VfYmluZm8pOiBSZW1vdmUgY2hhaW4gcGFyYW1ldGVyLgoJKHJldmVyc2VfcGF0aCk6IEFkZCBjb3B5IHBhcmFtZXRlci4KCjE5OTgtMDgtMjcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmM6ICNpZiAwIGNvbXBsZXRlX3R5cGVfcC4KCSogaW5pdC5jIChidWlsZF9qYXZhX2NsYXNzX3JlZiwgYnVpbGRfbmV3XzEpOiBSZW1vdmUgdW51c2VkIGxvY2Fscy4KCSogbWV0aG9kLmMgKHByb2Nlc3Nfb3ZlcmxvYWRfaXRlbSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBMaWtld2lzZS4KCglTdG9wIHNoYXJpbmcgYmluZm9zIGZvciBpbmRpcmVjdCB2aXJ0dWFsIGJhc2VzLgoJKiB0cmVlLmMgKHByb3BhZ2F0ZV9iaW5mb19vZmZzZXRzKTogVW5zaGFyZSB2YmFzZXMsIHRvby4KCShsYXlvdXRfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkodW5zaGFyZV9iYXNlX2JpbmZvcyk6IENvcHkgdmJhc2VzLCB0b28uCgkqIGNwLXRyZWUuaCAoQklORk9fVklBX1BVQkxJQywgQklORk9fQkFTRUlOSVRfTUFSS0VELAoJQklORk9fVkJBU0VfSU5JVF9NQVJLRUQpOiBSZW1vdmUgb2Jzb2xldGUgbWFjcm9zLgoJKEJJTkZPX1BVU0hERUNMU19NQVJLRUQsIFNFVF9CSU5GT19QVVNIREVDTFNfTUFSS0VELAoJQ0xFQVJfQklORk9fUFVTSERFQ0xTX01BUktFRCk6IE5ldyBtYWNyb3MuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQsIGxvb2t1cF9mbmZpZWxkcywgbG9va3VwX21lbWJlcik6IFJlbW92ZQoJcmVmZXJlbmNlIHRvIEJJTkZPX1ZJQV9QVUJMSUMuCgkobWFya2VkX3B1c2hkZWNsc19wLCB1bm1hcmtlZF9wdXNoZGVjbHNfcCk6IE5ldyBmbnMuCgkocHVzaF9jbGFzc19kZWNscyk6IFVzZSB0aGVtLgoJKGRmc19wdXNoZGVjbHMpOiBVc2UgU0VUX0JJTkZPX1BVU0hERUNMU19NQVJLRUQuCgkoZGZzX2NvbXByZXNzX2RlY2xzKTogVXNlIENMRUFSX0JJTkZPX1BVU0hERUNMU19NQVJLRUQuCgoxOTk4LTA4LTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogU2V0IERFQ0xfQ09OVEVYVCBmb3IgdGhlCglDT05TVF9ERUNMcy4KCjE5OTgtMDgtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKGZpbmlzaF9lbnVtKTogQ2hhbmdlIHByb3RvdHlwZS4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IFVzZSBUWVBFX1ZBTFVFUywgcmF0aGVyIHRoYW4gdGFraW5nIGEKCVZBTFVFUyBwYXJhbWV0ZXIuICBEb24ndCB0cnkgdG8gY29tcHV0ZSBtaW5zL21heHMgaWYKCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4KCSogcGFyc2UueSAoc3RydWN0c3ApOiBVc2UgbmV3IGNhbGxpbmcgc2VxdWVuY2UgZm9yIGZpbmlzaF9lbnVtLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IExpa2V3aXNlLiAgVGFrZSB0aGUgbmV3IHR5cGUgYXMgaW5wdXQuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuICBUd2Vhay4KCVJlZ2lzdGVyIGVudW1zIG9uIGluc3RhbnRpYXRpb24gbGlzdCBiZWZvcmUgc3Vic3RpdHV0aW5nCgllbnVtZXJhdGlvbiBjb25zdGFudHMuCgkodHN1YnN0X2RlY2wpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KCShyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBvYmxpdGVyYXRlIHRoZQoJREVDTF9URU1QTEFURV9JTkZPIGZvciBhIHRlbXBsYXRlIGlmIHdlJ3JlIG5vdCByZXBsYWNpbmcgaXQgd2l0aAoJYW55dGhpbmcuCgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IEZpeCB0eXBvIGluIGNvbW1lbnQuCgpXZWQgQXVnIDI2IDEwOjU0OjUxIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGVycmZuLmM6IFJlbW92ZSBzdGRhcmcuaC92YXJhcmdzLmguCgkqIHRyZWUuYzogTGlrZXdpc2UuCgoxOTk4LTA4LTI1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBPbmx5IGRvIHR5cGVuYW1lIG92ZXJsb2FkaW5nIG9uIGFuCglJREVOVElGSUVSX05PREUgdGhhdCBoYXBwZW5zIHRvIGxvb2sgbGlrZSBhIHR5cGVuYW1lIGlmIGl0IGFjdHVhbGx5CgloYXMgYSB0eXBlIGZvciB1cyB0byB1c2UuCgoxOTk4LTA4LTI1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcF9jdl90YXJnZXRfdHlwZXMpOiBTcGxpdCBvdXQuLi4KCShjb21wX3RhcmdldF90eXBlcyk6IEZyb20gaGVyZS4gIERvbid0IGFsbG93IGN2LXF1YWwgY2hhbmdlcyB1bmRlcgoJYSBwb2ludGVyIGlmIG5wdHJzID09IDAuICBGaXggT0ZGU0VUX1RZUEUgaGFuZGxpbmcuCgkoYnVpbGRfcHRybWVtZnVuYyk6IFBhc3MgMSB0byBucHRycy4KCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IFVzZSBjb21wX3B0cl90dHlwZXMuCgoxOTk4LTA4LTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc2VhcmNoLmMgKGRlcGVuZGVudF9iYXNlX3ApOiBEb24ndCBjb21wYXJlIGEgYmluZm8gdG8KCWN1cnJlbnRfY2xhc3NfdHlwZTsgdXNlIHRoZSBUUkVFX1RZUEUgb2YgdGhlIGJpbmZvIGluc3RlYWQuCgoJKiBjcC10cmVlLmggKENMQVNTX1RZUEVfUCk6IFJldmlzZSBkZWZpbml0aW9uLgoKMTk5OC0wOC0yNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBjb21wbGFpbiBhYm91dCBkaWZmZXJlbnQKCWV4Y2VwdGlvbnMgZnJvbSBhbiBpbnRlcm5hbCBkZWNsIGV2ZW4gaWYgcGVkYW50aWMuCgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IENvbnZlcnRpbmcgZnJvbSBwbSBvZiB2YmFzZQoJdG8gZGVyaXZlZCBpcyBhbiBlcnJvciwgbm90IGEgc29ycnkuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFVzZSBjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCBmb3IgJ3RoaXMnLgoJKiBjbGFzcy5jIChmaXhlZF90eXBlX29yX251bGwpOiBSZW5hbWUgZnJvbQoJcmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wLiAgUmV0dXJuIHRoZSBkeW5hbWljIHR5cGUgb2YgdGhlCglleHByZXNzaW9uLCBpZiBmaXhlZCwgb3IgbnVsbC4KCShyZXNvbHZlc190b19maXhlZF90eXBlX3ApOiBVc2UgaXQuICBSZXR1cm4gMCBpZiB0aGUgZHluYW1pYyB0eXBlCglkb2VzIG5vdCBtYXRjaCB0aGUgc3RhdGljIHR5cGUuCgkoYnVpbGRfdmJhc2VfcGF0aCk6IFJlbmFtZSAnYWxpYXNfdGhpcycgdG8gJ25vbm51bGwnLiAgVXNlCglyZXNvbHZlc190b19maXhlZF90eXBlX3AgYWdhaW4uCgoxOTk4LTA4LTI0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAodHN1YnN0X2RlY2wpOiBNb3ZlIHNwZWNpYWwgY2FzZSBjb2RlIGZvciBkZWFsaW5nIHdpdGgKCXRyaWNreSBmcmllbmQgdGVtcGxhdGVzIGhlcmUgZnJvbSAuLi4KCShyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZSk6IEhlcmUuCgoxOTk4LTA4LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBSZW1vdmUgcmVkdW5kYW50IGxpbmthZ2UgY2hlY2suCgoxOTk4LTA4LTI0ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBIYW5kbGUgdGhlIGNhc2UgdGhhdCB2YWx0eXBlCglpcyB3aWRlciB0aGFuIHRoZSBmdW5jdGlvbnMgcmV0dXJuIHR5cGUuCgoxOTk4LTA4LTI0ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChDTEFTU19UWVBFX1ApOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQgaW5zdGVhZCBvZiBJU19BR0dSX1RZUEUuCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgoKMTk5OC0wOC0yNCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBEZWNsYXJlLgoJKiBwdC5jIChkZWNsX3RlbXBsYXRlX3Bhcm1fcCk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChwdXNoZGVjbCk6IENoZWNrIGRlY2xzIGZvciByZWRlY2xhcmluZyB0ZW1wbGF0ZSBwYXJtcy4KCSh4cmVmX3RhZyk6IE1ha2UgcmVkZWNsYXJhdGlvbiBhbiBlcnJvciwgcHJpbnQgZGVjbC4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogQ2hlY2sgZmllbGRfZGVjbHMgZm9yIHJlZGVjbGFyYXRpb24gYXMgd2VsbC4KCjE5OTgtMDgtMjQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBGaXggdXAgdGhlIHR5cGUgb2Ygc3RyaW5nIGNvbnN0YW50cy4KCjE5OTgtMDgtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBNb3ZlIGNoZWNrIGZvciBvZGQgdXNlcwoJb2YgTlVMTCB0byBhdm9pZCBkdXBsaWNhdGUgd2FybmluZ3MuCgoxOTk4LTA4LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGx2YWx1ZV90eXBlKTogRml4IGZvciBhcnJheXMuCgkqIHR5cGVjay5jIChzdHJpbmdfY29udl9wKTogTmV3IGZuLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBVc2UgaXQuCgkoYnVpbGRfdW5hcnlfb3ApOiBVc2UgbHZhbHVlX3R5cGUuCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbiwgY29udmVydF9saWtlKTogVXNlIHN0cmluZ19jb252X3AuCgkoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFVzZSBsdmFsdWVfdHlwZS4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IElnbm9yZSAtdHJhZGl0aW9uYWwuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBmbGFnX3dyaXRhYmxlX3N0cmluZ3MgaW5oaWJpdHMKCWZsYWdfY29uc3Rfc3RyaW5ncy4KCjE5OTgtMDgtMjQgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oIChsYW5nX29wdGlvbnMpOiBBZGQgZmNvbnN0LXN0cmluZ3MgdG8gdGhlIGxpc3QKCW9mIHZhbGlkIG9wdGlvbnMuCgkqIGRlY2wyLmMgKGxhbmdfZl9vcHRpb25zLCBsYW5nX2RlY29kZV9vcHRpb24pOiBMaWtld2lzZS4KCjE5OTgtMDgtMjQgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IERvbid0IHdhcm4gYWJvdXQgbG9uZyBsb25nIGNvbnN0YW50cyBpZgoJd2UncmUgYWxsb3dpbmcgbG9uZyBsb25nLgoKMTk5OC0wOC0yNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBVc2UgSURFTlRJRklFUl9OQU1FU1BBQ0VfVkFMVUUgaW5zdGVhZCBvZgoJYWNjZXNzaW5nIGJpbmRpbmdzIGRpcmVjdGx5LgoKCSogc2VhcmNoLmMgKG15X3RyZWVfY29ucyk6IFJlaW1wbGVtZW50LgoKCSogbGFuZy1zcGVjcy5oOiBSZW1vdmUgX19IT05PUl9TVEQuCgkqIGluYy9leGNlcHRpb24sIGluYy9uZXcsIGluYy9uZXcuaCwgaW5jL3R5cGVpbmZvOiBMaWtld2lzZS4KCjE5OTgtMDgtMjMgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29tcGxhaW4gYWJvdXQgaW4tY2xhc3MgaW5pdGlhbGl6YXRpb24KCW9mIGFnZ3JlZ2F0ZXMgYW5kL29yIHJlZmVyZW5jZXMuCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IENsZWFyIElTX0FHR1JfVFlQRSBmb3IKCVRFTVBMQVRFX1RZUEVfUEFSTXMuCgoJKiBkZWNsMi5jIChncm9rX2FycmF5X2RlY2wpOiBBZGQgY29tbWVudC4KCShtYXJrX3VzZWQpOiBEb24ndCBpbnN0YW50aWF0ZSBhbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uLgoJKiBmcmllbmQuYyAobWFrZV9mcmllbmRfY2xhc3MpOiBSZW1vdmUgYm9ndXMgY29tbWVudC4gIEZpeCBjaGVjawoJZm9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zLgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IERvbid0CglTRVRfREVDTF9FWFBMSUNJVF9JTlNUQU5USUFUSU9OIGhlcmUuCgkobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IE9yIGhlcmUuCgkoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogRG8gaXQgaGVyZSwgaW5zdGVhZC4gIEFkZCBjaGVja3MgZm9yCglkdXBsaWNhdGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMsIGV0Yy4gIFRpZHkuCgkoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfZGVjbCk6IEltcHJvdmUgY29tbWVudHMuICBDb21wbGFpbiBhYm91dCBleHBsaWNpdAoJaW5zdGFudGlhdGlvbnMgd2hlcmUgbm8gZGVmaW5pdGlvbiBpcyBhdmFpbGFibGUuCgoJKiBjcC10cmVlLmggKGFuc2lfbnVsbF9ub2RlKTogUmVtb3ZlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFdhcm4gYWJvdXQgY29udmVydGluZyBOVUxMIHRvIGFuCglhcml0aG1ldGljIHR5cGUuCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IExpa2V3aXNlLiAgVXNlCgludWxsX3B0cl9jc3RfcCBpbnN0ZWFkIG9mIGV4cGFuZGluZyBpdCBpbmxpbmUuCgkqIGRlY2wuYyAoYW5zaV9udWxsX25vZGUpOiBSZW1vdmUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBNYWtlIG51bGxfbm9kZSBhbHdheXMgaGF2ZSBpbnRlZ3JhbCB0eXBlLgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBXYXJuIGFib3V0IGNvbnZlcnRpbmcgTlVMTCB0byBhbgoJYXJpdGhtZXRpYyB0eXBlLgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IFJlbW92ZSBoYW5kbGluZyBvZiBhbnNpX251bGxfbm9kZS4KCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogRG9uJ3QgY29udmVydCBOVUxMIHRvIHZvaWQqIHR5cGUuCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogRml4IE5VTEwgd2FybmluZ3MuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFdhcm4gYWJvdXQgY29udmVydGluZyBOVUxMIHRvIGFuCglhcml0aG1ldGljIHR5cGUuCgkoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCjE5OTgtMDgtMjAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoc2VhcmNoX3RyZWUsIG5vX2xpbmthZ2VfaGVscGVyLCBub19saW5rYWdlX2NoZWNrKTogTmV3IGZuLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBVc2Ugbm9fbGlua2FnZV9jaGVjay4KCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IExpa2V3aXNlLgoJKGdyb2tmbmRlY2wpOiBMaWtld2lzZS4gIE1lbWJlcnMgb2YgYW5vbnltb3VzIHR5cGVzIGhhdmUgbm8gbGlua2FnZS4KCgkqIG1ldGhvZC5jIChwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBSZW1vdmUgdXNlbGVzcyBjb2RlLgoKMTk5OC0wOC0yMCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJSGFuZGxlIG5ldydpbmcgb2YgSmF2YSBjbGFzc2VzLgoJKiBpbml0LmMgKGJ1aWxkX2NsYXNzX2NsYXNzcmVmKTogIE5ldyBmdW5jdGlvbi4KCShidWlsZF9uZXdfMSk6ICBJZiB0eXBlIGlzIFRZUEVfRk9SX0pBVkE6ICBDYWxsIF9Kdl9BbGxvY09iamVjdDsKCWNvbnN0cnVjdG9yIGRvZXMgbm90IHJldHVybiB0aGlzOyAgZG9uJ3QgbmVlZCB0byBleGNlcHRpb24tcHJvdGVjdC4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6ICBDb3B5IFRZUEVfRk9SX0pBVkEgZmxhZy4KCSogZGVjbDIuYyAoYWNjZXB0YWJsZV9qYXZhX3R5cGUpOiAgSGFuZGxlIHRlbXBsYXRlLWRlcml2ZWQgdHlwZXMuCgoxOTk4LTA4LTIwICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogIFN1cHByZXNzIHZ0YWJsZXMgZm9yIEphdmEgY2xhc3Nlcy4KCjE5OTgtMDgtMjAgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEFsd2F5cyBtZXJnZSB0aGUgb2xkIGFuZCBuZXcgcGF0dGVybnMKCWZvciB0ZW1wbGF0ZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIG5ldyBvbmUgaGFzCglERUNMX0lOSVRJQUwuICBEb24ndCB0aHJvdyBhd2F5IHNwZWNpYWxpemF0aW9ucy4gIE1lcmdlCglERUNMX1NBVkVEX1RSRUUuCgkqIHB0LmMgKHRzdWJzdF9kZWNsKTogVXNlIHRoZSByaWdodCBwYXR0ZXJuIHdoZW4gY2FsY3VsYXRpbmcgdGhlCgljb21wbGV0ZSBhcmdzIGZvciBhIG5ldyB0ZW1wbGF0ZSBpbnN0YW5jZS4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKHJlZ2VuZXJhdGVfZGVjbF9mcm9tX3RlbXBsYXRlKTogRGVhbCB3aXRoIHRyaWNreSBmcmllbmQgdGVtcGxhdGUKCWNhc2UuCgkoaW5zdGFudGlhdGVfZGVjbCk6IExpa2V3aXNlLgoKVGh1IEF1ZyAyMCAwOTowOTo0NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpbml0LmMgKGJ1aWxkX2J1aWx0aW5fZGVsZXRlX2NhbGwpOiBBZGQgbWlzc2luZyBhc3NlbWJsZV9leHRlcm5hbAoJY2FsbC4KCjE5OTgtMDgtMjAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5vdHlwZV91bnF1YWxpZmllZF9pZCk6IEFsc28gYWNjZXB0IH5BPGludD4uCgoxOTk4LTA4LTE5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBXYXJuIG9uIHVzZSBvZiBOVUxMIGluCglhcml0aG1ldGljLgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBXYXJuIHdoZW4gTlVMTCBpcyB0aHJvd24sIGV2ZW4gd2l0aAoJLWFuc2kuICBVc2UgYW5zaV9udWxsX25vZGUsIHJhdGhlciB0aGFuIGludGVnZXJfemVyb19ub2RlLCBpbiB0aGUKCXRocm93biBleHByZXNzaW9uLgoKCSogY3AtdHJlZS5oIChhbnNpX251bGxfbm9kZSk6IE5ldyB2YXJpYWJsZS4KCSogZGVjbC5jIChhbnNpX251bGxfbm9kZSk6IE5ldyB2YXJpYWJsZS4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEluaXRpYWxpemUgaXRzIHR5cGUuCgkqIGxleC5jIChpbml0X3BhcnNlKTogSW5pdGlhbGl6ZSBpdHMgdmFsdWUuICBVc2UgYW5zaV9udWxsX25vZGUKCWZvciBudWxsX25vZGUgaW4gbm9uLUFOU0kgbW9kZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBVc2UgYW5zaV9udWxsX25vZGUgaW4KCXBsYWNlIG9mIG51bGxfbm9kZSB0byBhdm9pZCBzcHVyaW91cyBlcnJvcnMuCgoxOTk4LTA4LTE3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChlbnRlcl9zY29wZV9vZik6IE5ldyBmdW5jdGlvbi4KCSogcGFyc2UueSAoY29tcGxleF9kaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBVc2UgaXQuCgkqIHNlbWFudGljcy5jIChlbnRlcl9zY29wZV9vZik6IE5ldyBmdW5jdGlvbi4KCjE5OTgtMDgtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogTm8sIGhlcmUuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2F0Y2ggcGFybSB3aXRoIHBvaW50ZXIgdG8gYXJyYXkgb2YKCXVua25vd24gYm91bmQgaGVyZS4uLgoJKiBtZXRob2QuYyAocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogLi4ubm90IGhlcmUuCgoJKiBneHhpbnQudGV4aTogUmVtb3ZlIG9ic29sZXRlIGRvY3VtZW50YXRpb24gb2Ygb3ZlcmxvYWRpbmcgY29kZS4KCgkqIGRlY2wuYyAoZmluaXNoX2VudW0pOiBBbHNvIHNldCBUWVBFX1NJWkVfVU5JVC4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9iaXRzKTogTGlrZXdpc2UuCgoJKiB0cmVlLmMgKGx2YWx1ZV90eXBlKTogRml4IGZvciBhcnJheXMuCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IFVzZSBsdmFsdWVfdHlwZS4KCSogY2FsbC5jIChhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSWdub3JlIC10cmFkaXRpb25hbC4KCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IERvbid0IG1lc3Mgd2l0aCBlcnJvcl9tYXJrX25vZGUuCgkqIGxleC5jIChkb19zY29wZWRfaWQpOiBVc2UgY3BfZXJyb3IuCgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IERvbid0IG1lc3Mgd2l0aCB0aGUgY29udGV4dCBmb3Igbm93LgoKMTk5OC0wOC0xNyAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsb29ueS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFsbG93IGFub255bW91cyB0eXBlcyB0byBiZSBjdi1xdWFsaWZpZWQuCgpNb24gQXVnIDE3IDEwOjQwOjE4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNwLXRyZWUuaCAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUpOiBQcm92aWRlIHByb3RvdHlwZS4KCgkqIGRlY2wyLmMgKGRvX25hbWVzcGFjZV9hbGlhcyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBiaW5kaW5nJwoJYW5kIGBvbGQnLgoKRnJpIEF1ZyAxNCAxNjo0MjoyNyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IFJlbmFtZSBCQklTT04gdG8gQklTT04gc28gdGhhdCBpdCBjYW4gYmUgcHJvcGVybHkKCWluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgbWFrZWZpbGUuCgoxOTk4LTA4LTEzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1maW5pdC1wcmlvcml0eS4KCSogZGVjbDIuYzogTGlrZXdpc2UuICBDaGVjayBmbGFnX2luaXRfcHJpb3JpdHkgaW5zdGVhZCBvZgoJVVNFX0lOSVRfUFJJT1JJVFkuCgoJKiBkZWNsMi5jIChzZXR1cF9pbml0cCk6IE5ldyBmbi4KCShzdGFydF9vYmplY3RzLCBmaW5pc2hfb2JqZWN0cywgZG9fY3RvcnMpOiBIYW5kbGUgaW5pdF9wcmlvcml0eS4KCShkb19kdG9ycywgZmluaXNoX2ZpbGUpOiBMaWtld2lzZS4KCjE5OTgtMDgtMTMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSHVzaCB3YXJuaW5nLgoKCSogcnR0aS5jIChnZXRfdGluZm9fZm4pOiBBbHNvIHNldCBERUNMX0lHTk9SRURfUC4KCjE5OTgtMDgtMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChwcmludF90ZW1wbGF0ZV9jb250ZXh0KTogRG9uJ3QgYWJvcnQgd2hlbiBpbnN0YW50aWF0aW5nIGEKCXN5bnRoZXNpemVkIG1ldGhvZC4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJc3N1ZSBlcnJvcnMgb24gbmFtZXNwYWNlIHF1YWxpZmllZAoJZGVjbGFyYXRvcnMgaW4gcGFyYW1ldGVyIGxpc3RzIG9yIGluIGNsYXNzIHNjb3BlLgoKMTk5OC0wOC0wOSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogRG9uJ3QgYWJvcnQgb24gYm9ndXMKCWV4cGxpY2l0IGluc3RhbnRpYXRpb25zLgoKMTk5OC0wOC0wNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBVc2UgY29tcGxldGVfdHlwZV9vcl9lbHNlLgoJKGNvbXBsZXRlX3R5cGVfb3JfZWxzZSk6IEFsd2F5cyByZXR1cm4gTlVMTF9UUkVFIG9uIGZhaWx1cmUsIGFzCglkb2N1bWVudGVkLgoKCSogcHQuYyAodHN1YnN0X2FnZ3JfdHlwZSk6IFByb3RvdHlwZS4KCSh0c3Vic3RfZGVjbCk6IE5ldyBmdW5jdGlvbiwgc3BsaXQgb3V0IGZyb20gdHN1YnN0LiAgU2V0CglpbnB1dF9maWxlbmFtZSBhbmQgbGluZW5vIGFzIGFwcHJvcHJpYXRlLgoJKHBvcF90aW5zdF9sZXZlbCk6IFJlc3RvcmUgdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHNhdmVkIGluCglwdXNoX3RpbnN0X2xldmVsLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogU2V0IGlucHV0X2ZpbGVuYW1lIGFuZCBsaW5lbm8gYXMKCWFwcHJvcHJpYXRlLgoJKHRzdWJzdCk6IE1vdmUgX0RFQ0wgcHJvY2Vzc2luZyB0byB0c3Vic3RfZGVjbC4gIE1ha2Ugc3VyZSB0aGUKCWNvbnRleHQgZm9yIGEgVFlQRU5BTUVfVFlQRSBpcyBjb21wbGV0ZS4KCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IElzc3VlIGVycm9ycyBvbiBiaXRmaWVsZHMgZGVjbGFyZWQgd2l0aAoJZnVuY3Rpb24gdHlwZS4KCShkb19kdG9ycyk6IEFzIGluIGRvX2N0b3JzLCBwcmV0ZW5kIHRvIGJlIGEgbWVtYmVyIG9mIHRoZSBzYW1lCgljbGFzcyBhcyBhIHN0YXRpYyBkYXRhIG1lbWJlciB3aGlsZSBnZW5lcmF0aW5nIGEgY2FsbCB0byBpdHMKCWRlc3RydWN0b3IuCgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogSGFuZGxlIE5VTEwgcG9pbnRlcgoJY29udmVyc2lvbnMsIGV2ZW4gaW4gY29tcGxleCB2aXJ0dWFsIGJhc2UgY2xhc3MgaGllcmFyY2hpZXMuCgoxOTk4LTA4LTA2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChFTlVNX1RFTVBMQVRFX0lORk8pOiBOZXcgbWFjcm8uCgkoVFlQRV9URU1QTEFURV9JTkZPKTogTGlrZXdpc2UuCgkoU0VUX1RZUEVfVEVNUExBVEVfSU5GTyk6IExpa2V3aXNlLgoJKEVOVU1fVElfVEVNUExBVEUpOiBMaWtld2lzZS4KCShFTlVNX1RJX0FSR1MpOiBMaWtld2lzZS4KCShsb29rdXBfbmVzdGVkX3R5cGVfYnlfbmFtZSk6IFJlbW92ZS4KCSogZGVjbC5jIChtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBIYW5kbGUgZW51bXMuCgkoc3RhcnRfZW51bSk6IERvbid0IGNoZWNrIGZvciBwcmltYXJ5LXRlbXBsYXRlIGVudW0gZGVjbGFyYXRpb25zCgloZXJlLgoJKGZpbmlzaF9lbnVtKTogQ2xlYW4gdXAsIGRvY3VtZW50LiAgTWFrZSBzdXJlIHRlbXBsYXRlIGVudW0KCWNvbnN0YW50cyBnZXQgdGhlIGNvcnJlY3QgdHlwZS4KCShidWlsZF9lbnVtZXJhdG9yKTogQ29weSBpbml0aWFsaXplcnMgZm9yIHRlbXBsYXRlIGVudW1lcmF0aW9ucywKCXRvby4KCShncm9rX2VudW1fZGVjbHMpOiBEb2N1bWVudC4KCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBEb2N1bWVudCB1c2Ugb2YgTE9PS1VQX0VYUFIgYSBiaXQKCWJldHRlci4gIEJ1aWxkIExPT0tVUF9FWFBScyBmb3IgbG9jYWwgdmFyaWFibGVzLCBldmVuIGlmIHRoZXkgYXJlCglUUkVFX1BFUk1BTkVOVC4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBSZW1vdmUgZmllbGRfY2hhaW4gcGFyYW1ldGVyLgoJKHRlbXBsYXRlX2NsYXNzX2RlcHRoKTogSW5jbHVkZSB0aGUgZGVwdGggb2Ygc3Vycm91bmRpbmcgZnVuY3Rpb24KCWNvbnRleHRzLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENoZWNrIGZvciBwcmltYXJ5LXRlbXBsYXRlIGVudW0gZGVjbGFyYXRpb25zCgloZXJlLiAgRGVhbCB3aXRoIGVudW1lcmF0aW9uIHRlbXBsYXRlcy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogTGlrZXdpc2UuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEb24ndCBjYWxsIHRzdWJzdF9lbnVtIGRpcmVjdGx5LAoJY2FsbCB0c3Vic3QgaW5zdGVhZCwgdG8gaW5zdGFudGlhdGUgZW51bXMuICBEZWFsIHdpdGggYWxsCglmaWVsZF9jaGFpbiBpc3N1ZXMgaGVyZSwgbm90IGluIHRzdWJzdF9lbnVtLgoJKGxvb2t1cF9uZXN0ZWRfdHlwZV9ieV9uYW1lKTogUmVtb3ZlLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBSZXZpc2UgaGFuZGxpbmcgb2YgZW51bWVyYXRpb24gdHlwZXMuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSh0c3Vic3RfZXhwcik6IENhbGwgdHN1YnN0LCBub3QgdHN1YnN0X2VudW0gZm9yIFRBR19ERUZOcy4KCjE5OTgtMDgtMDQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBEb24ndCBtYW5nbGUgdGhlIG5hbWUgb2YgYSBUWVBFX0RFQ0wgaWYgaXQKCXVzZXMgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogbWV0aG9kLmMgKGJ1aWxkX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBVc2UgdGhlIGZ1bGwgc2V0IG9mCgl0ZW1wbGF0ZSBhcmd1bWVudHMgZm9yIHRzdWJzdCdpbmcuCgkoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IFBhc3MgdGhlIGZ1bGwgc2V0IG9mIHRlbXBsYXRlCglhcmd1bWVudHMgdG8gYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcywgbm90IGp1c3QgdGhlCglpbm5lcm1vc3RfYXJncy4KCSogcHQuYyAoVE1QTF9BUkdTX0RFUFRIKTogRGVmaW5lIHVzaW5nCglUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMsIGZvciBjbGFyaXR5LgoJKE5VTV9UTVBMX0FSR1MpOiBOZXcgbWFjcm8uCgkoYWRkX291dGVybW9zdF90ZW1wbGF0ZV9hcmdzKTogRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBvdXRlcgoJYXJncyB3aWxsIGJlIGNvbXBsZXRlbHkgZGlzY2FyZGVkLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IFVzZSB0aGUgZnVsbCBzZXQgb2YgdGVtcGxhdGUgYXJndW1lbnRzCglmb3IgdHN1YnN0J2luZy4gIFNpbXBsaWZ5LiAgQWRkIHNvbWUgYXNzZXJ0cy4gIEltcHJvdmUKCWVycm9yIG1lc3NhZ2VzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFBhc3MgdGhlIGZ1bGwgc2V0IG9mIHRlbXBsYXRlIGFyZ3VtZW50cwoJdG8gY29lcmNlX3RlbXBsYXRlX3Bhcm1zLgoJKHRzdWJzdCk6IEFkZCBhc3NlcnRpb24uCgkoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogRG9uJ3QgaW5zdGFudGlhdGUgbWVtYmVyIHRlbXBsYXRlCgljbGFzc2VzLgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogRGVhbCB3aXRoIGEgVEVNUExBVEVfSURfRVhQUiB3aG9zZQoJbmFtZSBpcyBhIExPT0tVUF9FWFBSLCByYXRoZXIgdGhhbiBhbiBJREVOVElGSUVSX05PREUuCgoxOTk4LTA4LTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoc2V0X21hbmdsZWRfbmFtZV9mb3JfZGVjbCk6IENoYW5nZSByZXR1cm4gdHlwZSB0byB2b2lkLgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogQSBuYW1lc3BhY2UtbGV2ZWwgZGVjbCB0YWtlcyBwcmlvcml0eQoJb3ZlciBpbXBsaWNpdCB0eXBlbmFtZS4gIEF2b2lkIGRvaW5nIHRoZSBzYW1lIGxvb2t1cCB0d2ljZS4KCgkqIHNlYXJjaC5jIChkZXBlbmRlbnRfYmFzZV9wKTogTmV3IGZuLgoJKGRmc19wdXNoZGVjbHMsIGRmc19jb21wcmVzc19kZWNscyk6IFVzZSBpdC4KCgkqIHR5cGVjay5jIChnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYyk6IERvbid0IHRyeSB0byBoYW5kbGUKCXZpcnR1YWwgZnVuY3Rpb25zIGlmIHRoZSB0eXBlIGRvZXNuJ3QgaGF2ZSBhbnkuCgoxOTk4LTA4LTAzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRG9uJ3QgbWFuZ2xlIHRoZSBuYW1lIG9mIGEgVFlQRV9ERUNMIGlmIGl0Cgl1c2VzIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoxOTk4LTA4LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5kZWYgKExPT0tVUF9FWFBSKTogRG9jdW1lbnQuICBSZW1vdmUgc2Vjb25kIGFyZ3VtZW50LgoJKiBjcC10cmVlLmggKERFQ0xfVElfVEVNUExBVEUpOiBJbXByb3ZlIGRvY3VtZW50YXRpb24uCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgdXNlIGEgc2Vjb25kIGFyZ3VtZW50LCBvciBhIHR5cGUsCgl3aGVuIGJ1aWxkaW5nIExPT0tVUF9FWFBScy4KCShkb19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoZG9fc2NvcGVkX2lkKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IERvbid0IG5lZWRsZXNzbHkgY2FsbAoJY29weV90b19wZXJtYW5lbnQgb3IgYnVpbGRfbWluLgoJKHRzdWJzdF9jb3B5KTogUmVtb3ZlICNpZiAwJ2QgY29kZS4gIHRzdWJzdCBpbnRvIExPT0tVUF9FWFBScyBpZgoJbmVjZXNzYXJ5LgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IEltcHJvdmUgZXJyb3IgbWVzc2FnZS4KCSogdHJlZS5jIChtYXBjYXIsIGNhc2UgTE9PS1VQX0VYUFIpOiBEb24ndCBiZSBzb3JyeTsgbWFrZSBhIGNvcHkuCgkoYnVpbGRfbWluKTogQ29weSB0aGUgdHlwZSB0byB0aGUgcGVybWFuZW50IG9ic3RhY2ssIHRvby4KCjE5OTgtMDgtMDEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaW5pdF9pbml0X3Byb2Nlc3NpbmcpOiBSZW1vdmUgQkkqIGhhbmRsaW5nLgoJKGJ1aWxkX2J1aWx0aW5fY2FsbCk6IFJlbW92ZS4KCShidWlsZF9idWlsdGluX2RlbGV0ZV9jYWxsKTogTmV3IGZuLgoJKGJ1aWxkX2RlbGV0ZSk6IFVzZSBpdC4KCjE5OTgtMDctMzEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjcC10cmVlLmggKFBST0NFU1NJTkdfUkVBTF9URU1QTEFURV9ERUNMX1ApOiBOZXcgbWFjcm8uCgkobWF5YmVfY2hlY2tfdGVtcGxhdGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCSogZGVjbC5jIChtYXliZV9wcm9jZXNzX3RlbXBsYXRlX3R5cGVfZGVjbGFyYXRpb24pOiBOZXcgZnVuY3Rpb24sCglzcGxpdCBvdXQgZnJvbSBwdXNodGFnICBDYWxsIG1heWJlX2NoZWNrX3RlbXBsYXRlX3R5cGUuCgkocHVzaHRhZyk6IFVzZSBpdC4gIFVzZSBQUk9DRVNTSU5HX1JFQUxfVEVNUExBVEVfREVDTF9QLgoJKHhyZWZfdGFnKTogVXNlIFBST0NFU1NJTkdfUkVBTF9URU1QTEFURV9ERUNMX1AuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBVc2UgUFJPQ0VTU0lOR19SRUFMX1RFTVBMQVRFX0RFQ0xfUC4KCSogcHQuYyAodGVtcGxhdGVfY2xhc3NfZGVwdGhfcmVhbCk6IEdlbmVyYWxpemF0aW9uIG9mIC4uLgoJKHRlbXBsYXRlX2NsYXNzX2RlcHRoKTogVXNlIGl0LgoJKHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogVXNlIGR1cGxpY2F0ZV9kZWNscyBmb3IgZHVwbGljYXRlCglkZWNsYXJhdGlvbnMgb2Ygc3BlY2lhbGl6YXRpb25zLgoJKG1heWJlX2NoZWNrX3RlbXBsYXRlX3R5cGUpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBGaXggY29tbWVudC4KCShjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4gIEF2b2lkIGFuIGluZmluaXRlIGxvb3Agb24KCWVycm9uZW91cyBjb2RlLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBGaXggY29tbWVudC4KCSh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IERlYWwgd2l0aCBhIERFQ0xfVElfVEVNUExBVEUgdGhhdCBpcwoJYW4gSURFTlRJRklFUl9OT0RFLgoJKiBzZW1hbnRpY3MuYyAoYmVnaW5fZnVuY3Rpb25fZGVmaW5pdGlvbik6IFVzZQoJcmVzZXRfc3BlY2lhbGl6YXRpb24gdG8gbm90ZSB0aGF0IHRlbXBsYXRlIGhlYWRlcnMgZG9uJ3QgYXBwbHkKCWRpcmVjdGx5IHRvIGRlY2xhcmF0aW9ucyBhZnRlciB0aGUgb3BlbmluZyBjdXJseSBmb3IgYSBmdW5jdGlvbi4KCjE5OTgtMDctMjkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBVc2UgY3VycmVudF9uYW1lc3BhY2UgaW5zdGVhZCBvZgoJREVDTF9DT05URVhUIChkZWNsKSB0byBkZXRlcm1pbmUgd2hlcmUgd2UgZ28uCgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBGaXggdHlwby4KCjE5OTgtMDctMjggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogQmUgbGVuaWVudCB3aXRoIG1lbWJlciBmdW5jdGlvbnMgdG8gZGVhbAoJd2l0aCBuZXN0ZWQgZnJpZW5kcy4KCjE5OTgtMDctMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENvbnZlcnQgaW50ZWdlcl96ZXJvX25vZGUgdG8KCXNzaXpldHlwZSBiZWZvcmUgcGFzc2luZyBpdCB0byBzZXRfcnR0aV9lbnRyeS4KCSogdHlwZWNrMi5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWxsb3cgY29udmVyc2lvbiBvZiAwCglvZiBhbnkgc2l6ZSB0byBhIHBvaW50ZXIuCgoxOTk4LTA3LTI3ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChUSV9VU0VTX1RFTVBMQVRFX1BBUk1TKTogUmVtb3ZlLgoJKGJ1aWxkX3RlbXBsYXRlX2RlY2xfb3ZlcmxvYWQpOiBSZW1vdmUuCgkoc2V0X21hbmdsZWRfbmFtZV9mb3JfZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShpbm5lcm1vc3RfYXJncyk6IFJlbW92ZSBpc19zcGVjIHBhcmFtZXRlci4KCShtb3N0X3NwZWNpYWxpemVkLCBtb3N0X3NwZWNpYWxpemVkX2NsYXNzKTogUmVtb3ZlIGRlY2xhcmF0aW9ucy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBZGQgZW50ZXJpbmdfc2NvcGUgcGFyYW1ldGVyLgoJKG1heWJlX3Byb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKGZpbmlzaF90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBDbGVhbiB1cCBwcm9jZXNzaW5nIG9mIG1lbWJlciB0ZW1wbGF0ZQoJc3BlY2lhbGl6YXRpb25zLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBGaXggZm9ybWF0dGluZy4KCShsb29rdXBfdGFnKTogSW1wcm92ZSBoYW5kbGluZyBvZiBwc2V1ZG8tZ2xvYmFsIGxldmVscy4KCShtYWtlX3R5cGVuYW1lX3R5cGUpOiBBZGp1c3QgY2FsbCB0byBsb29rdXBfdGVtcGxhdGVfY2xhc3MuCgkoc2hhZG93X3RhZyk6IFVzZSBtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24uCgkoeHJlZl90YWcpOiBJbXByb3ZlIGhhbmRsaW5nIG9mIG1lbWJlciBmcmllbmRzLgoJKHN0YXJ0X2Z1bmN0aW9uKTogQ2FsbCBwdXNoX25lc3RlZF9jbGFzcyBiZWZvcmUKCXB1c2hfdGVtcGxhdGVfZGVjbC4gIERvbid0IGNhbGwgcHVzaF90ZW1wbGF0ZV9kZWNsIGZvcgoJc3BlY2lhbGl6YXRpb25zLgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IERvbid0IGNhbGwgeHJlZl90YWcgZm9yCgl0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucy4gIEhhbmRsZSBVTklPTl9UWVBFcyBsaWtlIFJFQ09SRF9UWVBFcy4KCShncm9rY2xhc3Nmbik6IFVzZSBzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsLgoJKGFyZ19hc3NvY19jbGFzcyk6IEFkanVzdCBjYWxsIHRvIGlubmVybW9zdF9hcmdzLgoJKG1hcmtfdXNlZCk6IERvbid0IGNhbGwgaW5zdGFudGlhdGVfZGVjbCBmb3IgYSBURU1QTEFURV9ERUNMLgoJKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX25hbWUpOiBJbXByb3ZlIHByaW50aW5nIG9mIHRlbXBsYXRlCglmdW5jdGlvbiBuYW1lcy4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IERvbid0IGNvbXBhcmUgdHlwZXMgb2YgZGVjbHMgdG8gZGV0ZXJtaW5lCglmcmllbmRzaGlwLCB1bmxlc3MgZmxhZ19ndWlkaW5nX2RlY2xzLgoJKG1ha2VfZnJpZW5kX2NsYXNzKTogUGFydGlhbCBzcGVjaWFsaXphdGlvbnMgY2Fubm90IGJlIGZyaWVuZHMuCgkoZG9fZnJpZW5kKTogVXNlIHNldF9tYW5nbGVkX25hbWVfZm9yX2RlY2wuICBDYWxsCglwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCBpbnN0ZWFkIG9mIHB1c2hfdGVtcGxhdGVfZGVjbC4KCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IFJlbW92ZSBwcm90b3R5cGUuICBHaXZlIGl0CglleHRlcm5hbCBsaW5rYWdlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZmVyKTogQWRqdXN0IGNhbGwgdG8gaW5uZXJtb3N0X2FyZ3MuCgkoYnVpbGRfdGVtcGxhdGVfZGVjbF9vdmVybG9hZCk6IFJlbW92ZS4KCShzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKiBwYXJzZS55ICguZmluaXNoX3RlbXBsYXRlX3R5cGUpOiBOZXcgbm9uLXRlcm1pbmFsLgoJKHRlbXBsYXRlX2RlZik6IFVzZSBmaW5pc2hfdGVtcGxhdGVfZGVjbC4gIFVzZSB0ZW1wbGF0ZV9leHRkZWYKCWluc3RlYWQgb2YgZXh0ZGVmLgoJKHRlbXBsYXRlX2V4dGRlZiwgdGVtcGxhdGVfZGF0YWRlZik6IE5ldyBub24tdGVybWluYWxzLCBjb250YWluaW5nCglvbmx5IHRob3NlIHJ1bGVzIGZvciB0aGluZ3Mgd2hpY2ggY2FuIGJlIHRlbXBsYXRlcy4KCShkYXRhZGVmKTogVGlkeS4KCSh0ZW1wbGF0ZV90eXBlLCBzZWxmX3RlbXBsYXRlX3R5cGUpOiBVc2UgLmZpbmlzaF90ZW1wbGF0ZV90eXBlLgoJKG5hbWVkX2NsYXNzX2hlYWQpOiBVc2UgbWF5YmVfcHJvY2Vzc19wYXJ0aWFsX3NwZWNpYWxpemF0aW9uLgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBSZW1vdmUgY29udGV4dCBwYXJhbWV0ZXIuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogUmVtb3ZlIG91dGVyX2FyZ3MgcGFyYW1ldGVyLgoJKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBSZW1vdmUuCgkoYWRkX291dGVybW9zdF90ZW1wbGF0ZV9hcmdzKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogUmV0dXJuIHRoZSBzcGVjaWFsaXphdGlvbi4KCSh1bnJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHRzdWJzdF90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoJKG1vc3Rfc3BlY2lhbGl6ZWQsIG1vc3Rfc3BlY2lhbGl6ZWRfY2xhc3MpOiBQcm90b3R5cGUgaGVyZSBhcwoJc3RhdGljLgoJKG9yaWdpbmFsX3RlbXBsYXRlKTogUmVuYW1lIHRvIG1vc3RfZ2VuZXJhbF90ZW1wbGF0ZS4KCSh0c3Vic3RfdGVtcGxhdGVfcGFybXMpOiBOZXcgZnVuY3Rpb24uCgkoc2V0X21hbmdsZWRfbmFtZV9mb3JfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKFRNUExfQVJHU19ERVBUSCk6IE5ldyBtYWNyby4KCShUTVBMX0FSR1NfSEFWRV9NVUxUSVBMRV9MRVZFTFMpOiBBZGp1c3QuCgkoVE1QTF9BUkdTX0xFVkVMKTogTmV3IG1hY3JvLgoJKFNFVF9UTVBMX0FSR1NfTEVWRUwpOiBMaWtld2lzZS4KCShUTVBMX0FSRyk6IExpa2V3aXNlLgoJKFNFVF9UTVBMX0FSRyk6IExpa2V3aXNlLgoJKFRNUExfQVJHU19ERVBUSCk6IExpa2V3aXNlLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IFVzZSBmaW5pc2hfdGVtcGxhdGVfZGVjbC4KCShtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dAoJZnJvbSB0c3Vic3QuCgkoaW5saW5lX25lZWRzX3RlbXBsYXRlX3Bhcm1zKTogVXNlIFRNUExfUEFSTVNfREVQVEguCgkobWF5YmVfYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBVc2UgbmV3IG1hY3Jvcy4KCShpc19tZW1iZXJfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShpc19tZW1iZXJfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCShhZGRfdG9fdGVtcGxhdGVfYXJncyk6IExpa2V3aXNlLiAgRGVhbCB3aXRoIG11bHRpcGxlIGxldmVscyBvZgoJYXJncy4KCShtYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24pOiBOZXcgZnVuY3Rpb24uCgkocmV0cmlldmVfc3BlY2lhbGl6YXRpb24pOiBBZGQgY29uc2lzdGVuY3kgY2hlY2suCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogUmV0dXJuIGZ1bGwgYXJndW1lbnQgbGlzdC4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IFR3ZWFrIGZyaWVuZCBoYW5kbGluZy4gIFVzZSBmdWxsCglhcmd1bWVudCBsaXN0cy4gIFNpbXBsaWZ5LgoJKGN1cnJlbnRfdGVtcGxhdGVfYXJncyk6IFVzZSBuZXcgbWFjcm9zLgoJKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogQ2hhbmdlIGlsbC1uYW1lZCBtYWluYXJncyB0byBzcGVjYXJncy4KCUNoZWNrIHRoYXQgYSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIGFjdHVhbGx5IHNwZWNpYWxpemVzIGF0IGxlYXN0CglvbmUgcGFyYW1ldGVyLiAgIEltcHJvdmUgZnJpZW5kIGhhbmRsaW5nLiAgTW9kaWZ5IGZvciBmdWxsCgl0ZW1wbGF0ZSBhcmd1bWVudHMuCgkoY2xhc3N0eXBlX21hbmdsZWRfbmFtZSk6IERvbid0IG1hbmdsZSB0aGUgbmFtZXMgb2YKCXNwZWNpYWxpemF0aW9ucy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBBZGQgZW50ZXJpbmdfc2NvcGUgcGFyYW1ldGVyLiAgVXNlIGl0IHRvCglhdm9pZCBmaW5kaW5nIGEgdGVtcGxhdGUgdHlwZSB3aGVuIGFuIGluc3RhbnRpYXRpb24gaXMgcmVxdWlyZWQuCglTaW1wbGlmeS4gIFVzZSBmdWxsIHRlbXBsYXRlIGFyZ3VtZW50cy4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uKTogVXNlIHVucmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24uICBVc2UgbmV3CgltYWNyb3MuICBVc2UgZnVsbCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgkodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IFN1YnN0aXR1dGUsIHVzaW5nIHRzdWJzdF90ZW1wbGF0ZV9wYXJtcywKCWludG8gdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0bwoJcmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogU2ltcGxpZnkuICBVc2UgZnVsbCB0ZW1wbGF0ZQoJYXJndW1lbnRzLiAgQWRqdXN0IGNhbGxzIHRvIGdldF9jbGFzc19iaW5kaW5ncy4gIFVzZQoJU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRSB3aGVyZSBuZWVkZWQuICBJbXByb3ZlIGZyaWVuZCBoYW5kbGluZy4KCShpbm5lcm1vc3RfYXJncyk6IFVzZSBuZXcgbWFjcm9zLgoJKHRzdWJzdF9hZ2dyX3R5cGUpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dCBmcm9tIHRzdWJzdC4KCSh0c3Vic3QpOiBVc2UgdHN1YnN0X2FnZ3JfdHlwZSwgdHN1YnN0X3RlbXBsYXRlX3Bhcm1zLCBuZXcgY2FsbGluZwoJY29udmVudGlvbnMgZm9yIGxvb2t1cF90ZW1wbGF0ZV9jbGFzcy4gIFJlZmluZSBoYW5kbGluZyBvZiBwYXJ0aWFsCglpbnN0YW50aWF0aW9ucy4gICBSZW1vdmUgY2FsbHMgdG8gY29tcGxldGVfdGVtcGxhdGVfYXJncy4KCVNpbXBsaWZ5LiAgQWRkIGNvbnNpc3RlbmN5IGNoZWNrcy4gIFVzZSBzZXRfbWFuZ2xlZF9uYW1lX2Zvcl9kZWNsCglhbmQgc2V0X21hbmdsZWRfbmFtZV9mb3JfdGVtcGxhdGVfZGVjbC4KCSh0c3Vic3RfY29weSk6IFVzZSB0c3Vic3RfYWdncl90eXBlLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVXNlIGZ1bGwgdGVtcGxhdGUgYXJndW1lbnRzLgoJKG1vcmVfc3BlY2lhbGl6ZWQpOiBJbXByb3ZlIGZvcm1hdHRpbmcuCgkobW9yZV9zcGVjaWFsaXplZF9jbGFzcyk6IEFkanVzdCBjYWxscyB0byBnZXRfY2xhc3NfYmluZGluZ3MuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBEb24ndCBjYWxsIGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MuCgkobW9zdF9zcGVjaWFsaXplZCk6IERvbid0IG92ZXJ3cml0ZSBpbnB1dDsgY3JlYXRlIGEgbmV3IGxpc3QuCgkobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IFVzZSBtb3N0X2dlbmVyYWxfdGVtcGxhdGUuCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBVc2UgdW5yZWdpc3Rlcl9zcGVjaWFsaXphdGlvbi4KCVVzZSBmdWxsIHRlbXBsYXRlIGFyZ3VtZW50cy4KCShpbnN0YW50aWF0ZV9kZWNsKTogVXNlIGZ1bGwgdGVtcGxhdGUgYXJndW1lbnRzLgoJKHNldF9tYW5nbGVkX25hbWVfZm9yX3RlbXBsYXRlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkqIHNlbWFudGljcy5jIChiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogVXNlCgltYXliZV9wcm9jZXNzX3BhcnRpYWxfc3BlY2lhbGl6YXRpb24uCgkoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoJKGZpbmlzaF90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCgkodHlwZWNrLmMpOiBEb24ndCBjcmFzaCBhZnRlciBpc3N1aW5nIGEgY29tcGlsZXJfZXJyb3IuCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBBZGp1c3Q7IHdlIHJlbW92ZWQgYSBzL3IgY29uZmxpY3QuCgoxOTk4LTA3LTI3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IEhhbmRsZSBkZWZhdWx0LWluaXRpYWxpemF0aW9uLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBQYXNzIDEgdG8gcG9wY2xhc3MuCgoJKiBwYXJzZS55IChkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBBZGQgcHJlY2VkZW5jZSBkZWNsYXJhdGlvbgoJdG8gbm90eXBlX3VucXVhbGlmaWVkX2lkIGNhc2UuCgkqIE1ha2VmaWxlLmluIChFWFBFQ1QpOiBBZGp1c3QuCgoJKiB0cmVlLmMgKG92bF9tZW1iZXIpOiBGaXggZm9yIHNpbmdsZSBmdW5jdGlvbiBpbiBPVkwuCgoxOTk4LTA3LTI3ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjLWxleC5jICh5eWxleCk6IEZpeCBib3VuZGFyeSBjb25kaXRpb25zIGluIGNoYXJhY3RlciBsaXRlcmFsIGFuZAoJc3RyaW5nIGxpdGVyYWwgbG9vcHMuCgoxOTk4LTA3LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBPSywgZG8gcmV0dXJuIHRoZSBmcm9tX29iaiB2YWx1ZQoJdW5sZXNzIGdvdF9vYmplY3QgZGVwZW5kcyBvbiB0ZW1wbGF0ZSBwYXJtcy4KCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcl8xKTogUHVsbCBvdXQgdGhlIFRZUEVfTUFJTl9WQVJJQU5ULgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWxzbyBjb21wbGFpbiBhYm91dCBsb2NhbCBlbnVtcy4KCgkqIGNwLXRyZWUuaDogQWRkIHByb3RvdHlwZSBmb3Igc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWUuCgkqIGRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWVfd2l0aF9zY29wZSk6IE1ha2Ugc3RhdGljLAoJcHJvdG90eXBlLgoJKiBzZWFyY2guYyAoY292YXJpYW50X3JldHVybl9wKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChidWlsZF90ZXJtaW5hdGVfaGFuZGxlciwgYWxsb2NfZWhfb2JqZWN0KTogTGlrZXdpc2UuCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogT25seSBwdWxsIG91dCB0aGUgdHlwZSBvZiBhIGRlc3RydWN0b3IKCWlmIGl0J3MgYSB0ZW1wbGF0ZSB0eXBlIHBhcm0uCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IE5ldmVyIHJldHVybiB0aGUgZnJvbV9vYmogdmFsdWUuCgoxOTk4LTA3LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBDYWxsIHN0YXJ0X2RlY2xfMSBmb3IKCWNhdGNoIHBhcm0uCgkqIGRlY2wuYyAoc3RhcnRfZGVjbF8xKTogQXZvaWQgZHVwbGljYXRlIGVycm9yLgoKCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogT25seSBwZXJmb3JtIHRoZSBpbml0aWFsaXphdGlvbiBpZgoJaXQgd2lsbCBkbyBzb21ldGhpbmcuCgoxOTk4LTA3LTIzICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBwYXJzZS55IChiYXNlX2NsYXNzKTogQ2hlY2sgZm9yIGludmFsaWQgYmFzZSBjbGFzcy4KCjE5OTgtMDctMjMgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdGVtcGxhdGUpOiBGb2xkIGluLi4uCgkoaW1wb3J0X2V4cG9ydF9jbGFzcyk6IC4uLnRvIGhlcmUuICBIYW5kbGUgZGxsaW1wb3J0L2V4cG9ydC4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IFBhc3MgYXRfZW9mIHRvIGltcG9ydF9leHBvcnRfdnRhYmxlLgoJKHByZXBhcmVfZnJlc2hfdnRhYmxlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfY2xhc3MpOiBTcGxpdCBvdXQuLi4KCShmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBGcm9tIGhlcmUuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgaW1wb3J0X2V4cG9ydF9jbGFzcyBpZiBhdF9lb2YuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogI2lmIDAgbXlzdGVyaW91cyBjb2RlIEkgd3JvdGUgYW5kIGhhdmUKCWZvcmdvdHRlbiB3aHkuCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX2ZuKTogSWYgdGhpcyBpcyBmb3IgYSBjbGFzcyB0eXBlLCBzZXQKCURFQ0xfQ09OVEVYVC4KCjE5OTgtMDctMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluYy9leGNlcHRpb246IENoYW5nZSB0ZXJtaW5hdGUgYW5kIHVuZXhwZWN0ZWQgdG8gKCkuCgoJKiBwYXJzZS55IChuYW1lZF9jbGFzc19oZWFkX3NhbnNfYmFzZXR5cGVfZGVmbik6IEEKCW5hbWVkX2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSBmb2xsb3dlZCBieSAneycgb3IgJzonIGlzIGEgZGVmbi4KCjE5OTgtMDctMjEgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoY2Fub25pY2FsX3R5cGVfdmFyaWFudCk6IE5ldyBmbiB0byBoYW5kbGUgYXJyYXlzLgoJKiBjcC10cmVlLmggKENBTk9OSUNBTF9UWVBFX1ZBUklBTlQpOiBSZW1vdmUuCgkqIHB0LmMgKHVuaWZ5LCBkZWZhdWx0IGNhc2UpOiBBbHNvIGZvbGQgYXJnLiAgRml4IGFycmF5IGJvdW5kcyBjYXNlLgoJKiBtZXRob2QuYyAocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogVXNlIGJ1aWxkX292ZXJsb2FkX3ZhbHVlIGZvcgoJYXJyYXlzLgoKMTk5OC0wNy0yMCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmMgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkoR0VUX0VOVklST05NRU5UKTogTmV3IG1hY3JvLgoJKGluaXRfcGFyc2UpOiBTZXQgY2hhcmFjdGVyIHNldCBiYXNlZCBvbiBMQU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgoJKHJlYWxfeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWxzLgoJKHJlYWxfeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGxpdGVyYWxzLgoKMTk5OC0wNy0xOSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBMb29rIGZvciBjbGFzcyB2YWx1ZSBldmVuIGlmIHdlIGRvbid0CgloYXZlIGEgZ2xvYmFsIHZhbHVlLiAgRG8gaW1wbGljaXQgZGVjbGFyYXRpb24gaWYgcGFyc2luZyBpcyAyLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NhbGxfZXhwcik6IFBhc3MgMiBpZiB3ZSdyZSBkb2luZyBLb2VuaWcKCWxvb2t1cC4KCjE5OTgtMDctMTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEb24ndCBwdXQgb3V0IGRlYnVnZ2luZwoJaW5mb3JtYXRpb24gZm9yIHR5cGVzIHRoYXQgdXNlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBEb24ndCBwdXQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmb3IKCWNvbXBpbGVyLWdlbmVyYXRlZCB0eXBlZGVmcy4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogRG9uJ3QgY3Jhc2ggd2hlbiBwcmVzZW50ZWQgd2l0aAoJaW50UUlfdHlwZV9ub2RlIG9yIHRoZSBsaWtlLgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF90cmFuc2xhdGlvbl91bml0KTogRml4IHNwZWxsaW5nIGVycm9yIGluCgljb21tZW50LgoKMTk5OC0wNy0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogUHVsbCBvdXQgc2luZ2xlIGZ1bmN0aW9uIGhlcmUuCgkoc2VsZWN0X2RlY2wpOiBOb3QgaGVyZS4KCSh1bnF1YWxpZmllZF9uYW1lc3BhY2VfbG9va3VwKTogVXNlIENQX0RFQ0xfQ09OVEVYVC4KCgkqIGRlY2wuYyAocXVhbGlmeV9sb29rdXApOiBUd2VhayBhZ2Fpbi4KCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IG1lc3Mgd2l0aCB0aGUgY29udGV4dCBvZiB0aGUKCWluc3RhbnRpYXRpb24uCgkqIGRlY2wyLmMgKGN1cnJlbnRfZGVjbF9uYW1lc3BhY2UpOiBSZW1vdmUgc3BlY2lhbCBoYW5kbGluZyBmb3IKCXRlbXBsYXRlcy4KCgkqIHB0LmMgKHRzdWJzdCwgY2FzZSBGVU5DVElPTl9ERUNMKTogRml4IGdldHRpbmcgY29tcGxldGUgYXJncyBmb3IKCWEgbWVtYmVyIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uLgoKCSogdHJlZS5jIChvdmxfbWVtYmVyKTogVXNlIGRlY2xzX21hdGNoIHRvIGNvbXBhcmUgZnVuY3Rpb25zLgoJKiBkZWNsLmMgKGRlY2xzX21hdGNoKTogQ2hlY2sgdGhlIGNvbnRleHQgb2YgYSBmdW5jdGlvbi4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBVc2Ugbm90eXBlX3VucXVhbGlmaWVkX2lkIGluc3RlYWQgb2YgSURFTlRJRklFUgoJaW4gS29lbmlnIGxvb2t1cCBzdXBwb3J0IHJ1bGVzLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2NhbGxfZXhwcik6IEhhbmRsZSB0aGUgbmV3IGNhc2VzLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEhhbmRsZSBvdmVybG9hZGVkIG1ldGhvZHMuCgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogRG9uJ3QgY2FsbCBidWlsZF9zdGF0aWNfbmFtZSBmb3IgZXh0ZXJuICJDIi4KCjE5OTgtMDctMTYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX29iamVjdF9jYWxsX2V4cHIpOiBSZXZlcnQgcHJldmlvdXMgY2hhbmdlLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLiAgSW5zdGVhZCwgY29udmVydAoJVFlQRV9ERUNMcyB0byBJREVOVElGSUVScyBoZXJlLCBpbiB0aGUgcHJlc2VuY2Ugb2YgdGVtcGxhdGVzLgoKMTk5OC0wNy0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChxdWFsaWZ5X2xvb2t1cCk6IEhhbmRsZSB0ZW1wbGF0ZXMuCgoJKiBkZWNsMi5jIChkb191c2luZ19kaXJlY3RpdmUpOiBEb24ndCBwYXNzIGFuY2VzdG9yLgoJKiBkZWNsLmMgKHB1c2hfdXNpbmdfZGlyZWN0aXZlKTogQ2FsY3VsYXRlIGFuY2VzdG9yLgoKCSogZGVjbDIuYyAoZG9fbm9ubWVtYmVyX3VzaW5nX2RlY2wpOiBBbGxvdyBmb3IgdHlwZSBzaGFkb3dpbmcuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBNb3ZlIHR5cGUgc2hhZG93aW5nIGhhbmRsaW5nIGZyb20gaGVyZS4uLgoJKGR1cGxpY2F0ZV9kZWNscyk6IC4uLnRvIGhlcmUuCgkqIGRlY2wuYyAoc2V0X2lkZW50aWZpZXJfbG9jYWxfdmFsdWVfd2l0aF9zY29wZSk6IE5ldyBmbi4KCShwdXNoZGVjbCk6IFVzZSBpdC4KCShzZXRfaWRlbnRpZmllcl9sb2NhbF92YWx1ZSwgbG9va3VwX3R5cGVfY3VycmVudF9sZXZlbCk6IE5ldyBmbnMuCgkqIGRlY2wyLmMgKGRvX2xvY2FsX3VzaW5nX2RlY2wpOiBIYW5kbGUgdHlwZXMgYW5kIGJpbmRpbmcgbGV2ZWwKCXN0dWZmIHByb3Blcmx5LgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogRG9uJ3QgY2FsbCBtYXJrX3VzZWQgb24gYW4gT1ZFUkxPQUQuCgkqIGRlY2wuYyAoc2VsZWN0X2RlY2wpOiBFeHRyYWN0IGEgbG9uZSBmdW5jdGlvbiBmcm9tIGFuIE9WRVJMT0FELgoJKGxvb2t1cF9uYW1lc3BhY2VfbmFtZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBOb3QgaGVyZSBhbnltb3JlLgoKCSogZGVjbDIuYyAoZG9fY2xhc3NfdXNpbmdfZGVjbCk6IE1ha2Ugc3VyZSB3ZSBnZXQgYW4gaWRlbnRpZmllci4KCSogY2xhc3MuYyAoaGFuZGxlX3VzaW5nX2RlY2wpOiBJZ25vcmUgVFlQRV9ERUNMcy4KCgkqIGRlY2wuYyAocXVhbGlmeV9sb29rdXApOiBOZXcgZm4uCgkobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4KCjE5OTgtMDctMTYgIE1hcnRpbiB2LiBMb2V3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsMi5jIChhZGRfdXNpbmdfbmFtZXNwYWNlKTogV2hlbiBkaXJlY3RseSB1c2luZyBhIG5hbWVzcGFjZQoJdGhhdCB3YXMgaW5kaXJlY3QgYmVmb3JlLCBwcm9tb3RlIGl0LgoKCSogY3AtdHJlZS5oIChMT09LVVBfUFJFRkVSX1RZUEVTLCBMT09LVVBfUFJFRkVSX05BTUVTUEFDRVMsCglMT09LVVBfUFJFRkVSX0JPVEgsIExPT0tVUF9OQU1FU1BBQ0VTX09OTFksIExPT0tVUF9UWVBFU19PTkxZLAoJTE9PS1VQX1FVQUxJRklFUlNfT05MWSwgTE9PS1VQX1RFTVBMQVRFU19FWFBFQ1RFRCk6IE5ldyBtYWNyb3MuCgkqIGRlY2wuYyAoc2VsZWN0X2RlY2wpOiBSZXBsYWNlIHR3byBmbGFnIHBhcmFtZXRlcnMgYnkgb25lLgoJKHVucXVhbGlmaWVkX25hbWVzcGFjZV9sb29rdXApOiBMaWtld2lzZSwgcGFzcyBmbGFnLgoJKGxvb2t1cF9mbGFncyk6IE5ldyBmdW5jdGlvbi4KCShsb29rdXBfbmFtZV9yZWFsKTogQ29tcHV0ZSBmbGFncywgcGFzcyB0aGVtLgoJKGxvb2t1cF9uYW1lc3BhY2VfbmFtZSk6IENhbGwgd2l0aCB6ZXJvLWZsYWcuCgkqIGRlY2wyLmMgKGFtYmlndW91c19kZWNsKTogQWRkIGZsYWcgcGFyYW1ldGVyLCBjb21wbGFpbiBvbmx5CglhY2NvcmRpbmcgdG8gZmxhZ3MuCgkobG9va3VwX3VzaW5nX25hbWVzcGFjZSwgcXVhbGlmaWVkX2xvb2t1cF91c2luZ19uYW1lc3BhY2UpOgoJQWRkIGZsYWcgcGFyYW1ldGVyLCBwYXNzIHRoZW0gdGhyb3VnaC4KCSogbGV4LmMgKGRvX3Njb3BlZF9pZCk6IENhbGwgd2l0aCB6ZXJvLWZsYWcuCgoxOTk4LTA3LTE2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFVzZSBjb21wdHlwZXMuCgoxOTk4LTA3LTE2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc2VtYW50aWNzLmMgKGZpbmlzaF9vYmplY3RfY2FsbF9leHByKTogTW92ZSB0ZXN0IGZvciB0aGUKCWZ1bmN0aW9uIGNhbGxlZCBiZWluZyBhIFRZUEVfREVDTCB0byAuLi4KCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBIZXJlLgoKMTk5OC0wNy0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX2NsYXNzKTogQWxzbyBsb29rIGF0IHRlbXBsYXRlIGFyZ3VtZW50cywgaWYgYW55LgoJKGFyZ19hc3NvYyk6IEhhbmRsZSBlcnJvcl9tYXJrX25vZGUgYW5kIG11bHRpcGxlIGxldmVscyBvZiBUUkVFX0xJU1QuCgoJKiBsZXguYyAobG9va2luZ19mb3JfdHlwZW5hbWUpOiBEb24ndCBpbml0aWFsaXplLgoKCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBDbGFyaWZ5IGVycm9yIG1lc3NhZ2UuCgoJKiBkZWNsLmMgKHB1c2hfdXNpbmdfZGlyZWN0aXZlKTogSXRlcmF0ZSBvdmVyIG5hbWVzcGFjZXMgdXNlZAoJaW5kaXJlY3RseS4KCjE5OTgtMDctMTUgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wyLmMgKGFkZF91c2luZ19uYW1lc3BhY2UpOiBJdGVyYXRlIG92ZXIgbmFtZXNwYWNlcyB1c2VkCglpbmRpcmVjdGx5LgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogQWNjZXB0IG5hbWVzcGFjZSBhbGlhc2VzIGFzIGxvY2Fscy4KCShjYXRfbmFtZXNwYWNlX2xldmVscyk6IElnbm9yZSBhbGlhc2VzLgoJKGR1cGxpY2F0ZV9kZWNscyk6IElnbm9yZSBkdXBsaWNhdGUgYWxpYXNlcy4KCSogZGVjbDIuYyAoZG9fbmFtZXNwYWNlX2FsaWFzKTogUHJvY2VzcyBibG9jayBsZXZlbCBuYW1lc3BhY2UKCWFsaWFzZXMuICBTdG9yZSBhbGlhcyB3aXRoIHB1c2hkZWNsLiAgUmVtb3ZlIG9kciBlcnJvcnMuCgkqIHBhcnNlLnkgKG5hbWVzcGFjZV9hbGlhcyk6IE5ldyBub24tdGVybWluYWwuCgkoZXh0ZGVmKTogVXNlIGl0LgoKMTk5OC0wNy0xNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX3R5cGUpOiBIYW5kbGUgTUVUSE9EX1RZUEUgbGlrZSBGVU5DVElPTl9UWVBFLgoJSGFuZGxlIFRFTVBMQVRFX1RZUEVfUEFSTS4KCShhcmdfYXNzb2MpOiBSZXdyaXRlLgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IERvbid0IGxvb2sgYXQgdGhlIGNvbnRleHQgdW5sZXNzCgl3ZSBoYXZlIHRvLgoKCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IEZpeCBuYW1lc3BhY2UgaGFuZGxpbmcuCgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBFeHRyYWN0IGEgbG9uZSBmdW5jdGlvbiBmcm9tIGFuCglPVkVSTE9BRC4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogSGFuZGxlIGdldHRpbmcgYSBuYW1lc3BhY2UKCWZvciBiYXNldHlwZSBpbiBhIGRlc3RydWN0b3IgY2FsbC4KCShjaGVja19kdG9yX25hbWUpOiBIYW5kbGUgZW51bXMuCgoJKiBwYXJzZS55ICh1c2luZ19kaXJlY3RpdmUpOiBOZXcgbm9udGVybWluYWwuCgkoZXh0ZGVmLCBzaW1wbGVfc3RtdCk6IFVzZSBpdC4KCjE5OTgtMDctMTQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsMi5jIChhZGRfZnVuY3Rpb24pOiBNb3ZlIGVycm9yIG1lc3NhZ2UgLi4uCgkoYXJnX2Fzc29jX25hbWVzcGFjZSk6IC4uLiBmcm9tIGhlcmUuCgoxOTk4LTA3LTE0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChuYW1lc3BhY2VfcXVhbGlmaWVyKTogRml4IG11bHRpcGxlIGxldmVsIGhhbmRsaW5nLgoJKiBkZWNsMi5jIChuYW1lc3BhY2VfYW5jZXN0b3IpOiBVc2UgQ1BfREVDTF9DT05URVhULgoJKGFyZ19hc3NvYyk6IERvbid0IHNraXAgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEgZnVuY3Rpb24uCgpUdWUgSnVsIDE0IDIwOjA5OjIyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHNlYXJjaC5jIChteV90cmVlX2NvbnMpOiBDbGVhbiB1cC4KCjE5OTgtMDctMTQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoam91c3QpOiBEb24ndCB3YXJuIGFib3V0ICJjb25mdXNpbmciIGNvbnZlcnNpb25zIHRvIHRoZQoJc2FtZSB0eXBlLgoKMTk5OC0wNy0xNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNsYXNzLmMgKHB1c2hfbmVzdGVkX2NsYXNzKTogQ29tcGxhaW4gYWJvdXQgbmFtZXNwYWNlcy4KCSogZGVjbC5jIChzdGFydF9kZWNsKTogRW50ZXIgdGhlIG9iamVjdCdzIG5hbWVzcGFjZS4KCShjcF9maW5pc2hfZGVjbCk6IExlYXZlIGl0LgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGNoZWNrX2RlY2xfbmFtZXNwYWNlKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9maWxlKTogQ2FsbCBpdC4KCSogcGFyc2UueSAoY29tcGxleF9kaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBTZXQgY29tcGxleGl0eQoJb2YgbmFtZXNwYWNlLXF1YWxpZmllZCBpZHMgdG8gLTEsIGVudGVyIHRoZSBuYW1lc3BhY2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfZGVjbF9vdmVybG9hZCk6IEV4cGVjdCBfREVDTCBhcyBmaXJzdAoJcGFyYW1ldGVyLiAgUHV0IGNvbnRleHQgdGVtcG9yYXJpbHkgaW50byBjdXJyZW50X25hbWVzcGFjZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBDaGFuZ2UgY2FsbGVyLgoJKHRzdWJzdCk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogQ2FsbCBtYXJrX3VzZWQgYW5kCgljb252ZXJ0X2Zyb21fcmVmZXJlbmNlIGZvciBuYW1lc3BhY2UgbWVtYmVycy4KCk1vbiBKdWwgMTMgMjM6MjU6MjggMTk5OCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIHNlYXJjaC5jIChteV90cmVlX2NvbnMpOiBUaGUgYml0ZmllbGQgaXMgYXQgaW5kZXggMi4KCk1vbiBKdWwgMTMgMTc6MjE6MDEgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGxhbmctb3B0aW9ucy5oOiBGb3JtYXQgY2hhbmdlZCB0byB3b3JrIHdpdGggbmV3IC0taGVscCBzdXBwb3J0CglpbiBnY2MvdG9wbGV2LmMKCjE5OTgtMDctMTIgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IENoYW5nZSBjYWxscyBvZiBkb19pZGVudGlmaWVyLgoJRG8gS29lbmlnIGxvb2t1cCBpbiBDQUxMX0VYUFIuCgkoYXJnX2Fzc29jKTogSGFuZGxlIGVycm9yX21hcmsuCgkqIGxleC5jIChpc19nbG9iYWwpOiBOZXcgZnVuY3Rpb24uCgkoZG9faWRlbnRpZmllcik6IEV4cGVjdCBhcmd1bWVudHMgZm9yIEtvZW5pZyBsb29rdXAuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBBZGQgcnVsZXMgZm9yIGNhbGxzIG9mIHVucXVhbGlmaWVkIGZ1bmN0aW9uIGNhbGxzLgoJKGRvX2lkKTogQ2hhbmdlIGNhbGwgb2YgZG9faWRlbnRpZmllci4KCSogcHQuYyAoZmluaXNoX3N0bXRfZXhwcik6IExpa2V3aXNlLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2lkX2V4cHIpOiBMaWtld2lzZS4KCShmaW5pc2hfY2FsbF9leHByKTogQWRkIGludGVnZXIgcGFyYW1ldGVyIHRvIGluZGljYXRlCglhcmd1bWVudC1kZXBlbmRlbnQgbG9va3VwLgoKCSogZGVjbC5jIChzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IE5ldyBmaWVsZCB1c2luZ19kaXJlY3RpdmVzLgoJKHB1c2hfdXNpbmdfZGVjbCk6IE5vdCBzb3JyeSBhbnltb3JlLgoJKHB1c2hfdXNpbmdfZGlyZWN0aXZlKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF90YWcpOiBVc2UgQ1BfREVDTF9DT05URVhUIHRvIGl0ZXJhdGUuCgkodW5xdWFsaWZpZWRfbmFtZXNwYWNlX2xvb2t1cCk6IE5ldyBmdW5jdGlvbiwgY29kZSBmcm9tIC4uLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiAuLi4gaGVyZS4KCSogZGVjbDIuYyAobG9va3VwX3VzaW5nX25hbWVzcGFjZSk6IFBhc3MgdXNpbmcgbGlzdCBpbnN0ZWFkIG9mCglpbml0aWFsIHNjb3BlLgoJKHZhbGlkYXRlX25vbm1lbWJlcl91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGRvX25vbm1lbWJlcl91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGRvX3RvcGxldmVsX3VzaW5nX2RlY2wpOiBVc2UgdGhlbS4KCShkb19sb2NhbF91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGRvX3VzaW5nX2RpcmVjdGl2ZSk6IFN1cHBvcnQgYmxvY2stbGV2ZWwgZGlyZWN0aXZlcy4KCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBTdXBwb3J0IHVzaW5nIGRlY2xhcmF0aW9ucyBhbmQKCWRpcmVjdGl2ZXMuCgkobmFtZXNwYWNlX3F1YWxpZmllciwgbmFtZXNwYWNlX3VzaW5nX2RlY2wpOiBOZXcgbm9uLXRlcm1pbmFscy4KCgkqIHhyZWYuYyAoY2xhc3NuYW1lKTogTmV3IGZ1bmN0aW9uLgoJKEdOVV94cmVmX2hpZXIpOiBDaGFuZ2UgY2xhc3MgYW5kIGJhc2UgcGFyYW1ldGVycyB0byB0cmVlLgoJKiBkZWNsLmMgKHhyZWZfYmFzZXlwZXMpOiBDaGFuZ2UgY2FsbGVyLgoJKiBmcmllbmQuYyAobWFrZV9mcmllbmRfY2xhc3MpOiBMaWtld2lzZS4KCjE5OTgtMDctMTIgIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLWZzLnVzYy5lZHU+CgoJKiB0eXBlY2suYyAoY29tcHR5cGVzLCBjYXNlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBBZGQgcGFyYW1ldGVyCgljb21wYXJpc29uLgoKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSwgY2FzZSBURU1QTEFURV9ERUNMKTogSWYgaXQgaXMgYQoJdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVyLCByZWNvcmQgaXRzIHVzZS4KCShmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtLCBjYXNlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0pOiBUcmF2ZXJzZQoJaXRzIHRlbXBsYXRlIGFyZ3VtZW50cyBpZiBleGlzdHMuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfdGVtcGxhdGVfcGFybXMpOiBOZXcgZnVuY3Rpb24gZXF1aXZhbGVudAoJdG8gY29lcmNlX3RlbXBsYXRlX3Bhcm1zIHdoZW4gSVNfVE1QTF9QQVJNIGlzIHRydWUuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVXNlIGl0LiAgUmVtb3ZlIHRoZSBJU19UTVBMX1BBUk0gcGFyYW1ldGVyLAoJYWxsIGNhbGxlcnMgY2hhbmdlZC4KCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWNjZXNzIEFSR0xJU1QgcHJvcGVybHkgd2hlbiBjcmVhdGluZyBhCgluZXcgdmVjdG9yLiAgT25seSBhY2NlcHQgaW1wbGljaXQgVFlQRV9ERUNMIGFzIHZhbGlkIGFyZ3VtZW50IGZvcgoJYSB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgd2hlbiBpdCBpcyBhIGJhc2UgY2xhc3Mgb2YKCWN1cnJlbnRfY2xhc3NfdHlwZS4gIERvbid0IGRpc3BsYXkgZXJyb3IgbWVzc2FnZSB3aGVuIENPTVBMQUlOIGlzCglmYWxzZS4KCjE5OTgtMDctMTIgIEtsYXVzIEthZW1wZiAgKGtrYWVtcGZAcHJvZ2lzLmRlKQoKCSogcmVwby5jIChnZXRfYmFzZV9maWxlbmFtZSk6IFVzZSBmaWxlX25hbWVfbm9uZGlyZWN0b3J5LgoJKG9wZW5fcmVwb19maWxlKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoZmlsZV9uYW1lX25vbmRpcmVjdG9yeSk6IEFkZCBwcm90b3R5cGUuCgoxOTk4LTA3LTEyICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogUHVsbCB0aGUgaWRlbnRpZmllciBvdXQgb2YgZGVjbGFyYXRvci4KCVVzZSBjcF9lcnJvciBhbmQgZnJpZW5kcy4KCSogZGVjbDIuYyAocXVhbGlmaWVkX2xvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBGaXggY2FsbCB0bwoJcHVycG9zZV9tZW1iZXIuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGNhbGwgY29tcGxldGVfdHlwZSBvbiBhIG5hbWVzcGFjZS4KCShncm9rdmFyZGVjbCk6IFVzZSBERUNMX0NMQVNTX1NDT1BFX1AuCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IENoZWNrIGZvciBlcnJvcl9tYXJrX25vZGUgc29vbmVyLgoJKiBjbGFzcy5jICh3YXJuX2hpZGRlbik6IEZpeCBmb3IgT1ZFUkxPQUQuCglGcm9tIGdyYWhhbXNAcmNwLmNvLnVrOgoJKiBjcC10cmVlLmggKERFRkFSR19OT0RFX0NIRUNLKTogTmV3IG1hY3JvLgoJKERFRkFSR19MRU5HVEgsIERFRkFSR19QT0lOVEVSKTogVXNlIGl0LgoKU3VuIEp1bCAxMiAwMToyMDo1NyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnKysuMSAoLXRyYWRpdGlvbmFsKTogUmVtb3ZlIGR1cGxpY2F0ZWQgZG9jdW1lbnRhdGlvbi4KCjE5OTgtMDctMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBtZXRob2QuYyAoZmx1c2hfcmVwZWF0cyk6IEFkZCBucmVwZWF0cyBwYXJhbWV0ZXIuCgkoaXNzdWVfbnJlcGVhdHMpOiBMaWtld2lzZS4KCShpc19iYWNrX3JlZmVyZW5jZWFibGVfdHlwZSk6IE5ldyBmdW5jdGlvbi4gIERvbid0IGJhY2stcmVmZXJlbmNlCglURU1QTEFURV9UWVBFX1BBUk1zIGFzIHdlbGwgYXMgc2ltcGxlIHR5cGVzIGxpa2UgaW50ZWdlcnMuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlKTogTGlrZXdpc2UuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlX3dpdGhfR2NvZGUpOiBMaWtld2lzZS4KCShsYXN0dHlwZSk6IFJlbW92ZS4KCShucmVwZWF0cyk6IExpa2V3aXNlLgoJKE5yZXBlYXRzKTogTGlrZXdpc2UuCgkoc3RhcnRfc3F1YW5nbGluZyk6IERvbid0IGNsZWFyIHRoZSB2YXJpYWJsZXMgcmVtb3ZlZCBhYm92ZS4KCShlbmRfc3F1YW5nbGluZyk6IExpa2V3aXNlLgoJKGZsdXNoX3JlcGVhdHMpOiBUaWR5LiAgVXNlIG5yZXBlYXRzIHBhcmFtZXRlciByYXRoZXIgdGhhbgoJTnJlcGVhdHMgZ2xvYmFsLgoJKGlzc3VlX25yZXBlYXRzKTogTGlrZXdpc2UsIGJ1dCB3aXRoIG5yZXBlYXRzIGdsb2JhbC4gIFVzZQoJaXNfYmFja3JlZmVyZW5jZWFibGVfdHlwZS4KCShidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFRpZHkuICBBZGQgY29tbWVudC4gIFVzZQoJYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX3VuZGVyc2NvcmVfaW50KTogQ29tbWVudC4KCShidWlsZF9vdmVybG9hZF9zY29wZV9yZWYpOiBVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX292ZXJsb2FkX2ludCk6IExpa2V3aXNlLgoJKGJ1aWxkX3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBUaWR5LgoJKGJ1aWxkX3RlbXBsYXRlX3Bhcm1fbmFtZXMpOiBVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBBZGQgY29tbWVudHMuCgkoYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlX3dpdGhfR2NvZGUpOiBTcGxpdCBvdXQgZnJvbQoJYnVpbGRfbWFuZ2xlZF9uYW1lLgoJKGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZSk6IFVzZSBpdC4KCShidWlsZF9tYW5nbGVkX25hbWUpOiBSZXdvcmsgdG8gdXNlIGJ1aWxkX21hbmdsZWRfbmFtZV9mb3JfdHlwZQoJYW5kIHRvIG5vdCB1c2UgZ2xvYmFsIG5yZXBlYXRzL05yZXBlYXRzLiAgVGlkeS4KCShwcm9jZXNzX21vZGlmaWVycyk6IFRpZHkuCgkoY2hlY2tfYnR5cGUpOiBVc2UgaXNfYmFja3JlZmVyZW5jZWFibGVfdHlwZS4gIEFkZCBjb21tZW50LgoJUmVuYW1lIGBub2RlJyB0byBgdHlwZScuCgkocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogU2V0IG51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGhlcmUuCglVc2UgYnVpbGRfbWFuZ2xlZF9uYW1lX2Zvcl90eXBlLiAgVGlkeS4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBUaWR5LiAgRG9uJ3QgdXNlIE5yZXBlYXRzLiAgVXNlCglidWlsZF9tYW5nbGVkX25hbWVfZm9yX3R5cGUuCgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCk6IERvbid0IGxvb2sgYXQgREVDTF9URU1QTEFURV9JTkZPCglmb3IgVFlQRV9ERUNMcy4KCjE5OTgtMDctMDggIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oICh3YXJuX2xvbmdfbG9uZyk6IERlZmluZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFkZCBmbGFnIGB3YXJuX2xvbmdfbG9uZycgYXMgZ3VhcmQgZm9yCgl3YXJuaW5nICJBTlNJIEMrKyBkb2VzIG5vdCBzdXBwb3J0IGBsb25nIGxvbmcnIi4KCSogZGVjbDIuYyAod2Fybl9sb25nX2xvbmcpOiBEZWZpbmUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogUGFyc2UgLVdsb25nLWxvbmcsIC1Xbm8tbG9uZy1sb25nIG9wdGlvbnMuCgoxOTk4LTA3LTA3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogSGFuZGxlIGF0dHJpYnV0ZXMgYmV0d2VlbiAnY2xhc3MnIGFuZCBuYW1lLgoJKiBwYXJzZS55IChhZ2dyKTogTGlrZXdpc2UuCgkqIHNlbWFudGljcy5jIChmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKiBNYWtlZmlsZS5pbiAoRVhQRUNURUQpOiBBZGp1c3QuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZmxhZ19vcHRpb25hbF9kaWFncyBhbmQgd2Fybl9tdWx0aWNoYXIuCgkqIGRlY2wyLmM6IERlZmluZSB0aGVtLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSB0aGVtLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mb3B0aW9uYWwtZGlhZ3MuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBEb24ndCBjb21wbGFpbiBhYm91dCBtdWx0aXBsZSBtZWFuaW5ncyBvZgoJbmFtZSBpZiAtZm5vLW9wdGlvbmFsLWRpYWdzLgoJKiBkZWNsLmMgKHB1c2hkZWNsX2NsYXNzX2xldmVsKTogTGlrZXdpc2UuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogQ2hlY2sgd2Fybl9tdWx0aWNoYXIuCgoxOTk4LTA3LTA2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF90YWcpOiBVc2UgQ1BfREVDTF9DT05URVhULgoKCSogdHJlZS5jIChtYWtlX2JpbmZvKTogRml4IGxlbmd0aC4KCjE5OTgtMDYtMzAgIEJlbmphbWluIEtvc25payAgPGJrb3pAYmxpc3MubmFiaS5uZXQ+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBSZW1vdmUgd2Fybl90ZW1wbGF0ZV9kZWJ1Z2dpbmcuCgkqIGxhbmctb3B0aW9ucy5oOiBMaWtld2lzZS4KCk1vbiBKdW4gMjkgMjA6MTc6NDAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXhjZXB0LmMgKGJ1aWxkX2VoX3R5cGVfdHlwZV9yZWYpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzdXNwJy4KCShwcm9jZXNzX3N0YXJ0X2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UgZm9yIHZhcmlhYmxlcwoJYGZhbHNlX2xhYmVsX3J0eCcsIGBjYWxsX3J0eCcgYW5kIGByZXR1cm5fdmFsdWVfcnR4Jy4KCjE5OTgtMDYtMjkgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGJ1aWxkX3NyY2xvYyk6IE1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZSB0aGlzIG5vZGUgb24gdGhlCglwZXJtYW5lbnQgb2JzdGFjay4KClNhdCBKdW4gMjcgMjM6MzQ6MTggMTk5OCAgRnJlZCBGaXNoICA8Zm5mQG5pbmVtb29ucy5jb20+CgoJKiBnKytzcGVjLmMgKE5FRURfTUFUSF9MSUJSQVJZKTogRGVmaW5lIHRvIDEgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCShsYW5nX3NwZWNpZmljX2RyaXZlcik6IEluaXRpYWxpemUgbmVlZF9tYXRoIHdpdGggTkVFRF9NQVRIX0xJQlJBUlkuCgkobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBPbmx5IGFkZCAtbG0gYXV0b21hdGljYWxseSBpZiBuZWVkX21hdGggaXMKCW5vbnplcm8uCgpTYXQgSnVuIDI3IDEyOjIyOjU2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2UtbGFuZy5pbiAoZysrKTogRGVwZW5kIG9uIG1rc3RlbXAuby4gIExpbmsgaW4gbWtzdGVtcC5vCgpTYXQgSnVuIDI3IDA3OjM2OjA5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChFWFBSX0gpOiBOZXcgZGVwZW5kZW5jeSB2YXJpYWJsZS4KCShkZWNsMi5vKTogRGVwZW5kIG9uICQoRVhQUl9IKS4KCSh0eXBlY2subyk6IExpa2V3aXNlLgoJKGluaXQubyk6IExpa2V3aXNlLgoJKGV4cHIubyk6IExpa2V3aXNlLgoKMTk5OC0wNi0yNSAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2VudW0pOiBQdXQgbG9jYWwgZW51bXMgb24gcGVybWFuZW50X29ic3RhY2suCgoxOTk4LTA2LTI1ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3AtdHJlZS5oIChjX2dldF9hbGlhc19zZXQpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IGxhbmdfZ2V0X2FsaWFzX3NldC4KCjE5OTgtMDYtMjUgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAobWFya19hbGxfcnVudGltZV9tYXRjaGVzKTogQWRkIGZ1bmN0aW9uIHByb3RvdHlwZS4KCSogZXhjZXB0LmMgKG1hcmtfYWxsX3J1bnRpbWVfbWF0Y2hlcyk6IFNldCBUUkVFX1NZTUJPTF9SRUZFUkVOQ0VECglmbGFnIGZvciBhbGwgZnVuY3Rpb24gZGVjbHMgd2hpY2ggYXJlIGluIHRoZSBleGNlcHRpb24gdGFibGUuCgkqIGV4Y2VwdGlvbi5jYyAoX19jcGx1c190eXBlX21hdGNoZXIpOiBDaGVjayBmb3IgQ0FUQ0hfQUxMX1RZUEUgbWF0Y2guCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogQ2FsbCBtYXJrX2FsbF9ydW50aW1lX21hdGNoZXMgdG8gbWFrZSBzdXJlCgljb2RlIGlzIGVtaXR0ZWQgZm9yIGFueSByZWZlcmVuY2VkIHJ0dGkgZnVuY3Rpb24uCgoxOTk4LTA2LTI1ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IFVzZSBuZXcgfCBzeW50YXggdG8gZWxpbWluYXRlCglzdHJpbmcgY29uY2F0ZW5hdGlvbi4KCjE5OTgtMDYtMjUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoQ1BfREVDTF9DT05URVhUKTogTmV3IG1hY3JvLgoJKiBkZWNsMi5jIChpc19uYW1lc3BhY2VfYW5jZXN0b3IsIGxvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBVc2UgaXQuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IExpa2V3aXNlLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3BvaW50ZXJfb3JfcmVmZXJlbmNlX3R5cGUpOiBEb24ndCBzZXQKCURFQ0xfQ09OVEVYVC4KCjE5OTgtMDYtMjQgIE1hcnRpbiB2LiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCglTZXQgREVDTF9DT05URVhUIGZvciBnbG9iYWxzIHRvIE5VTExfVFJFRSBpbnN0ZWFkIG9mIGdsb2JhbF9uYW1lc3BhY2UuCgkqIGNwLXRyZWUuaCAoRlJPQl9DT05URVhUKTogTmV3IG1hY3JvLgoJKERFQ0xfTUFJTl9QKTogOjptYWluIHNob3VsZCBoYXZlIGEgREVDTF9DT05URVhUIG9mIE5VTExfVFJFRS4KCSogZGVjbC5jIChuYW1lc3BhY2VfYmluZGluZyk6IFJlcGxhY2UgTlVMTF9UUkVFIHdpdGgKCWdsb2JhbF9uYW1lc3BhY2UuCgkoc2V0X25hbWVzcGFjZV9iaW5kaW5nLCBwb3BfbmFtZXNwYWNlLCBsb29rdXBfbmFtZV9yZWFsKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGlzX25hbWVzcGFjZV9hbmNlc3RvciwgbG9va3VwX3VzaW5nX25hbWVzcGFjZSk6CglMaWtld2lzZS4KCSogZGVjbC5jIChwdXNodGFnKTogVXNlIEZST0JfQ09OVEVYVC4KCShwdXNoZGVjbCwgbWFrZV90eXBlbmFtZV90eXBlLCBkZWZpbmVfZnVuY3Rpb24sIGdyb2tkZWNsYXJhdG9yKToKCUxpa2V3aXNlLgoJKiBkZWNsMi5jIChzZXRfZGVjbF9uYW1lc3BhY2UsIGRvX25hbWVzcGFjZV9hbGlhcyk6IExpa2V3aXNlLgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2xfcmVhbCwgbG9va3VwX3RlbXBsYXRlX2NsYXNzLCB0c3Vic3QpOgoJTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlY2xfbmFtZXNwYWNlKTogUmV0dXJuIGdsb2JhbF9uYW1lc3BhY2UgaWYgbm8gY29udGV4dC4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogRXhwZWN0IG51bGwgYXMgY29udGV4dC4KCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogRG8gbm90aGluZyBmb3IgbnVsbAoJY29udGV4dHMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogQWxsb3cgZm9yIG51bGwgaWRfY29udGV4dC4KCjE5OTgtMDYtMjUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2lzX3RodW5rIGZvciB0aGUKCUFTTV9PVVRQVVRfTUlfVEhVTksgY2FzZSBhcyB3ZWxsLgoKMTk5OC0wNi0yMyAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjIChfX2NwbHVzX3R5cGVfbWF0Y2hlcik6IEdldCBhIG1hdGNoX2luZm8gcG9pbnRlcgoJaW5zdGVhZCBvZiBhbiBleGNlcHRpb24gdGFibGUgZW50cnkgYXMgYSBwYXJhbWV0ZXIuCgoxOTk4LTA2LTIzICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChmdW5jdGlvbl90cnlfYmxvY2spOiBEb24ndCBjYWxsIHN0YXJ0X2NhdGNoX2hhbmRsZXIuCgkqIGV4Y2VwdC5jIChjYWxsX2VoX2luZm8pOiBSZW1vdmUgY29lcmNlZCBmaWVsZCBmcm9tIGRlY2xhcmF0aW9uLgoJKGJ1aWxkX2VoX3R5cGVfdHlwZV9yZWYpOiBOZXcgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGFkZHJlc3Mgb2YgYQoJcnR0aSBmdW5jdGlvbiBmb3IgdGhlIG5ldyBzdHlsZSBleGNlcHRpb24gdGFibGVzLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFNwbGl0IGZ1bmN0aW9uLCB0aGlzIGNvbnRhaW5zIHRoZQoJY29tbW9uIHBhcnQuCgkocHJvY2Vzc19zdGFydF9jYXRjaF9ibG9ja19vbGQpOiBOZXcgZnVuY3Rpb24gdG8gcGVyZm9ybSB0aGUgcmVzdAoJb2YgZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrIHVuZGVyIG9sZCBzdHlsZSBleGNlcHRpb25zLgoJKHByb2Nlc3Nfc3RhcnRfY2F0Y2hfYmxvY2tfb2xkKTogTmV3IGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHJlc3QKCW9mIGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayB1bmRlciBuZXcgc3R5bGUgZXhjZXB0aW9ucy4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogT25seSBwb3AgdGhlIGZhbHNlIGxhYmVsIG9mZiB0aGUgc3RhY2sgdW5kZXIKCXRoZSBvbGQgc3R5bGUgb2YgZXhjZXB0aW9ucy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90cnlfYmxvY2spOiBEb24ndCBjYWxsIHN0YXJ0X2NhdGNoX2hhbmRsZXIuCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBBZGQgb3JpZ2luYWxfdmFsdWUgZmllbGQuCgkoX19jcGx1c190eXBlX21hdGNoZXIpOiBQZXJmb3JtIHR5cGUgbWF0Y2hpbmcgb24gdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbgoJdmFsdWUsIGFuZCBpZiB3ZSBoYXZlIGEgbWF0Y2gsIHNldCB0aGUgY3VycmVudCB2YWx1ZS4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogU2V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24gdmFsdWUuCgoxOTk4LTA2LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGpvdXN0KTogRml4IGNvbmZ1c2luZyBjb252ZXJzaW9uIHdhcm5pbmcuCgoJKiBjYWxsLmMgKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogQWRkIHBsYWNlbWVudCBwYXJtLiAgQ2hlY2sKCUxPT0tVUF9TUEVDVUxBVElWRUxZLgoJKiBjcC10cmVlLmgsIGRlY2wyLmMsIGluaXQuYzogQWRqdXN0LgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFVzZSBpdC4KCgkqIHB0LmMgKHRzdWJzdCk6IERpYWdub3NlIGNyZWF0aW5nIHZvaWQgZmllbGRzIG9yIHZhcmlhYmxlcy4KCk1vbiBKdW4gMjIgMDg6NTA6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgoKCSogY3AtdHJlZS5oIChjaGVja19kdG9yX25hbWUpOiBBZGQgcHJvdG90eXBlLgoKCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYHB0cl90eXBlX25vZGUnLCBgcGFybScgYW5kIGBydmFsJy4KCgkqIHB0cmVlLmMgKHByaW50X2xhbmdfdHlwZSk6IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0RFQyBzcGVjaWZpZXIKCWluIGNhbGwgdG8gZnByaW50Zi4KCShsYW5nX3ByaW50X3hub2RlKTogTGlrZXdpc2UuCgoJKiB0eXBlY2syLmMgKGVudW1fbmFtZV9zdHJpbmcpOiBDYXN0IGFyZ3VtZW50IHRvIHNwcmludGYgdG8gbG9uZwoJYW5kIHVzZSAlbGQgc3BlY2lmaWVyLgoKCSogeHJlZi5jIChHTlVfeHJlZl9lbmRfc2NvcGUpOiBVc2UgSE9TVF9XSURFX0lOVF9QUklOVF9ERUMKCXNwZWNpZmllciBpbiBjYWxsIHRvIGZwcmludGYuCgkoR05VX3hyZWZfbWVtYmVyKTogQ2FzdCBhcmd1bWVudCB0byBzcHJpbnRmIHRvIGludC4KCkZyaSBKdW4gMTkgMjM6MjI6NDIgMTk5OCAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIHR5cGVjazIuYyAocG9wX2luaXRfbGV2ZWwpOiBXYXJuIGFib3V0IGltcGxpY2l0IHplcm8gaW5pdGlhbGl6YXRpb24KCW9mIHN0cnVjdCBtZW1iZXJzLgoKVGh1IEp1biAxOCAwOTozMjozMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcC10cmVlLmg6IFByb3RvdHlwZSBmdW5jdGlvbiBgY2hlY2tfamF2YV9tZXRob2QnLgoKMTk5OC0wNi0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IE1ha2UgY29uZmxpY3RpbmcgdXNlIG9mIGlkIGEgcGVkd2Fybi4KCSogZGVjbC5jIChwdXNoZGVjbF9jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoKMTk5OC0wNi0xNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IElzc3VlIGFuIGVycm9yIHdoZW4gcHJlc2VudGVkCgl3aXRoIGFuIGludGVnZXIgKHJlYWwpIGNvbnN0YW50IHRoYXQgY2Fubm90IGJlIHNpbXBsaWZpZWQgdG8gYW4KCUlOVF9DU1QgKFJFQUxfQ1NUKS4KCgkqIGNwLXRyZWUuaCAoY19nZXRfYWxpYXNfc2V0KTogUmVtb3ZlIGRlY2xhcmF0aW9uIGFkZGVkIGluCgkxOTk4LTA2LTEzIGNoYW5nZSB0aGF0IHNob3VsZCBuZXZlciBoYXZlIGJlZW4gY2hlY2tlZCBpbi4KCjE5OTgtMDYtMTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQ2hhbmdlICUgaW4gZm9ybWF0IHN0cmluZ3MKCXRvICUlLgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IERvbid0IGJ1aWxkX3N0YXRpY19uYW1lIGZvciBkZWNscyB0aGF0CglhcmVuJ3QgYXQgbmFtZXNwYWNlIHNjb3BlLgoKCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogQ2F0Y2ggZGVmYXVsdC1pbml0aWFsaXphdGlvbiBvZgoJcmVmZXJlbmNlcy4KCjE5OTgtMDYtMTcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBlcnJmbi5jIChjcF90aGluZyk6IEhhbmRsZSB0aGUgYCUlJyBmb3JtYXR0aW5nIHNlcXVlbmNlLgoKMTk5OC0wNi0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IENvbXBsYWluIGFib3V0IGdldHRpbmcgYSBuYW1lc3BhY2UKCW9yIGNsYXNzIHRlbXBsYXRlLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IFJlbW92ZSBjaGVjayBmb3IgbmFtZXNwYWNlcy4KCSogdHlwZWNrMi5jIChpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBMaWtld2lzZS4KCSogcGFyc2UueSAodGVtcGxhdGVfYXJnKTogQWRkIFBUWVBFTkFNRSBleHBhbnNpb24uCgoxOTk4LTA2LTE2ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogRG9uJ3QgYnVpbGQgZXh0ZXJuYWwgYXNzZW1ibGVyIG5hbWVzIGZvcgoJVFlQRU5BTUVzIGluIG90aGVyIG5hbWVzcGFjZXMgYXMgdGhlcmUgaXMgbm8gZGVjbGFyYXRvci4KCSogZXJyb3IuYyAoY3BfZmlsZV9vZiwgY3BfbGluZV9vZik6IERvbid0IGV4dHJhY3QgZmlsZSBvciBsaW5lIG51bWJlcgoJaW5mbyBmcm9tIERFQ0xfQ09OVEVYVCBpZiBpdCBpcyBOVUxMLgoKMTk5OC0wNi0xNiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjaGVja19kdG9yX25hbWUpOiBTcGxpdCBvdXQuCgkoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogVXNlIGl0LgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBVc2UgaXQuCgoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBGaXggaGFuZGxpbmcgb2YgcG9pbnRlcnMgdG8gbWVtYmVycy4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogSnVzdCByZXR1cm4gbm90aGluZyBmcm9tIGEgY29uc3RydWN0b3IuCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBDb21wbGFpbiBhYm91dCByZXR1cm5pbmcgYSB2b2lkCglleHByZXNzaW9uIGZyb20gYSBkZXN0cnVjdG9yLgoKMTk5OC0wNi0xMyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2Vzcyk6IEFjY2VwdCBhIEJJTkZPIGV4cGxhaW5pbmcgaG93IHRvIGdldAoJZnJvbSB0aGUgZW50aXR5IHdob3NlIGFjY2Vzc2VkIGlzIGJlaW5nIGFsdGVyZWQgdG8gdGhlIHR5cGUgZG9pbmcKCXRoZSBhbHRlcmluZy4KCShoYW5kbGVfdXNpbmdfZGVjbCk6IE5ldyBmdW5jdGlvbiBjb250YWluaW5nIGNvZGUgc3BsaXQgb3V0IGZyb20gLi4uCgkoZmluaXNoX3N0cnVjdF8xKTogSGVyZS4KCgkqIGNwLXRyZWUuaCAoY29tcGxldGVfdHlwZV9vcl9lbHNlKTogRGVjbGFyZS4KCSogaW5pdC5jIChidWlsZF9uZXdfMSwgYnVpbGRfZGVsZXRlKTogVXNlIGl0LgoJKiB0eXBlY2suYyAocmVxdWlyZV9jb21wbGV0ZV90eXBlKTogVXNlIGNvbXBsZXRlX3R5cGUsIHJhdGhlciB0aGFuCglleHBhbmRpbmcgaXQgaW5saW5lLgoJKGNvbXBsZXRlX3R5cGVfb3JfZWxzZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9jb21wb25lbnRfcmVmKTogVXNlIGl0LgoJKHBvaW50ZXJfaW50X3N1bSk6IE1ha2Ugc3VyZSB0aGUgdHlwZSBwb2ludGVkIHRvIGlzIGNvbXBsZXRlLgoJKHBvaW50ZXJfZGlmZik6IExpa2V3aXNlLgoKCSogcHQuYyAoZm9yX2VhY2hfdGVtcGxhdGVfcGFybSk6IFRyYXZlcnNlIHRoZSBUWVBFX0NPTlRFWFQgZm9yCgl0eXBlcy4KCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IE5vdGUgdGhhdCBtZW1iZXIgdGVtcGxhdGVzCgljYW5ub3Qgb3ZlcnJpZGUgdmlydHVhbCBmdW5jdGlvbnMuCgoxOTk4LTA2LTEyICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBJZiBERUNMQVJBVE9SIHR1cm5lZCBpbnRvCglhbiBlcnJvcl9tYXJrX25vZGUgZnJvbSBsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24sIHJldHVybiB0aGUgc2FtZS4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBBbHNvIG1ha2Ugc3VyZSBURU1QTEFURV9JRCBpc24ndCBhbgoJZXJyb3JfbWFya19ub2RlLCBiZWZvcmUgd2UgdHJ5IHRvIHJlYWQgaXRzIG9wZXJhbmRzLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogSWYgd2UgZ290IGFuIGVycm9yX21hcmtfbm9kZSBmcm9tCgljaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiwganVzdCByZXR1cm4gaXQgcmlnaHQgYmFjay4KCjE5OTgtMDYtMTIgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogRG9uJ3QgdHJlYXQgdGVtcGxhdGUtaWRzIHRoYXQgZG9uJ3QKCXNwZWNpZnkgYW55IHRlbXBsYXRlIGFyZ3VtZW50cyBhcyBlcXVpdmFsZW50IHRvIG9yZGluYXJ5CglpZGVudGlmaWVycy4gIFVzZSBPRkZTRVRfUkVGIGluc3RlYWQgb2YgU0NPUEVfUkVGIHRvIHJlZmVyIHRvCglwb2ludGVyLXRvLW1lbWJlcnMgZm9yIG1lbWJlciB0ZW1wbGF0ZXMuICBUaWR5IHNsaWdodGx5LgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfSURfRVhQUik6IFJldmlzZSBkb2N1bWVudGF0aW9uLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBIYW5kbGUgdGVtcGxhdGUtaWRzIGxpa2Ugb3JkaW5hcnkKCWlkZW50aWZpZXJzLCBmb3IgdGhlIG1vc3QgcGFydCwgYnV0IHN0b3JlIGEgVEVNUExBVEVfSURfRVhQUiBpbiB0aGUKCW9mZnNldCBwYXJ0IG9mIHRoZSBPRkZTRVRfUkVGLgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBDaGFuZ2UgY2hlY2sgZm9yIHVua25vd24gdHlwZXMgdG8KCWxvb2sgZm9yIE9GRlNFVF9SRUZzLCBub3QgU0NPUEVfUkVGcy4KCjE5OTgtMDYtMTEgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChpc19tZW1iZXJfdGVtcGxhdGVfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBVc2UgaXQuCgoxOTk4LTA2LTExICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGVsbW8uY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBBZGQgc3VwcG9ydCBmb3IgbmVzdGVkIGNsYXNzZXMgdXNpbmcKCW1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBhcyBmcmllbmRzLgoKMTk5OC0wNi0xMCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNhbGwuYyAoY29udmVydF9kZWZhdWx0X2FyZyk6IE1ha2UgZ2xvYmFsLCBub3Qgc3RhdGljLgoJKGNvbnZlcnRfYXJnX2Zvcl9lbGxpcHNpcyk6IFNwbGl0IG91dCBmcm9tIC4uLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEhlcmUuCgkqIGNwLXRyZWUuaCAoY29udmVydF9kZWZhdWx0X2FyZyk7IERlY2xhcmUuCgkoY29udmVydF9hcmdfdG9fZWxsaXBzaXMpOiBMaWtld2lzZS4KCShkb19tZW1iZXJfaW5pdCk6IFJlbW92ZS4KCSogaW5pdC5jIChkb19tZW1iZXJfaW5pdCk6IFJlbW92ZTsgdGhpcyBjb2RlIGlzIGRlYWQuCgkoZXhwYW5kX21lbWJlcl9pbml0KTogUmVtb3ZlIG11Y2ggb2YgdGhpcyBjb2RlOyBpdCBpcyBkZWFkLgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBVc2UgY29udmVydF9kZWZhdWx0X2FyZyBhbmQKCWNvbnZlcnRfYXJnX2Zvcl9lbGxpcHNpcywgcmF0aGVyIHRoYW4gZHVwbGljYXRpbmcgaGVyZS4KCgkqIGNhbGwuYyAoY29udmVydF9saWtlKTogRG9uJ3QgZmFpbCBzaWxlbnRseSBpZgoJYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24gZmFpbHMuICBBbHdheXMgcmV0dXJuIGVycm9yX21hcmtfbm9kZQoJZm9yIGZhaWx1cmUuCgoxOTk4LTA2LTEwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoY292YXJpYW50X3JldHVybl9wKTogQ29tcGxhaW4gYWJvdXQgYW1iaWd1b3VzIGJhc2UuCgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IERpYWdub3NlIHJlZiB0byBuZXN0ZWQgdHlwZS4KCjE5OTgtMDYtMTAgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IENoZWNrIHRoYXQgSU5JVCBpc24ndCBhbiBlcnJvcl9tYXJrX25vZGUKCWJlZm9yZSBnaXZpbmcgZXJyb3IgYWJvdXQgaW52YWxpZCB0eXBlIGZvciBkZWZhdWx0IGFyZy4KCjE5OTgtMDYtMTAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBGaXggdGhpbmtvLgoKMTk5OC0wNi0xMCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogTmV3IGFyZ2MvYXJndiBpbnRlcmZhY2UuCgkqIGNwLXRyZWUuaCAobGFuZ19kZWNvZGVfb3B0aW9uKTogTmV3IGFyZ2MvYXJndiBpbnRlcmZhY2UuCgkqIGxhbmctc3BlY3MuaCAoZGVmYXVsdF9jb21waWxlcnMpOiBPbmx5IGNhbGwgY3BwIGlmIC1FLCAtTSBvciAtTU0gaXMKCXNwZWNpZmllZCBmb3IgY3BwbGliLWVuYWJsZWQgY29tcGlsZXJzLgoJKiBsZXguYyAobGFuZ19pbml0KTogRG9uJ3QgY2hlY2tfbmV3bGluZSBmb3IgY3BwbGliLgoJKGluaXRfcGFyc2UpOiBEb24ndCBpbml0aWFsaXplIGNwcGxpYiBoZXJlLgoKMTk5OC0wNi0xMCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogTWFrZSBzdXJlIEZJRUxEIGhhcyBhIGxhbmdfc3BlY2lmaWMKCXBpZWNlIGJlZm9yZSBjaGVja2luZyBERUNMX01VVEFCTEVfUC4KCjE5OTgtMDYtMTAgIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogdHJlZS5jIChkZWJ1Z19iaW5mbyk6IE1ha2UgcHJpbnRmIGZvcm1hdCBtYXRjaCBhcmd1bWVudHMuCgoJKiBlcnJvci5jIChPQl9QVVRJKTogTWFrZSBwcmludGYgZm9ybWF0IG1hdGNoIGFyZ3VtZW50cy4KCjE5OTgtMDYtMTAgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAocGVyZm9ybV9tZW1iZXJfaW5pdCk6IEhhbmRsZSBkZWZhdWx0LWluaXRpYWxpemF0aW9uLgoKCSogZXhjZXB0LmMgKGJ1aWxkX3Rocm93KTogSGFuZGxlIHRocm93aW5nIE5VTEwuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVXNlIHJlc29sdmVfb2Zmc2V0X3JlZi4KCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IE9ubHkgc3RyaXAgYW4gYW5vbnltb3VzIHVuaW9uCglmb3IgYSBGSUVMRF9ERUNMLgoKCSogY2FsbC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogVHdlYWsuCgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBSZXN0b3JlIGNvZGUgZm9yIGNvbnZlcnNpb24KCWZyb20gY2xhc3MgdHlwZXMuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBVc2UgaXQuICBDbGVhbiB1cC4KCgkqIHR5cGVjay5jIChjb21wX3B0cl90dHlwZXNfcmVhbCk6IEZpeCBjdi1xdWFsIGNvbXBhcmlzb25zLgoKMTk5OC0wNi0xMCAgQnJhbmtvIENpYmVqICA8YnJhbmtvLmNpYmVqQGhlcm1lcy5zaT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCB3YXJuIGFib3V0IHZvaWQgZXhwcmVzc2lvbnMgb24KCXJldHVybiBzdGF0ZW1lbnRzIGluIGZ1bmN0aW9ucyByZXR1cm5pbmcgdm9pZC4KCjE5OTgtMDYtMDkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBwdC5jIChmbl90eXBlX3VuaWZpY2F0aW9uKTogUmV2aXNlIGRvY3VtZW50YXRpb24uICBUaWR5LgoJKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCjE5OTgtMDYtMDkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIHNlbWFudGljcy5jIChmaW5pc2hfdHJ5X2Jsb2NrKTogUmVuYW1lIGV4cGFuZF9zdGFydF9jYXRjaCwgYW5kIGRlbGV0ZQoJZXhwYW5kX2VuZF9jYXRjaC4KCSogcGFyc2UueSAoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogUmVuYW1lIGV4cGFuZF9zdGFydF9jYXRjaCwgYW5kIGRlbGV0ZQoJZXhwYW5kX2VuZF9jYXRjaC4KCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfZWhfc3BlYyk6IFJlbmFtZSBleHBhbmRfc3RhcnRfY2F0Y2gsIGFuZCBkZWxldGUKCWV4cGFuZF9lbmRfY2F0Y2guCgoxOTk4LTA2LTA5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX21lbWJlcik6IE5ldyBmbi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIGl0LgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBVc2UgaXQuCgpNb24gSnVuICA4IDIwOjQ1OjUyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChkZWNsMi5vKTogRGVwZW5kIG9uIGR3YXJmMm91dC5oIGFuZCBkd2FyZm91dC5oLgoKCSogY3AtdHJlZS5oOiBBZGQgcHJvdG90eXBlIGZvciBgbWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dCcgYW5kCglgbWF5YmVfbWFrZV9vbmVfb25seScuCgoJKiBkZWNsLmMgKGF1dG9fZnVuY3Rpb24pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBkZWNsJy4KCgkqIGRlY2wyLmM6IEluY2x1ZGUgZHdhcmYyb3V0LmggYW5kIGR3YXJmb3V0LmguCgoJKiBsZXguYzogUmVtb3ZlIHJlZHVuZGFudCBkZWNsYXJhdGlvbnMgb2YgYHNldF9mbG9hdF9oYW5kbGVyJyBhbmQKCWBhc21fb3V0X2ZpbGUnLgoKMTk5OC0wNi0wOCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBSZW1vdmUgTkVXX0VIX01PREVMIGNvbXBpbGUKCXRpbWUgZmxhZy4gIENhbGwgX19jcF9laF9pbmZvIGluc3RlYWQgb2YgX19jcF9leGNlcHRpb25faW5mby4KCSogZXhjZXB0aW9uLmNjIChzdHJ1Y3QgY3BfZWhfaW5mbyk6IFJlbW92ZSBORVdfRUhfTU9ERUwgZmxhZy4KCShfX2NwX2V4Y2VwdGlvbl9pbmZvKTogUmV0dXJuIG9mZnNldCBpbnRvIGNwX2VoX2luZm8gc3RydWN0dXJlIHRvCgltYXRjaCB3aGF0IHVzZSB0byBiZSB0aGUgc3RhcnQgb2YgdGhpcyBzdHJ1Y3R1cmUuCgkoX19jcF9laF9pbmZvKTogTmV3IGZ1bmN0aW9uIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gY3BfZWhfaW5mbyBzdHJ1Y3QuCgkoX19jcGx1c190eXBlX21hdGNoZXIsIF9fY3BfcHVzaF9leGNlcHRpb24pOiBSZW1vdmUgTkVXX0VIX01PREVMCgljb21waWxlIHRpbWUgZmxhZy4KCShfX3VuY2F0Y2hfZXhjZXB0aW9uLCBfX2NoZWNrX2VoX3NwZWMsIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uKTogQ2FsbAoJX19jcF9laF9pbmZvIGluc3RlYWQgb2YgX19jcF9leGNlcHRpb25faW5mby4KCjE5OTgtMDYtMDggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBEaXNhYmxlIGlubGluaW5nIG9mIGV4dGVybiBpbmxpbmVzCgl3aXRoIHN0YXRpYyB2YXJpYWJsZXMuCgoxOTk4LTA2LTA4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogQ29ycmVjdCBwcmV2aW91cyBjaGFuZ2UgdG8gdXNlIGJ1aWxkLAoJbm90IGJ1aWxkX21pbi4KCjE5OTgtMDYtMDcgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogSGFuZGxlIHBvaW50ZXItdG8tbWVtYmVycyB3aGVyZSB0aGUKCW1lbWJlciBpcyBhIHRlbXBsYXRlLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgoxOTk4LTA2LTA3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbGV4LmMgKGxhbmdfaW5pdF9vcHRpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGxhbmdfaW5pdCk6IFJlbW92ZSBmbGFnX2V4Y2VwdGlvbnMgPT0gMiBoYWNrLgoKMTk5OC0wNi0wNSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGVudmVsb3BlX2FkZF9kZWNsKTogVHdlYWsgZm9yIGltcGxpY2l0IHR5cGVuYW1lLgoKCSogY2FsbC5jIChqb3VzdCk6IEFsc28gd2FybiBhYm91dCBjb25mdXNpbmcgY29udmVyc2lvbiBvcC9jb25zdHJ1Y3RvcgoJb3ZlcmxvYWQgcmVzb2x1dGlvbi4KCgkqIHNwZXcuYyAoeXlsZXgpOiBBbHNvIHJldHVybiB0aGUgVFlQRV9ERUNMIGlmIGdvdF9vYmplY3QuCglEb24ndCBjbGVhciBnb3Rfb2JqZWN0IGFmdGVyICd+Jy4KCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBUd2VhayBkZXN0cnVjdG9yIGhhbmRsaW5nLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5LCBjYXNlIE1FVEhPRF9DQUxMX0VYUFIpOiBEb24ndCBtZXNzIHdpdGgKCVRZUEVfTUFJTl9WQVJJQU5UIGZvciBkZXN0cnVjdG9ycy4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9vYmplY3RfY2FsbF9leHByKTogQ29tcGxhaW4gYWJvdXQgY2FsbGluZyBhCglUWVBFX0RFQ0wuCgoxOTk4LTA2LTA1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19wcmVfbGluaywgbGFuZ19zcGVjaWZpY19leHRyYV9vZmlsZXMpOgoJRGVmaW5lIC0gdXBkYXRlIG5lZWRlZCBieSBnY2MuYyBjaGFuZ2UuCgoxOTk4LTA2LTA1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChjcF9wcmludGVycyk6IFVzZSAnbycgaW5zdGVhZCBvZiAnXycgZm9yIHRoZSBudWxsIGVudHJ5LgoKMTk5OC0wNi0wNSAgTWFydGluIHYuIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuaCAoREVDTF9OQU1FU1BBQ0VfQUxJQVMsIE9SSUdJTkFMX05BTUVTUEFDRSk6IERlY2xhcmUuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFkZCBuYW1lc3BhY2VzX29ubHkgcGFyYW1ldGVyLgoJSWYgc2V0LCByZXR1cm4gb25seSBOQU1FU1BBQ0VfREVDTHMuCgkoc2VsZWN0X2RlY2wpOiBMaWtld2lzZS4KCShpZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBHaXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVyLgoJKGxvb2t1cF9uYW1lX25vbmNsYXNzKTogTGlrZXdpc2UuCgkobG9va3VwX25hbWUpOiBMaWtld2lzZS4KCShmaW5kX2JpbmRpbmcpOiBTa2lwIG5hbWVzcGFjZSBhbGlhc2VzLgoJKGJpbmRpbmdfZm9yX25hbWUpOiBMaWtld2lzZS4KCShwdXNoX25hbWVzcGFjZSk6IENoZWNrIGZvciBuYW1lc3BhY2UgYWxpYXNlcy4KCShsb29rdXBfbmFtZV9uYW1lc3BhY2Vfb25seSk6IE5ldyBmdW5jdGlvbi4KCShiZWdpbl9vbmx5X25hbWVzcGFjZV9uYW1lcywgZW5kX29ubHlfbmFtZXNwYWNlX25hbWVzKTogTmV3IGZ1bmN0aW9ucy4KCSogZGVjbDIuYyAoc2V0X2RlY2xfbmFtZXNwYWNlKTogU2tpcCBuYW1lc3BhY2UgYWxpYXNlcy4KCShkb191c2luZ19kaXJlY3RpdmUpOiBMaWtld2lzZS4KCShkb19uYW1lc3BhY2VfYWxpYXMpOiBQcm9kdWNlIG5hbWVzcGFjZSBhbGlhc2VzLCBmaXggYWxpYXMKCXJlZGVjbGFyYXRpb24uCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IFN1cHBvcnQgU0NPUEVfUkVGLgoJKiBwYXJzZS55IChleHRkZWYpOiBXcmFwIGxvb2t1cCB3aXRoIG5hbWVzcGFjZV9vbmx5IGZvciBuYW1lc3BhY2UKCWFsaWFzZXMgYW5kIHVzaW5nIGRlY2xhcmF0aW9ucy4KCjE5OTgtMDYtMDQgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAocmVhbGx5X292ZXJsb2FkZWRfZm4pOiBPbmx5IHNlZSB0aHJvdWdoIG9uZSBUUkVFX0xJU1QuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBDbGVhbiB1cCBORVdfRVhQUiBjYXNlLgoKMTk5OC0wNi0wNCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCglTdWdnZXN0ZWQgYnkgQnJlbmRhbiBLZWhvZQoJKiBkZWNsMi5jIChkb190b3BsZXZlbF91c2luZ19kZWNsKTogV2hlbiBkZWNsIGlzIGEgVFlQRV9ERUNMLAoJdHJlYXQgaXQgYXMgdXNpbmcgOjpkZWNsLgoKCSogZGVjbDIuYyAoYXJnX2Fzc29jX3R5cGUpOiBQcm9jZXNzIHVua25vd25fdHlwZV9ub2RlIGFuZCBPRkZTRVRfVFlQRS4KCgkqIHRyZWUuYyAobWFwY2FyKTogU3VwcG9ydCBORVdfRVhQUi4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFN1cHBvcnQgTkVXX0VYUFIuCgoxOTk4LTA2LTAzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IFVzZSBvdmVybG9hZCBtYWNoaW5lcnkgdG8gbWFrZSBuYW1lLgoJKiBzZWFyY2guYyAoY292YXJpYW50X3JldHVybl9wKTogTmV3IGZuLgoJKGdldF9tYXRjaGluZ192aXJ0dWFsKTogVXNlIGl0LgoKCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IEZpeCBjaGVjayBmb3Igdm9pZC4KCjE5OTgtMDYtMDEgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChUWVBFX0ZPUl9KQVZBKTogIE5ldyBtYWNyby4KCSogZGVjbC5jLCBjcC10cmVlLmggKGphdmFfYnl0ZV90eXBlX25vZGUsIGphdmFfc2hvcnRfdHlwZV9ub2RlLAoJamF2YV9pbnRfdHlwZV9ub2RlLCBqYXZhX2xvbmdfdHlwZV9ub2RlLCBqYXZhX2Zsb2F0X3R5cGVfbm9kZSwKCWphdmFfZG91YmxlX3R5cGVfbm9kZSwgamF2YV9jaGFyX3R5cGVfbm9kZSwgamF2YV9ib29sZWFuX3R5cGVfbm9kZSk6CglOZXcgInByaW1pdGl2ZSIgdHlwZXMsIHdpdGggcHJlZGVmaW5lZCBuYW1lcyBfX2phdmFfYnl0ZSBldGMuCgkocmVjb3JkX2J1aWx0aW5famF2YV90eXBlKTogIE5ldyBmdW5jdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6ICBNYWtlIEphdmEgdHlwZXMgd2l0aCByZWNvcmRfYnVpbHRpbl9qYXZhX3R5cGUuCgkocHVzaHRhZywgZ3Jva2RlY2xhcmF0b3IpOiAgU2V0IFRZUEVfRk9SX0pBVkEgaWYgaW4gZXh0ZXJuICJKQVZBIi4KCSh4cmVmX2Jhc2V5cGVzKTogIElmIGJhc2UgY2xhc3Mgd2FzIFRZUEVfRk9SX0pBVkEsIHNvIGlzIHRoaXMgY2xhc3MuCgkoZ3Jva2ZuZGVjbCk6ICBDYWxsIGNoZWNrX2phdmFfbWV0aG9kIGZvciBKYXZhIGNsYXNzZXMuCgkqIG1ldGhvZC5jIChpc19qYXZhX3R5cGUpOiAgUmVtb3ZlZC4gIFJlcGxhY2VkIHdpdGggVFlQRV9GT1JfSkFWQS4KCShwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiAgTWF0Y2ggdHlwZXMgYWdhaW5zdCBzcGVjaWZpYwoJamF2YV9YWF90eXBlX25vZGUgdHlwZXMsIHJhdGhlciB0aGFuIHVzaW5nIGlzX2phdmFfdHlwZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogIERvbid0IGFkZCBkZWZhdWx0IGNvcHkgY29uc3RydWN0b3IKCW9yIG9wZXJhdG9yPSBpZiBUWVBFX0ZPUl9KQVZBLgoJKHBvcF9sYW5nX2NvbmV4dCk6ICBSZXN0b3JlIHN0cmljdF9wcm90b3R5cCBwcm9wZXIgaWYgSmF2YS4KCSogZGVjbDIuYyAoYWNjZXB0YWJsZV9qYXZhX3R5cGUsIGNoZWNrX2phdmFfbWV0aG9kKTogIE5ldyBmdW5jdGlvbnMuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogIENvcHkgVFlQRV9GT1JfSkFWQSBmcm9tIHBhdHRlcm4uCgkodHN1YnN0KTogIE1vdmUgY29tbW9uIHN0YXRlbWVudCBhZnRlciBpZiBzdGF0ZW1lbnQuCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiAgSWYgc3RyaWN0LCBUWVBFX0ZPUl9KQVZBIG11c3QgbWF0Y2guCgoxOTk4LTA2LTAxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogVXNlIGZpcnN0X3J0bF9vcC4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZV8xKTogQWxzbyBjaGVjayBpbmRleF90eXBlIGZvcgoJdGVtcGxhdGUgcGFybXMuCgoxOTk4LTA1LTMxICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBBbHdheXMgY29weSBCSU5GT19CQVNFVFlQRVMuCgoxOTk4LTA1LTI5ICBzY290dCBzbnlkZXIgIDxzbnlkZXJAZDBzZ2lmLmZuYWwuZ292PgoKCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogSWYgd2UgY2hhbmdlIFRZUEVfU0laRSwgY2hhbmdlCglUWVBFX1NJWkVfVU5JVCB0b28uCgoxOTk4LTA1LTI5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGNvbXBsYWluIGFib3V0IGluLWNsYXNzCglpbml0aWFsaXphdGlvbiBvZiBzdGF0aWMgY29uc3RzIGlmIHdlIGRvbid0IHJlYWxseSBrbm93IHRoZSB0eXBlCglvZiB0aGUgdmFyaWFibGUuCgoxOTk4LTA1LTI5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKERFQ0xfREVTVFJVQ1RPUl9QKTogTmV3IG1hY3JvLgoJKiBtZXRob2QuYyAoYnVpbGRfZGVzdHJ1Y3Rvcl9uYW1lKTogTmV3IGZuLgoJKiBkZWNsMi5jIChtYXliZV9yZXRyb2ZpdF9pbl9jaHJnKTogU3BsaXQgb3V0Li4uCgkoZ3Jva2NsYXNzZm4pOiBGcm9tIGhlcmUuICBSZW9yZ2FuaXplLgoJKiBkZWNsLmMgKGdyb2tfY3Rvcl9wcm9wZXJ0aWVzKTogTWFrZSBzdXJlIGN0b3JzIGZvciB0eXBlcyB3aXRoCgl2YmFzZXMgaGF2ZSB0aGUgaW5fY2hyZyBwYXJtLgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVwZGF0ZQoJVFlQRV9VU0VTX1ZJUlRVQUxfQkFTRUNMQVNTRVMgZnJvbSB0c3Vic3RlZCBiYXNlcy4gIERvbid0IGNhbGwKCWdyb2tfKl9wcm9wZXJ0aWVzLgoJKHRzdWJzdCk6IENhbGwgZ3Jva19jdG9yX3Byb3BlcnRpZXMgYW5kIG1heWJlX3JldHJvZml0X2luX2NocmcuCgoxOTk4LTA1LTI4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IE1ha2UgdGVzdCBmb3Igd2hldGhlciBvciBub3Qgc3RhdGljCgl2YXJpYWJsZXMgc2hvdWxkIGJlIGluc3RhbnRpYXRlZCBlYXJseSBtYXRjaCBpdHMgY29tbWVudC4KCjE5OTgtMDUtMjggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IEFsd2F5cyBwZWR3YXJuIGFib3V0IHZhY3VvdXNseSByZWRlY2xhcmluZwoJYSBtZW1iZXIuCgkoc3RhcnRfZnVuY3Rpb24pOiBDYWxsIGNoZWNrX2RlZmF1bHRfYXJncy4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogRG9uJ3QgY2FsbCBjaGVja19kZWZhdWx0X2FyZ3MuCgkoY2hlY2tfZGVmYXVsdF9hcmdzKTogVXNlIGNwX2Vycm9yX2F0LgoJKiBsZXguYyAoZG9fcGVuZGluZ19kZWZhcmdzKTogQ2FsbCBjaGVja19kZWZhdWx0X2FyZ3MuCgoxOTk4LTA1LTI3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IE1ha2Ugc3VyZSBnZXRfdHlwZV92YWx1ZSByZXR1cm5zCglzb21ldGhpbmcgYmVmb3JlIHdlIHRyeSB0byB1c2UgaXRzIFRZUEVfTUFJTl9WQVJJQU5ULgoJKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKMTk5OC0wNS0yNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IENvbXBsYWluIGFib3V0IGdldHRpbmcgYSBUUkVFX0xJU1QgdG8KCWluaXRpYWxpemUgYW4gYXJyYXkuCgoJKiBzZWFyY2guYyAoZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBEb24ndCBzZXQgREVDTF9DT05URVhUIGFuZAoJREVDTF9WSVJUVUFMX1AuCgoJKiBmcmllbmQuYyAoZG9fZnJpZW5kKTogQ2xhcmlmeSB0ZW1wbGF0ZSB3YXJuaW5nLgoKMTk5OC0wNS0yNyAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGRlY2wuYyAoc2hhZG93X2xhYmVsKTogRG9uJ3QgdHJlYXQgZGVjbHMgYXMgaWRlbnRpZmllcnMuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBDbGVhciBzaGFkb3dlZF9sYWJlbHMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogUmVzZXQgbGluZW5vIGFuZCBmaWxlbmFtZSBhZnRlciBjYWxsaW5nCglyZWdlbmVyYXRlX2RlY2xfZnJvbV90ZW1wbGF0ZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCB0cnkgdG8gdXNlIFRZUEVfT0JTVEFDSyBvbiBhbgoJZXJyb3JfbWFya19ub2RlLgoKMTk5OC0wNS0yNyAgS2V2aW4gQnVociAgPGJ1aHJAc3RhdC53aXNjLmVkdT4KCgkqIHBhcnNlLnkgKGJhc2VfY2xhc3MpOiBVc2UgaXNfYWdncl90eXBlLCBub3QgSVNfQUdHUl9UWVBFLgoKMTk5OC0wNS0yNiAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEFjY2VwdCBUWVBFTkFNRV9UWVBFIG5vZGVzLgoJKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IEhhbmRsZSBjYXNlcyB3aGVuIG5vbnR5cGUgdGVtcGxhdGUKCXBhcmFtZXRlcnMgYmVjb21lIGNsYXNzZXMgYWZ0ZXIgc3Vic3RpdHV0aW9uLgoKMTk5OC0wNS0yNiAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGZyaWVuZC5jIChpc19mcmllbmQpOiBVc2UgY29tcHR5cGVzLCByYXRoZXIgdGhhbiA9PSB0byBjb21wYXJlCgl0eXBlcy4gIE1vZGlmeSBmb3IgbmV3IHJlcHJlc2VudGF0aW9uIG9mIHRlbXBsYXRlIGZyaWVuZHMuCgkobWFrZV9mcmllbmRfY2xhc3MpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IFVuZG8gMTk5OC0wNS0yMSBjaGFuZ2UuICBUd2Vhay4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERlYWwgd2l0aCB0ZW1wbGF0ZSBmcmllbmRzLgoKCSogZGVjbC5jIChzdG9yZV9wYXJtX2RlY2xzKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIHRvCglleHBhbmRfbWFpbl9mdW5jdGlvbi4KCjE5OTgtMDUtMjYgIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IENoZWNrIGZvciBERUNMX0xBTkdfU1BFQ0lGSUMgYmVmb3JlCglERUNMX1VTRV9URU1QTEFURS4KCjE5OTgtMDUtMjYgIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogbGFuZ3VhZ2VfYXNfc3RyaW5nOiAgSGFuZGxlIGxhbmdfamF2YS4KCjE5OTgtMDUtMjYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBEb24ndCBjb3B5IHRoZSB0eXBlX2RlY2wuCgoxOTk4LTA1LTI2ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBBbHdheXMgc3RvcmUgVFlQRV9NQUlOX1ZBUklBTlQgaW4KCWN1cnJlbnRfY2xhc3NfdHlwZS4KCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFB1dCB0eXBlZGVmcyBvbiB0aGUgdHlwZSdzIG9ic3RhY2suCgoJKiBwYXJzZS55IChjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IFVzZSAkMSB0byBhY2Nlc3MKCXNjb3BlIG9mIG5vdHlwZV9xdWFsaWZpZWRfaWQuCgoxOTk4LTA1LTI2ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAocGFyc2Vfb3B0aW9ucyx5eV9jdXIseXlfbGltKTogQWRkIGZvciBjcHBsaWIuCgkoaW5pdF9wYXJzZSk6IEluaXRpYWxpemUgY3BwbGliIGludGVyZmFjZS4KCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IE1ha2Ugc3VyZSBkZXBlbmRlbmNpZXMgbmV2ZXIgZW5kIHdpdGggYW4KCWVtcHR5IGNvbnRpbnVhdGlvbi4KCjE5OTgtMDUtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBBdm9pZCBjcmFzaGluZyBvbiBlcnJvbmVvdXMgaW5wdXQuCgoxOTk4LTA1LTI1ICBNYXJ0aW4gdi4gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogT25seSBwcm9kdWNlIG9uZSB1bmlxdWUgbmFtZSBmb3IKCWFub255bW91cyBuYW1lc3BhY2VzLgoJKGdldF91bmlxdWVfbmFtZSk6IFJlbW92ZS4KCjE5OTgtMDUtMjUgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjYWxsLmMgKHRvdXJuZXkpOiBEb24ndCBkbyBhbnkgZXh0cmEgY29tcGFyaXNvbnMuCgoJKiBkZWNsMi5jIChidWlsZF9hbm9uX3VuaW9uX3ZhcnMpOiBEb24ndCBjcmFzaCBvbiBlbXB0eSBzdWItdW5pb25zLgoKCSogY3AtdHJlZS5oIChwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0KTogRGVjbGFyZS4KCSogZGVjbC5jIChwdXNodGFnKTogRG9uJ3QgY2FsbCBwdXNoX3RlbXBsYXRlX2RlY2wgd2hlbiB3ZQoJc2hvdWxkbid0LgoJKiBwdC5jIChwcm9jZXNzaW5nX3RlbXBsYXRlX3Bhcm1saXN0KTogTmV3IHZhcmlhYmxlLgoJKFRNUExfQVJHU19IQVZFX01VTFRJUExFX0xFVkVMUyk6IE5ldyBtYWNyby4KCShjb21wbGV0ZV90ZW1wbGF0ZV9hcmdzKTogVXNlIGl0LgoJKGFkZF90b190ZW1wbGF0ZV9hcmdzKTogTGlrZXdpc2UuCgkoaW5uZXJtb3N0X2FyZ3MpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCShiZWdpbl90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBVc2UgcHJvY2Vzc2luZ190ZW1wbGF0ZV9wYXJtbGlzdC4KCShlbmRfdGVtcGxhdGVfcGFybV9saXN0KTogTGlrZXdpc2UuCgoJKiBjcC10cmVlLmggKEFOT05fVU5JT05fVFlQRV9QKTogTmV3IG1hY3JvLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIGl0LgoJKiBkZWNsMi5jIChncm9rX3hfY29tcG9uZW50cyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGluaXRpYWxpemluZ19jb250ZXh0KTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCgkoZG9fYnVpbGRfYXNzaWduX3JlZik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCBnaXZlIGEgY3YtcXVhbGlmaWVkIHZlcnNpb24gb2YgYW4KCXVubmFtZWQgdHlwZSBhIHR5cGVkZWYgbmFtZSAiZm9yIGxpbmthZ2UgcHVycG9zZXMiLgoKCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRG9uJ3QgbG9vayBhdAoJSURFTlRJRklFUl9DTEFTU19WQUxVRSB3aGVuIHRoZXJlJ3Mgbm8gY3VycmVudF9jbGFzc190eXBlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2ludCk6IEhhbmRsZSBlcnJvciBjYXNlcyBncmFjZWZ1bGx5LgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IEhhbmRsZSBzdGF0aWMgbWVtYmVyIHZhcmlhYmxlcwoJY29ycmVjdGx5LgoKCSogcHQuYyAodHN1YnN0KTogVXNlIHRoZSB0c3Vic3QnZCB0eXBlIHdoZW4gcHJvZHVjaW5nIG5ldwoJVEVNUExBVEVfUEFSTV9JTkRFWCBub2Rlcy4KCjE5OTgtMDUtMjQgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKGNwX3RyZWVfZXF1YWwpOiBIYW5kbGUgcG9pbnRlcnMgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KCgkqIGNhbGwuYyAobWF5YmVfaGFuZGxlX2ltcGxpY2l0X29iamVjdCk6IEhhbmRsZSBRVUFMX0NPTlZzLiAgTWFrZQoJc3VyZSB0aGUgdHlwZSBvZiB0aGUgUkVGX0JJTkQgaXMgYSByZWZlcmVuY2UgdHlwZS4KCShtYXliZV9oYW5kbGVfcmVmX2JpbmQsIGNvbXBhcmVfaWNzKTogUmVuYW1lIHJlZmVyZW5jZV90eXBlIHRvCgl0YXJnZXRfdHlwZSBmb3IgY2xhcml0eS4KCgkqIHBhcnNlLnkgKHhjb25kKTogTW92ZSBjYWxsIHRvIGNvbmRpdGlvbl9jb252ZXJzaW9uIC4uLgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2Zvcl9jb25kKTogSGVyZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgoxOTk4LTA1LTI0ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogTmFtZXNwYWNlcyBoYXZlIHR5cGUgdm9pZC4KCSogdHlwZWNrMi5jIChpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBDb21wbGFpbiBhYm91dCBuYW1lc3BhY2UKCXVzZWQgYXMgZXhwcmVzc2lvbi4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCjE5OTgtMDUtMjQgIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBTdXBwb3J0IG5hbWVzcGFjZXMuCgoxOTk4LTA1LTIzICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmRlZjogQWRkIFNSQ0xPQy4KCSogY3AtdHJlZS5oOiBBZGQgc3RydWN0IHRyZWVfc3JjbG9jIGFuZCBhY2Nlc3NvciBtYWNyb3MuCgkqIHRyZWUuYyAoYnVpbGRfc3JjbG9jLCBidWlsZF9zcmNsb2NfaGVyZSk6IE5ldyBmbnMuCgkqIHB0LmMgKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogVXNlIGJ1aWxkX3NyY2xvY19oZXJlLgoJKHB1c2hfdGluc3RfbGV2ZWwpOiBVcGRhdGUgbGFzdF90ZW1wbGF0ZV9lcnJvcl90aWNrIGJlZm9yZSBlcnJvcmluZy4KCShpbnN0YW50aWF0ZV9kZWNsKTogUmVzdG9yZSBsaW5lbm8gYW5kIGlucHV0X2ZpbGVuYW1lIGJlZm9yZQoJY2FsbGluZyBhZGRfcGVuZGluZ190ZW1wbGF0ZS4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBTZXQgdXAgbGluZW5vIGFuZCBpbnB1dF9maWxlbmFtZSBmb3IKCXBlbmRpbmcgdGVtcGxhdGVzLgoKMTk5OC0wNS0yMiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsYW5nX3ByaW50X2Vycm9yX2Z1bmN0aW9uKTogTmV3IGZuLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHByaW50X2Vycm9yX2Z1bmN0aW9uIHRvIHVzZSBpdC4KCSogZXJyZm4uYyAoY3BfdGhpbmcpOiBEb24ndCBjYWxsIG1heWJlX3ByaW50X3RlbXBsYXRlX2NvbnRleHQgaGVyZS4KCgkqIGNhbGwuYyAobWF5YmVfaGFuZGxlX3JlZl9iaW5kKTogUHJvcGFnYXRlIElDU19VU0VSX0ZMQUcgYW5kCglJQ1NfQkFEX0ZMQUcuCgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBEb24ndCBzZXQgTE9PS1VQX05PX0NPTlZFUlNJT04gZm9yCgljb3B5LWluaXRpYWxpemF0aW9uLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogVXNlIGludF9maXRzX3R5cGVfcC4KCShidWlsZF92dGFibGUpOiBQYXNzIGEgc2lnbmVkIG9mZnNldCB0byBidWlsZF92dGFibGVfZW50cnkuCgkocHJlcGFyZV9mcmVzaF92dGFibGUsIG1vZGlmeV9vbmVfdnRhYmxlLCBmaXh1cF92dGFibGVfZGVsdGFzMSwKCXNldF9ydHRpX2VudHJ5KTogTGlrZXdpc2UuCgoxOTk4LTA1LTIyICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogIEFkZCBjb21tZW50cyBkb2N1bWVudGluZyB3aGljaCBMQU5HX0ZMQUdTIGFyZSB1c2VkLgoJKENfVFlQRV9WQVJJQUJMRV9TSVpFLCBDX0RFQ0xfVkFSSUFCTEVfU0laRSk6ICBSZW1vdmVkLCBub3QgdXNlZC4KCjE5OTgtMDUtMjIgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByaW50X3RlbXBsYXRlX2NvbnRleHQpOiBVc2UgZnByaW50ZiBpbnN0ZWFkIG9mIGNwX2Vycm9yLgoKCSogcHQuYyAoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogSnVzdCByZXR1cm4gYW4gZXJyb3JfbWFya19ub2RlLgoJQWxzbyBwcmludCB0aGUgZGVjbCB3ZSB3YW50IGluIGVycm9yIG1lc3NhZ2VzLiAgSWYgd2UgY29tcGxhaW4sCglyZXR1cm4gZXJyb3JfbWFya19ub2RlLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBTZXQgbGluZW5vIGFuZCBpbnB1dF9maWxlbmFtZSBzbwoJZXJyb3IgbWVzc2FnZXMgd2lsbCBiZSB1c2VmdWwuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBEb24ndCBtZXNzIHdpdGggYSByZXR1cm5lZAoJZXJyb3JfbWFya19ub2RlLgoKCSogcHQuYyAocHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IEFkZCBuZXcgYXJndW1lbnQuCgkobWF5YmVfcHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IE5ldyBmbi4KCShwdXNoX3RpbnN0X2xldmVsKTogSW5jcmVtZW50IHRpbnN0X2xldmVsX3RpY2suCgkocG9wX3RpbnN0X2xldmVsKTogTGlrZXdpc2UuCgkqIGVycmZuLmMgKGNwX3RoaW5nKTogQ2FsbCBtYXliZV9wcmludF90ZW1wbGF0ZV9jb250ZXh0LiAgVXNlCgl4cmVhbGxvYyBpbnN0ZWFkIG9mIHhtYWxsb2MuCgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3AsIENPTlZFUlRfRVhQUik6IFByb3BhZ2F0ZSBUUkVFX0NPTlNUQU5ULgoKMTk5OC0wNS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0X2ZyaWVuZF9jbGFzcyk6IERvbid0IGNhbGwgcmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlCglpZiB0aGUgdGVtcGxhdGUgd2UgbG9va2VkIHVwIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgd2UgYWxyZWFkeQoJaGF2ZS4KClRodSBNYXkgMjEgMTE6NTQ6NDQgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbGV4LmM6IChoYW5kbGVfc3lzdl9wcmFnbWEpOiBGSUxFKiBwYXJhbWV0ZXIgbm90IHVzZWQuCgkoY3BwX3JlYWRlcixwYXJzZV9pbik6IEFkZCBmb3IgY3BwbGliLgoJKGNoZWNrX25ld2xpbmUpOiBDYWxsIGhhbmRsZV9zeXN2X3ByYWdtYSB3aXRoIG5ldyBpbnRlcmZhY2UuCgkoY2hlY2tfbmV3bGluZSk6IENhbGwgR0VUX0RJUkVDVElWRV9MSU5FLCBub3QgZ2V0X2RpcmVjdGl2ZV9saW5lLgoKCSogaW5wdXQuYzogKHl5X2N1cix5eV9saW0seXlfZ2V0X3Rva2VuLEdFVEMpOiBBZGQgZm9yIGNwcGxpYi4KCShzdWJfZ2V0Y2gpOiBDYWxsIEdFVEMgZm9yIGNwcGxpYi4KCgkqIGNwLXRyZWUuaDogKGdldF9kaXJlY3RpdmVfbGluZSk6IERpZmZlcmVudCBwcm90b3R5cGUgZm9yIGNwcGxpYi4KCShHRVRfRElSRUNUSVZFX0xJTkUpOiBNYWNybyB3cmFwcGVyIGZvciBnZXRfZGlyZWN0aXZlX2xpbmUuCgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBBZGQgQGV4dHJhX2N4eF9vYmpzQCBmb3IgY3BwbGliLgoKMTk5OC0wNS0yMSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobWF5YmVfbWFrZV9vbmVfb25seSk6IE5ldyBmbi4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBpdC4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoKMTk5OC0wNS0yMSAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbDIuYyAoZmluZF9yZXByZXNlbnRhdGl2ZV9tZW1iZXIpOiBSZW5hbWUgdG8gLi4uCgkoYnVpbGRfYW5vbl91bmlvbl92YXJzKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogRml4IHN0dXBpZGl0eSBvZiBwcmV2aW91cyBjaGFuZ2UuCgoxOTk4LTA1LTIwICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tmbmRlY2wpOiBIYW5kbGUgZGVmaW5pdGlvbiBvZiBzcGVjaWFsaXphdGlvbiBpbgoJZnJpZW5kIGRlY2xhcmF0aW9uLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRml4IExPT0tVUF9FWFBSIGhhbmRsaW5nLgoKMTk5OC0wNS0yMCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2xhc3MuYyAoZGVsZXRlX2R1cGxpY2F0ZV9maWVsZHNfMSk6IFVzZSBERUNMX0RFQ0xBUkVTX1RZUEVfUAoJdG8gbG9vayBmb3IgdHlwZSBkZWNsYXJhdGlvbnMuCgkoZmluaXNoX3N0cnVjdCk6IERlYWwgd2l0aCB0ZW1wbGF0ZXMgb24gdGhlIENMQVNTVFlQRV9UQUdTIGxpc3QuCgkqIGNwLXRyZWUuaCAoREVDTF9ERUNMQVJFU19UWVBFX1ApOiBOZXcgbWFjcm8uCgkoZmluaXNoX21lbWJlcl9jbGFzc190ZW1wbGF0ZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IFB1dCBtZW1iZXIgY2xhc3MgdGVtcGxhdGVzIG9uIHRoZQoJQ0xBU1NUWVBFX1RBR1MgbGlzdCwganVzdCBhcyBmb3Igb3JkaW5hcnkgbWVtYmVyIGNsYXNzZXMuCgkocHVzaGRlY2xfY2xhc3NfbGV2ZWwpOiBVc2UgREVDTF9ERUNMQVJFU19UWVBFX1AuCgkobG9va3VwX3RhZyk6IExvb2sgZm9yIElERU5USUZJRVJfQ0xBU1NfVkFMVUVzLCBqdXN0IGFzIHdpdGgKCUlERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFcy4KCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiBNb3ZlIGNvZGUgdG8gLi4uCgkqIHNlbWFudGljcy5jIChmaW5pc2hfbWVtYmVyX2NsYXNzX3RlbXBsYXRlKTogTmV3IGZ1bmN0aW9uLgoJRG9uJ3QgcHV0IG1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMgb24gdGhlIGxpc3Qgb2YgY29tcG9uZW50cyBmb3IgYQoJY2xhc3MuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoJKiBwdC5jIChjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogRG9uJ3QgdHJ5IERFQ0xfQ09OVEVYVCBvbiB0eXBlcy4KCUluIGZhY3QsIGRvbid0IHVzZSBERUNMX0NPTlRFWFQgYXQgYWxsIGhlcmUuCgoxOTk4LTA1LTIwICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAocmVjb3JkX3Vua25vd25fdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENhbGwgaXQgZm9yIHRoZSB1bmtub3duIGFuZCBnbG9iYWwgdHlwZQoJbm9kZXMuCgoxOTk4LTA1LTIwICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsMi5jIChmaW5kX3JlcHJlc2VudGF0aXZlX21lbWJlcik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfYW5vbl91bmlvbik6IFVzZSBpdC4KCgkqIGNwLXRyZWUuaCAoTUFJTl9OQU1FX1ApOiBOZXcgbWFjcm8uCgkoREVDTF9NQUlOX1ApOiBMaWt3aXNlLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogQXZvaWQgY3Jhc2hpbmcgb24gcmVkZWZpbml0aW9ucyBvZiBgbWFpbicuCgkoZ3Jva2ZuZGVjbCk6IFVzZSB0aGUgbmV3IG1hY3Jvcy4KCShncm9rZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgoJKGZpbnNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgpXZWQgTWF5IDIwIDAyOjE2OjAxIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKHN0YXJ0X29iamVjdHMsIGZpbmlzaF9vYmplY3RzLCBkb19kdG9ycywKCWRvX2N0b3JzKTogU3BsaXQgb3V0IGZyb20uLi4KCShmaW5pc2hfZmlsZSk6IC4uLmhlcmUuCgpUdWUgTWF5IDE5IDIwOjM2OjIzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IERvbid0IGFib3J0IG9uIHBsYWNlaG9sZGVycyBmcm9tCglwdXNoX2NsYXNzX2RlY2xzLgoKVHVlIE1heSAxOSAxNToxNjoyMiAxOTk4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoaXNfZW1wdHlfY2xhc3MpOiBSZXR1cm4gMCBpZiBUWVBFIGlzIGFuIGVycm9yX21hcmtfbm9kZS4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBhbiBBUlJPV19FWFBSLgoKVHVlIE1heSAxOSAxNToxMzozOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHNhdmVhYmxlX29ic3RhY2spOiBEZWNsYXJlLgoJKHB1c2hkZWNsKTogQ29weSBUWVBFX0RFQ0xzIHRvIHRoZSBzYW1lIG9ic3RhY2sgYXMgdGhlIHR5cGUgdGhleQoJZGVjbGFyZSwgaWYgbmVjZXNzYXJ5LgoKVHVlIE1heSAxOSAxNDo1MDoyNyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGNvbXBhcmVfcXVhbCk6IFJlbW92ZS4KCShpc19zdWJzZXEpOiBUd2Vhay4KCShpc19wcm9wZXJseV9kZXJpdmVkX2Zyb20pOiBOZXcgZnVuY3Rpb24uCgkobWF5YmVfaGFuZGxlX3JlZl9iaW5kKTogTGlrZXdpc2UuCgkobWF5YmVfaGFuZGxlX2ltcGxpY2l0X29iamVjdCk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogTW9kaWZ5IHN1YnN0YW50aWFsbHkgdG8gYnJpbmcgaW50byBjb25mb3JtYW5jZSB3aXRoCgl0aGUgc3RhbmRhcmQuCgkqIGNwLXRyZWUuaCAoVFlQRV9QVFJNRU1GVU5DX09CSkVDVF9UWVBFKTogTmV3IG1hY3JvLgoJKGNvbXBfY3ZfcXVhbGlmaWNhdGlvbik6IERlY2xhcmUuCgkoY29tcF9jdl9xdWFsX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29tcF9jdl9xdWFsaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkoY29tcF9jdl9xdWFsX3NpZ25hdHVyZSk6IExpa2V3aXNlLgoKVHVlIE1heSAxOSAxMDowNTowMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAocGFyc2Uubyk6IERlcGVuZCBvbiB0b3BsZXYuaC4KCgkqIGNsYXNzLmMgKHR5cGVjb2RlX3ApOiBSZW1vdmUgcHJvdG90eXBlIGFuZCBkZWZpbml0aW9uLgoKCSogY3AtdHJlZS5oIChjdXJyZW50bHlfb3Blbl9jbGFzcywgaXNfZW1wdHlfY2xhc3MsIG1lbWJlcl9wKToKCUFkZCBwcm90b3R5cGUuCgoJKiBkZWNsLmMgKHB1c2hfb3ZlcmxvYWRlZF9kZWNsX3RvcF9sZXZlbCk6IFJlbW92ZSBwcm90b3R5cGUgYW5kCglkZWZpbml0aW9uLgoKCSogZXJyZm4uYyAoY3BfZXJyb3IpOiBDYXN0IGZ1bmN0aW9uIHBvaW50ZXIgYGVycm9yJyB0byAoZXJyb3JmbiAqKQoJaW4gY2FsbCB0byBgY3BfdGhpbmcnLgoJKGNwX3dhcm5pbmcpOiBMaWtld2lzZSBmb3IgZnVuY3Rpb24gcG9pbnRlciBgd2FybmluZycuCgoJKiBleGNlcHQuYyAoZG9fZnVuY3Rpb25fY2FsbCk6IFJlbW92ZSBwcm90b3R5cGUgYW5kIGRlZmluaXRpb24uCgkoY2FsbF9laF9pbmZvKTogV3JhcCB2YXJpYWJsZSBgdDEnIGluIG1hY3JvIE5FV19FSF9NT0RFTC4KCgkqIG1ldGhvZC5jIChpc19qYXZhX3R5cGUpOiBBZGQgcHJvdG90eXBlIGFuZCBtYWtlIGl0IHN0YXRpYy4KCgkqIHBhcnNlLnk6IEluY2x1ZGUgdG9wbGV2LmguCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYXJnJy4KCShpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UgZm9yIGBzYXZlX3RpJy4KCgkqIHRyZWUuYyAocHJvcGFnYXRlX2JpbmZvX29mZnNldHMpOiBMaWtld2lzZSBmb3IgYGJhc2VfYmluZm9zJy4KClR1ZSBNYXkgMTkgMDI6NDM6MjUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IEhhbmRsZSB0ZW1wbGF0ZV9pZHMuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBBZGQgZ2xvYmFsX3Njb3BlIHRlbXBsYXRlX2lkLgoKTW9uIE1heSAxOCAyMzoyMjo1MiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChnZXRfc2VudHJ5KTogVXNlIGVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KCURvbid0IGRlY2xhcmUgcGVybWFuZW50X29ic3RhY2suCgpNb24gTWF5IDE4IDEyOjI4OjQ0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnkgKC5maW5pc2hfbmV3X3BsYWNlbWVudCk6IE5ldyBub24tdGVybWluYWwuCgkodW5hcnlfZXhwciwgbmV3X3R5cGVfaWQpOiBVc2UgaXQuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoKTW9uIE1heSAxOCAxMjoyMDoyNyAxOTk4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogcHQuYyAocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogU2F5IHdoZXJlIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uCglvZiB0aGUgdGVtcGxhdGUtcGFyYW1ldGVyJ3MgZGVmYXVsdCBhcmd1bWVudCBhcHBlYXJlZC4KCk1vbiBNYXkgMTggMDM6MDA6NTcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBUd2VhayBlbXB0eSBjbGFzcyBoYW5kbGluZy4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogVXNlIGN1cnJlbnRseV9vcGVuX2NsYXNzLgoKCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IGFib3J0IG9uIFRSRUVfTk9OTE9DQUxfRkxBRy4KCk1vbiBNYXkgMTggMDE6NDM6MDEgMTk5OCAgTWFydGluIHYuIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGxvb2sgYXQgSURFTlRJRklFUl9MT0NBTF9WQUxVRQoJZm9yIGEgdHlwZSB1bmxlc3MgaXQgaXMgb25lLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIE9WTF9DVVJSRU5UIGluIGVycm9yIG1lc3NhZ2UuCgpNb24gTWF5IDE4IDAxOjI0OjA4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLCBvYmpkaXIpOiBEZWZpbmUuCgoJKiBNYWtlZmlsZS5pbiAoQklTT04pOiBVc2UgYmlzb24gZnJvbSB0aGUgYnVpbGQgdHJlZSBpZiBpdCBleGlzdHMuCgkoRkxFWCk6IExpa2V3aXNlLgoKU3VuIE1heSAxNyAxNDo1MjowOCAxOTk4ICBNYXJ0aW4gdi4gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogdHlwZWNrLmMgKHR5cGVfdW5rbm93bl9wKTogUmV0dXJuIHRydWUgZm9yIFRSRUVfTElTVCBhbHNvLgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBUWVBFX01BSU5fVkFSSUFOVCBvbiB0eXBlZGVmcy4KClN1biBNYXkgMTcgMTQ6NTE6NDEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KClN1biBNYXkgMTcgMTM6NTM6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IENhbGwgc3VzcGVuZF9tb21lbnRhcnkgYXJvdW5kIHRoZSBjcmVhdGlvbgoJb2YgdmFsdWVzIHRoYXQgbXVzdCBiZSBzYXZlZCBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nLgoJKiBwYXJzZS55ICguYnVpbGRfbmV3X3BsYWNlbWVudCk6IE5ldyBub24tdGVybWluYWwuCgkodW5hcnlfZXhwciwgbmV3X3BsYWNlbWVudCk6IFVzZSBpdC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgpTdW4gTWF5IDE3IDEyOjMyOjA4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogVXNlIENBTk9OSUNBTF9UWVBFX1ZBUklBTlQgdG8gY29tcGFyZQoJb2xkIGFuZCBuZXcgdHlwZXMuCgoJKiBwdC5jICh0c3Vic3QpOiBNYWtlIHN1cmUgdGhhdCBCSU5GT19UWVBFIG9mIG5ldyBiaW5mb3MgaXMgdGhlCgljYW5vbmljYWwgdHlwZS4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgdXNlIElTX1NJR05BVFVSRSBvbiBhIG5hbWVzcGFjZS4KCkZyaSBNYXkgMTUgMjA6Mjg6MDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogUmV2ZXJ0IHByb2JsZW0gY2hhbmdlLgoKCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IEZpeC4KCkZyaSBNYXkgMTUgMTU6MzQ6MDIgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBDbGVhbiB1cCwgYWRkIERFQ0xfREFUQV9BUkVBIGJpdHMuCgpGcmkgTWF5IDE1IDAwOjQ2OjA1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFVzZSBCSU5GT19TSVpFLgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogVXNlICd0ZW0nLgoKVGh1IE1heSAxNCAxNjozMDo0NyAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2M6IEluY2x1ZGUgZWgtY29tbW9uLmguCgkoc3RydWN0IGNwX2VoX2luZm8pOiBBZGQgZWhfaW5mbyBzdHJ1Y3Qgd2l0aCBORVdfRUhfTU9ERUwuCgkoX19jcGx1c190eXBlX21hdGNoZXIpOiBGaXJzdCBzdGFiIGF0IG5ldyBDKysgcnVudGltZSB0eXBlIG1hdGNoZXIuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbik6IEluaXRpYWxpemUgZWhfaW5mbyBzdHJ1Y3QgYXMgd2VsbC4KCSogZXhjZXB0LmM6IFJlbW92ZSBsb2NhbCBzdHJ1Y3RzIGFuZCBpbmNsdWRlIGVoLWNvbW1vbi5oLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBTZXQgbGFuZ3VhZ2UgYW5kIHZlcnNpb24gY29kZXMuCgkoY2FsbF9laF9pbmZvKTogQWRkIHByZXNlbmNlIG9mIGVoX2luZm8gdG8gcnVudGltZSBkZXNjcmlwdGlvbiBvZgoJc3RydWN0IGNwX2VoX2luZm8uCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogQ2FsbCBzdGFydF9jYXRjaF9ibG9jaygpIGFuZCBlbmRfY2F0Y2hfYmxvY2soKS4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF90cnlfYmxvY2spOiBDYWxsIHN0YXJ0X2NhdGNoX2Jsb2NrKCkgYW5kCgllbmRfY2F0Y2hfYmxvY2soKS4KCSogcGFyc2UueSAoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogQ2FsbCBzdGFydF9jYXRjaF9ibG9jaygpIGFuZAoJZW5kX2NhdGNoX2Jsb2NrKCkuCgpUaHUgTWF5IDE0IDEyOjI3OjM0IDE5OTggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAob3JpZ2luYWxfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShjb21tb25fdHlwZSk6IFVzZSBpdCB0byBnZXQgdGhlIERFQ0xfT1JJR0lOQUxfVFlQRSBmb3IgVDEgYW5kIFQyLAoJdG8gc2VlIGlmIHRoZXkncmUgYWN0dWFsbHkgdGhlIHNhbWUuCgkqIGNwLXRyZWUuaCAob3JpZ2luYWxfdHlwZSk6IERlY2xhcmUuCgpXZWQgTWF5IDEzIDEyOjU0OjMwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChsZXgubyk6IERlcGVuZCBvbiBvdXRwdXQuaC4KCgkqIGNhbGwuYyAoYWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGNhbmQnLgoJKGFkZF9jb252X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogTGlrZXdpc2UuCgoJKiBjcC10cmVlLmg6IEFkZCBwcm90b3R5cGUgZm9yIGB0eXBlc19vdmVybGFwX3AnLgoKCSogZGVjbC5jIChzaWduYWxfY2F0Y2gpOiBNYXJrIHBhcmFtZXRlciBgc2lnJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBkZWNsMi5jIChtZXJnZV9mdW5jdGlvbnMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgdG1wJyBhbmQKCWB0ZW1wbicuCgoJKiBlcnJvci5jIChleHByX2FzX3N0cmluZyk6IE1hcmsgcGFyYW1ldGVyIGB2JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoY29kZV9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShsYW5ndWFnZV9hc19zdHJpbmcpOiBMaWtld2lzZS4KCShwYXJtX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKG9wX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKGFzc29wX2FzX3N0cmluZyk6IExpa2V3aXNlLgoJKGN2X2FzX3N0cmluZyk6IExpa2V3aXNlLgoKCSogbGV4LmM6IEluY2x1ZGUgb3V0cHV0LmguCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogQ2FzdCBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIGEgY2hhciouCgoJKiBzZWFyY2guYyAoZGZzX25vX292ZXJsYXBfeWV0KTogTWFyayBwYXJhbWV0ZXIgYHQnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiB0aW5mby5jYyAoX19jbGFzc190eXBlX2luZm86OmRjYXN0KTogQ2hhbmdlIHRoZSB0eXBlIG9mIHZhcmlhYmxlCglgaScgZnJvbSBpbnQgdG8gc2l6ZV90LgoKCSogdHlwZWNrLmMgKGxhbmd1YWdlX2x2YWx1ZV92YWxpZCk6IE1hcmsgcGFyYW1ldGVyIGBleHAnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgpUdWUgTWF5IDEyIDIxOjM3OjQ5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfc2ltcGxlX2RlY2wpOiBVc2UgREVDTF9DTEFTU19TQ09QRV9QIGFuZC9vcgoJREVDTF9OQU1FU1BBQ0VfU0NPUEVfUC4KCShsYW5nX2RlY2xfbmFtZSk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uLCB0c3Vic3QpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoZGVjbCwgcmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlLCBzdGFydF9kZWNsLAoJY3BfZmluaXNoX2RlY2wsIHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGNvbXBhcmVfaWNzKTogVXNlIERFUklWRURfRlJPTV9QLgoKVHVlIE1heSAxMiAwNzoyNDoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKENBTk9OSUNBTF9UWVBFX1ZBUklBTlQpOiBOZXcgbWFjcm8uCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBVc2UgaXQuCgkoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogTGlrZXdpc2UuCgoJKiBlcnJvci5jIChkdW1wX3NpbXBsZV9kZWNsKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IGZyb20gLi4uCgkoZHVtcF9kZWNsKTogVXNlIGl0LgoKTW9uIE1heSAxMSAxMTozODowNyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdHJlZS5jIChsYW5nX3ByaW50X3hub2RlKTogQWRkIG1pc3NpbmcgYGJyZWFrJy4KCgkqIHB0LmMgKHRzdWJzdCk6IFJlbW92ZSBkdXBsaWNhdGUgY2hlY2sgZm9yIElERU5USUZJRVJfTk9ERS4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IEFkanVzdCBmb3IgY2hhbmdlcyB0bwoJZm5fdHlwZV91bmlmaWNhdGlvbi4KCShhZGRfdGVtcGxhdGVfY2FuZGlkYXRlX3JlYWwpOiBMaWtld2lzZS4KCShhZGRfdGVtcGxhdGVfY29udl9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAodW5pZmljYXRpb25fa2luZF90KTogTmV3IHR5cGUuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFkanVzdCBwcm90b3R5cGUuCgkodHlwZV91bmlmaWNhaXRvbik6IExpa2V3aXNlLgoJKiBwdC5jIChVTklGWV9BTExPV19OT05FKTogTmV3IG1hY3JvLgoJKFVOSUZZX0FMTE9XX01PUkVfQ1ZfUVVBTCk6IExpa2V3aXNlLgoJKFVOSUZZX0FMTE9XX0xFU1NfQ1ZfUVVBTCk6IExpa2V3aXNlLgoJKFVOSUZZX0FMTE9XX0RFUklWRUQpOiBMaWtld2lzZS4KCSh1bmlmeSk6IENoYW5nZSBwcm90b3R5cGUuCgkobWF5YmVfYWRqdXN0X3R5cGVzX2Zvcl9kZWR1Y3Rpb24pOiBOZXcgZnVuY3Rpb24uCgkoY2hlY2tfY3ZfcXVhbHNfZm9yX3VuaWZ5KTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQWRqdXN0LgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCSh0eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuICBVc2UKCW1heWJlX2FkanVzdF90eXBlc19mb3JfZGVkdWN0aW9uLiAgRml4IG1pc2hhbmRsaW5nIG9mCgliYWNrLXVuaWZpY2F0aW9uIG9mIHRlbXBsYXRlIGZ1bmN0aW9ucyBwYXNzZWQgYXMgYXJndW1lbnRzLiAgUGFzcwoJYXBwcm9wcmlhdGUgY29tYmluYXRpb24gb2YgVU5JRllfQUxMT1dfKiB0byB1bmlmeS4KCSh1bmlmeSk6IFJlbW92ZSB1bnVzZWQgTlRQQVJNUyBwYXJhbWV0ZXIuICBVc2UKCWNoZWNrX2N2X3F1YWxzX2Zvcl91bmlmeS4gIFJlbW92ZSBib2d1cyBjb2RlIHRoYXQgYWxsb3dlZAoJdG9vLWdlbmVyb3VzIHVuaWZpY2F0aW9uIGluIG9yZGVyIHRvIGFkaGVyZSBtb3JlIGNsb3NlbHkgdG8gc3RhbmRhcmQuCgkoZ2V0X2JpbmRpbmdzX3JlYWwpOiBBZGp1c3QuCgkoZ2V0X2NsYXNzX2JpbmRpbmdzKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IE9ubHkgdXNlIHRoZSBpbm5lcm1vc3QKCXRlbXBsYXRlIGFyZ3VtZW50cyB3aGVuIG1hbmdsaW5nLgoJKiBwdC5jICh0c3Vic3RfdGVtcGxhdGVfYXJndW1lbnRfdmVjdG9yKTogTmV3IGZ1bmN0aW9uLgoJKGNvbXBsZXRlX3RlbXBsYXRlX2FyZ3MpOiBEZWFsIHdpdGggdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUKCWV4dHJhX2FyZ3MgY29udGFpbiBtb3JlIHRoYW4gb25lIGxldmVsIG9mIGFyZ3VtZW50cy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBEZWFsIHdpdGggbWVtYmVyIHRlbXBsYXRlIGNsYXNzZXMsIHdoaWNoCgltYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxldmVsIG9mIGFyZ3VtZW50cy4KCSh0c3Vic3QpOiBEb24ndCB0c2J1c3QgaW50byB0aGUgVFJFRV9UWVBFIG9mIGFuIElERU5USUZJRVJfTk9ERS4KCUltcHJvdmUgaGFuZGxpbmcgb2YgbWVtYmVyIHRlbXBsYXRlIGNsYXNzZXMuICBVc2UKCURFQ0xfUFJJTUFSWV9URU1QTEFURSBpbnN0ZWFkIG9mIGlubGluZSBleHBhbnNpb24uICBVc2UKCXRzdWJzdF90ZW1wbGF0ZV9hcmd1bWVudF92ZWN0b3Igd2hlcmUgYXBwcm9wcmlhdGUuCgkocmVnZW5lcmF0ZV9kZWNsX2Zyb21fdGVtcGxhdGUpOiBCcmVhayBvdXQgZnJvbSAuLi4KCShpbnN0YW50aWF0ZV9kZWNsKTogSGVyZS4KCgkqIGxleC5jICh5eXByaW50KTogUmVtb3ZlIFRZUEVOQU1FX0VMTElQU0lTLgoJKiBwYXJzZS5oOiBSZWdlbmVyYXRlZC4KCSogcGFyc2UuYzogUmVhbGx5IHJlZ2VuZXJhdGVkLgoKCSogY3AtdHJlZS5oIChmaW5pc2hfdW5hcnlfb3BfZXhwcik6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfaWRfZXhwcik6IExpa2V3aXNlLgoJKGJlZ2luX25ld19wbGFjZW1lbnQpOiBMaWtld2lzZS4KCShmaW5pc2hfbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKGZpbmlzaF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZmluaXNoX3RyYW5zbGF0aW9uX3VuaXQpOiBMaWtld2lzZS4KCShmaW5pc2hfcGFybWxpc3QpOiBMaWtld2lzZS4KCShiZWdpbl9jbGFzc19kZWZpbml0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfZGVmYXVsdF9hcmdzKTogTGlrZXdpc2UuCgkoZmluaXNoX2lubGluZV9kZWZpbml0aW9ucyk6IExpa2V3aXNlLgoJKiBwYXJzZS55IChHQ0NfQVNNX0tFWVdPUkQpOiBSZW1vdmUuCgkoVFlQRU5BTUVfRUxMSVBTSVMpOiBMaWtld2lzZS4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCglVc2UgbmV3IGZ1bmN0aW9ucyBpbiBzZW1hbnRpY3MuYyBpbiB0aGUgYWN0aW9ucyBmb3IgbWFueSBydWxlcy4KCSogZ3h4LmdwZXJmIChHQ0NfQVNNX0tFWVdPUkQpOiBKdXN0IHVzZSBBU01fS0VZV09SRC4KCSogaGFzaC5oOiBSZWdlbmVyYXRlZC4KCSogc2VtYW50aWNzLmMgKGZpbmlzaF9leHByX3N0bXQpOiBBbGxvdyBOVUxMIGV4cHIuCgkoZmluaXNoX3VuYXJ5X29wX2V4cHIpOiBOZXcgZnVuY3Rpb24sIGNvbnRhaW5pbmcKCWNvZGUgcHJldmlvdXNseSBpbiBwYXJzZS55LgoJKGZpbmlzaF9pZF9leHByKTogTGlrZXdpc2UuCgkoYmVnaW5fbmV3X3BsYWNlbWVudCk6IExpa2V3aXNlLgoJKGZpbmlzaF9uZXdfcGxhY2VtZW50KTogTGlrZXdpc2UuCgkoZmluaXNoX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShmaW5pc2hfdHJhbnNsYXRpb25fdW5pdCk6IExpa2V3aXNlLgoJKGZpbmlzaF9wYXJtbGlzdCk6IExpa2V3aXNlLgoJKGJlZ2luX2NsYXNzX2RlZmluaXRpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfY2xhc3NfZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGZpbmlzaF9kZWZhdWx0X2FyZ3MpOiBMaWtld2lzZS4KCShmaW5pc2hfaW5saW5lX2RlZmluaXRpb25zKTogTGlrZXdpc2UuCgpTdW4gTWF5IDEwIDIzOjQzOjEzIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBkZWNheSBhcnJheXMgYW5kIGZ1bmN0aW9ucyB0bwoJcG9pbnRlciB0eXBlIHdoZW4gY29udmVydGluZyB0byBhIGNsYXNzIHR5cGUuCgpTdW4gTWF5IDEwIDIyOjUzOjU2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoREVDTF9OQU1FU1BBQ0VfU0NPUEVfUCk6IE5ldyBtYWNyby4KCShERUNMX0NMQVNTX1NDT1BFX1ApOiBMaWtld2lzZS4KClN1biBNYXkgMTAgMjI6NDg6MjIgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogVXNlIE9WTF9DVVJSRU5UIG9uIFRSRUVfVkVDX0VMVC4KCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogTGlrZXdpc2UuCgpTdW4gTWF5IDEwIDIyOjQ4OjEyIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHRyZWUuYyAobWFwY2FyKTogQWRkIE9WRVJMT0FEIHN1cHBvcnQuCgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IFdlIG11c3QgdXNlIGJhc2V0eXBlX3BhdGggYmVmb3JlIHdlCglkZXN0cm95IGl0IHdpdGggYSBjYWxsIHRvIGNvbnZlcnRfcG9pbnRlcl90by4KClNhdCBNYXkgIDkgMTQ6NDQ6MzcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoY3VycmVudGx5X29wZW5fY2xhc3MpOiBOZXcgZm4uCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoKRnJpIE1heSAgOCAyMzozMjo0MiAxOTk4ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwLXRyZWUuZGVmIChPVkVSTE9BRCk6IE5ldyBub2RlLgoJKiBjcC10cmVlLmggKEJJTkRJTkdfVFlQRSwgU0VUX0lERU5USUZJRVJfR0xPQkFMX1ZBTFVFLAoJU0VUX0lERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFKTogRGVmaW5lLgoJKE5BTUVTUEFDRV9CSU5ESU5HKTogUmVtb3ZlLgoJKElERU5USUZJRVJfR0xPQkFMX1ZBTFVFLCBJREVOVElGSUVSX05BTUVTUEFDRV9WQUxVRSk6IFVzZQoJbmFtZXNwYWNlX2JpbmRpbmcuCgkoT1ZMX0ZVTkNUSU9OLCBPVkxfQ0hBSU4sIE9WTF9DVVJSRU5ULCBPVkxfTkVYVCwgT1ZMX1VTRUQpOgoJRGVmaW5lLgoJKHRyZWVfb3ZlcmxvYWQpOiBOZXcgc3RydWN0LgoJKElERU5USUZJRVJfVFlQRV9WQUxVRSk6IFVzZSBpZGVudGlmaWVyX3R5cGVfdmFsdWUuCgkoUkVBTF9JREVOVElGSUVSX1RZUEVfVkFMVUUpOiBEZWZpbmUuCgkoSURFTlRJRklFUl9IQVNfVFlQRV9WQUxVRSk6IFVzZSBJREVOVElGSUVSX1RZUEVfVkFMVUUuCgkobGFuZ19kZWNsX2ZsYWdzKTogUmVtb3ZlIGluX25hbWVzcGFjZS4KCShsYW5nX2RlY2wpOiBSZW1vdmUgY2hhaW4uCgkoREVDTF9DSEFJTiwgREVDTF9OQU1FU1BBQ0UpOiBSZW1vdmUuCgkoZmxhZ19ob25vcl9zdGQpOiBEZWNsYXJlIGV4dGVybi4KCShpZGVudGlmaWVyX3R5cGVfdmFsdWUsIHB1c2hkZWNsX25hbWVzcGFjZV9sZXZlbCwgcHVzaF91c2luZ19kZWNsLAoJbmFtZXNwYWNlX2JpbmRpbmcsIHNldF9uYW1lc3BhY2VfYmluZGluZywKCWxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcywgY2F0X25hbWVzcGFjZV9sZXZlbHMsCglzZXRfZGVjbF9uYW1lc3BhY2UsIGxvb2t1cF9hcmdfZGVwZW5kZW50LCBiaW5kaW5nX2luaXQsIG92bF9jb25zLAoJc2NyYXRjaF9vdmxfY29ucywgb3ZsX21lbWJlciwgYnVpbGRfb3ZlcmxvYWQpOiBEZWNsYXJlLgoJKGRlY2xfbGlzdF9sZW5ndGgsIGdldF9uYW1lc3BhY2VfaWQsIGN1cnJlbnRfbmFtZXNwYWNlX2lkLAoJb3ZlcmxvYWRlZF9nbG9iYWxzX3ApOiBSZW1vdmUuCgkobG9va3VwX3VzaW5nX25hbWVzcGFjZSwgcXVhbGlmaWVkX2xvb2t1cF91c2luZ19uYW1lc3BhY2UpOiBDaGFuZ2UKCXJldHVybiB0eXBlLgoJKHB1c2hfc2NyYXRjaF9vYnN0YWNrKTogTmV3IG1hY3JvLgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBTcGVjaWFsLWNhc2UgdHlwZSBvZiBPVkVSTE9BRCBub2RlLgoJKGJ1aWxkX3VzZXJfY29udmVyc2lvbnNfMSk6IEl0ZXJhdGUgdXNpbmcgT1ZMX05FWFQgZm9yIGN0b3JzLAoJY29udnMsIGZucy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEl0ZXJhdGUgdXNpbmcgT1ZMX0NIQUlOLgoJUHJpbnQgREVDTF9OQU1FIGluIHdoZW4gcmVwb3J0aW5nIGFtYmlndWl0aWVzLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogSXRlcmF0ZSB1c2luZyBPVkxfTkVYVCBmb3IgZm5zLCBjb252cy4KCShidWlsZF9uZXdfb3ApOiBDYWxsIGxvb2t1cF9mdW5jdGlvbl9ub25jbGFzcy4KCUl0ZXJhdGUgdXNpbmcgT1ZMX05FWFQuCgkoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBDaGFuZ2UgZGV0ZWN0aW9uIG9mIG1lbWJlcnMuCglEbyBub3Qgd3JhcCBUUkVFX0xJU1QgYXJvdW5kIGZpZWxkcyBhbmQgc2luZ2xlIGdsb2JhbCBmdW5jdGlvbnMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgcHVzaCBhIGNsYXNzIGxldmVsIGlmIHRoZSBjb250ZXh0IGlzIGEKCW5hbWVzcGFjZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBJdGVyYXRlIHVzaW5nIE9WTF9ORVhULgoJKiBjbGFzcy5jIChhZGRfbWV0aG9kKTogQ2hhaW4gb3ZlcmxvYWRlZCBtZW1iZXJzIHVzaW5nCglidWlsZF9vdmVybG9hZC4gIFJlbW92ZSBjb3B5aW5nIG9mIG1ldGhvZC4KCShncm93X21ldGhvZCk6IFdoZW4gaXRlcmF0aW5nIHRocm91Z2ggdGhlIG9ic3RhY2ssIGV4cGVjdCBPVkVSTE9BRAoJbm9kZXMuICBDaGFpbiBvdmVybG9hZCBtZW1iZXJzLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IENoYWluIG92ZXJsb2FkIG1lbWJlcnMuICBVbnBhY2sgT1ZFUkxPQUQKCW5vZGVzIGluIGNhbGwgdG8gZ2V0X2Jhc2VsaW5rcy4KCShkdXBsaWNhdGVfdGFnX2Vycm9yKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzIHdoZW4gdW5jaGFpbmluZy4KCShmaW5pc2hfc3RydWN0XzEpOiBJdGVyYXRlIG92ZXIgY3RvciB1c2luZyBPVkxfTkVYVC4gIEhhbmRsZQoJZmRlY2xzIHRoYXQgYXJlIE9WRVJMT0FEIG5vZGVzLgoJKHZhbGlkYXRlX2xocyk6IE5ldyBmdW5jdGlvbi4KCShpbnN0YW50aWF0ZV90eXBlKTogRG8gbm90IGNvcHkgT1ZFUkxPQUQgbm9kZXMuICBSZW1vdmUgZGVhZAoJY29kZS4gIFVzZSBERUNMX05BTUUgaW4gZXJyb3IgbWVzc2FnZXMuICBTcGxpdCBjb2RlIGJldHdlZW4gZ2xvYmFsCglhbmQgbWVtYmVyIGZ1bmN0aW9uIHByb2Nlc3NpbmcuCgkqIGRlY2wuYyAoZ2xvYmFsX3R5cGVfbm9kZSk6IE5ldyBzdGF0aWMgdmFyaWFibGUuCgkoaW5fc3RkKTogTmV3IGdsb2JhbC4KCShzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IE5ldyBmaWVsZCB1c2luZ3MuCgkocmVzdW1lX2JpbmRpbmdfbGV2ZWwpOiBBc3NlcnQgdGhhdCB3ZSBhcmUgbm90IGluIGEgY2xhc3MuCgkodG9wbGV2ZWxfYmluZGluZ3NfcCk6IEp1c3QgY2hlY2sgZm9yIG5hbWVzcGFjZV9wIG9yCglwc2V1ZG9fZ2xvYmFsLgoJKHJlc3VtZV9sZXZlbCk6IFJlbW92ZS4KCShmaW5kX2JpbmRpbmcpOiBOZXcgZnVuY3Rpb24uCgkoYmluZGluZ19mb3JfbmFtZSk6IENhbGwgaXQuCgkobmFtZXNwYWNlX2JpbmRpbmcsIHNldF9uYW1lc3BhY2VfYmluZGluZyk6IE5ldyBmdW5jdGlvbnMuCgkocHVzaF9uYW1lc3BhY2UpOiBBc3NvY2lhdGUgYmluZGluZyBsZXZlbCB3aXRoIG5ldyBuYW1lc3BhY2UsCglyZXN1bWVfYmluZGluZ19sZXZlbCBmb3IgZXhpc3RpbmcgbmFtZXNwYWNlLiAgUmVtb3ZlIG9sZCBjb2RlLgoJRmFrZSBzdGQgYnkgY291bnRpbmcuCgkoc3RvcmVfYmluZGluZ3MpOiBVc2UgUkVBTF9JREVOVElGSUVSX1RZUEVfVkFMVUUuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIGN1cnJlbnQgbmFtZXNwYWNlLgoJKHBvcF9mcm9tX3RvcF9sZXZlbCk6IFJlc3RvcmUgc2F2ZWQgbmFtZXNwYWNlLgoJKHBvcF9uYW1lc3BhY2UpOiBDYWxsIHN1c3BlbmRfYmluZGluZ19sZXZlbC4gIFJlbW92ZSBvbGQgY29kZS4KCShjYXRfbmFtZXNwYWNlX2xldmVscyk6IE5ldyBmdW5jdGlvbi4KCShzZXRfaWRlbnRpZmllcl90eXBlX3ZhbHVlX3dpdGhfc2NvcGUpOiBGb3IgbmFtZXNwYWNlIGJpbmRpbmdzLAoJc2V0IEJJTkRJTkdfVFlQRSwgYW5kIHVzZSBnbG9iYWxfdHlwZV9ub2RlLgoJVXNlIFJFQUxfSURFTlRJRklFUl9UWVBFX1ZBTFVFIG90aGVyd2lzZS4KCShpZGVudGlmaWVyX3R5cGVfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkocHVzaHRhZyk6IElmIG5vIGNvbnRleHQsIHVzZSBjdXJyZW50X25hbWVzcGFjZS4KCShkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBwcm9jZXNzIERFQ0xfQ0hBSU4uCgkocHVzaGRlY2wpOiBTZXQgREVDTF9DT05URVhUIHRvIGN1cnJlbnRfbmFtZXNwYWNlLCBpZiBpdCBpcyBub3QKCWFscmVhZHkgc2V0LiAgTmV2ZXIgcmVzZXQgaXQgdG8gTlVMTF9UUkVFLiAgTG9va3VwIGdsb2JhbCB2YXJpYWJsZXMKCWluIHRoZWlyIG5hbWVzcGFjZS4gIFB1c2ggb3ZlcmxvYWRlZCB0ZW1wbGF0ZXMgaWYgdGhleSBhcmUgb24KCW5hbWVzcGFjZSBsZXZlbC4KCShwdXNoZGVjbF9uYW1lc3BhY2VfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkocHVzaGRlY2xfdG9wX2xldmVsKTogSW1wbGVtZW50IHVzaW5nIHB1c2hkZWNsX25hbWVzcGFjZV9sZXZlbC4KCShwdXNoZGVjbF91c2luZ19kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKG92ZXJsb2FkZWRfZ2xvYmFsc19wKTogUmVtb3ZlLgoJKHB1c2hfb3ZlcmxvYWRlZF9kZWNsKTogQ3JlYXRlIE9WRVJMT0FEIG5vZGVzLCBhbmQgaXRlcmF0ZSB0aHJvdWdoCgl0aGVtLiAgVXNlIG5hbWVzcGFjZV9iaW5kaW5nIGFuZCBzZXRfbmFtZXNwYWNlX3ZhbHVlLgoJKHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSk6IENvbXBsYWluIGlmIHRoZSBkZWNsYXJhdGlvbnMgY29tZQoJZnJvbSBkaWZmZXJlbnQgbmFtZXNwYWNlcy4KCShsb29rdXBfdGFnKTogT24gbmFtZXNwYWNlIGxldmVsLCBsb29rIGluIHRoZSBCSU5ESU5HX1RZUEUuCgkobG9va3VwX25hbWVzcGFjZV9uYW1lKTogUGFzcyB0cmVlX2JpbmRpbmdzIGZyb20gc3RhY2suICBSZW1vdmUKCW9sZCBjb2RlLgoJKHNlbGVjdF9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF9uYW1lX3JlYWwpOiBDYWxsIGl0IGZvciBxdWFsaWZpZWQgYW5kIHVucXVhbGlmaWVkIGxvb2t1cC4KCVBhc3MgdHJlZV9iaW5kaW5ncyBmcm9tIHRoZSBzdGFjay4KCUlmIHByZWZlcl90eXBlIGlzIDEsIGFsc28gYWNjZXB0IG5hbWVzcGFjZXMuCgkobG9va3VwX2Z1bmN0aW9uX25vbmNsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHRoZSBiaW5kaW5nIGxldmVsIG9mIHRoZSBnbG9iYWwKCW5hbWVzcGFjZSB0byBnbG9iYWxfYmluZGluZ19sZXZlbC4KCUJ1aWxkIGEgcHJvcGVyIHR5cGUgbGlzdCBmb3IgX19idWlsdGluX2FwcGx5LgoJSW5pdGlhbGl6ZSBzdGRfbm9kZSB0byAiZmFrZSBzdGQiIGlmIGZsYWdfaG9ub3Jfc3RkIGlzIHNldC4KCUluaXRpYWxpemUgZ2xvYmFsX3R5cGVfbm9kZS4KCUFsbG9jYXRlZCBiYWRfYWxsb2MgaW4gbmFtZXNwYWNlIHN0ZCBpZiBmbGFnX2hvbm9yX3N0ZC4KCShkZWZpbmVfZnVuY3Rpb24pOiBTZXQgdGhlIERFQ0xfQ09OVEVYVCB0byB0aGUgY3VycmVudF9uYW1lc3BhY2UuCgkoc3RhcnRfZGVjbCk6IEEgbmFtZXNwYWNlIGlzIG5vdCBjb25zaWRlcmVkIGFzIGEgY29udGV4dCBoZXJlLiAgSWYKCXRoZSBERUNMX0NPTlRFWFQgaXMgYSBuYW1lc3BhY2UsIHB1c2ggdGhlIGRlY2wuCgkoY3BfZmluaXNoX2RlY2wpOiBDaGVjayBmb3IgbmFtZXNwYWNlcyB1c2VkIGFzIGluaXRpYWxpemVycy4KCShncm9rZm5kZWNsKTogQWRkIG5hbWVzcGFjZSBwYXJhbWV0ZXIuICBSZW1vdmUgcHJvY2Vzc2luZyBvZgoJREVDTF9DSEFJTi4KCShncm9rdmFyZGVjbCk6IEFkZCBuYW1lc3BhY2UgcGFyYW1ldGVyLgoJKGdyb2tkZWNsYXJhdG9yKTogUHJvY2VzcyBTQ09QRXMgdGhhdCBhcmUgbmFtZXNwYWNlcy4gIEZvcgoJbWFuZ2xpbmcsIHRlbXBvcmFyaWx5IHNldCB0aGUgREVDTF9DT05URVhUIG9uIGFub255bW91cyBzdHJ1Y3RzLgoJKHN0YXJ0X2Z1bmN0aW9uKTogQ2hlY2sgZm9yIGNvbnRleHRzIHRoYXQgYXJlIG5hbWVzcGFjZXMuCglTZXQgY29udGV4dCBmb3IgZGVjbGFyYXRpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBwdXNoZWQuCgkoc3RvcmVfcGFybV9kZWNscyk6IENoZWNrIGZvciA6Om1haW4gb25seS4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShzdGFydF9tZXRob2QpOiBDaGVjayBmb3IgY29udGV4dHMgdGhhdCBhcmUgbmFtZXNwYWNlcy4KCShzdGFydF9tZXRob2QpOiBSZW1vdmUgREVDTF9DSEFJTiBwcm9jZXNzaW5nLgoJKiBkZWNsMi5jIChmbGFnX2hvbm9yX3N0ZCk6IERlY2xhcmUuCgkobGFuZ19kZWNvZGVfb3B0aW9uKTogU2V0IGl0IGlmIC1maG9ub3Itc3RkIG9yIC1mbmV3LWFiaSBpcyBnaXZlbi4KCShkZWNsX25hbWVzcGFjZV9saXN0KTogTmV3IHN0YXRpYyBnbG9iYWwuCgkoZ3Jva194X2NvbXBvbmVudHMpOiBJZ25vcmUgbmFtZXNwYWNlcyBhcyB0eXBlIGNvbnRleHRzLgoJKGNoZWNrX2NsYXNzZm4pOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkoZ3Jva2ZpZWxkKTogUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCShmaW5pc2hfZmlsZSk6IENhbGwgY2F0X25hbWVzcGFjZV9sZXZlbHMuCgkobWVyZ2VfZnVuY3Rpb25zKTogTmV3IGZ1bmN0aW9uLgoJKGFtYmlndW91c19kZWNsKTogUmV3cml0ZS4KCShsb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogUHJvZHVjZSB0cmVlX2JpbmRpbmdzLgoJKHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogTGlrZXdpc2UuCgkoc2V0X2RlY2xfbmFtZXNwYWNlLCBkZWNsX25hbWVzcGFjZSwgY3VycmVudF9kZWNsX25hbWVzcGFjZSwKCXB1c2hfZGVjbF9uYW1lc3BhY2UsIHBvcF9kZWNsX25hbWVzcGFjZSk6IE5ldyBmdW5jdGlvbnMuCgkoYXJnX2xvb2t1cCk6IE5ldyBzdHJ1Y3QuCgkoYWRkX2Z1bmN0aW9uLCBhcmdfYXNzb2NfbmFtZXNwYWNlLCBhcmdfYXNzb2NfY2xhc3MsCglhcmdfYXNzb2NfdHlwZSwgYXJnX2Fzc29jX2FyZ3MsIGFyZ19hc3NvYywgbG9va3VwX2FyZ19kZXBlbmRlbnQpOgoJTmV3IGZ1bmN0aW9ucy4KCShnZXRfbmFtZXNwYWNlX2lkLCBjdXJyZW50X25hbWVzcGFjZV9pZCk6IFJlbW92ZS4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogUmV3cml0ZS4KCShkb19jbGFzc191c2luZ19kZWNsKTogQ29tcGxhaW4gYWJvdXQgbmFtZXNwYWNlIHF1YWxpZmllcnMuCgkoZG9fdXNpbmdfZGlyZWN0aXZlKTogU29ycnkgaWYgbm90IG9uIG5hbWVzcGFjZSBsZXZlbC4gIENvbXBsYWluCglhYm91dCB1bmtub3duIG5hbWVzcGFjZXMuCgkqIGVycm9yLmMgKGR1bXBfYWdncl90eXBlKTogQ2hlY2sgZm9yIG5hbWVzcGFjZSBjb250ZXh0cy4KCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBQdXNoIHRlcm1pbmF0ZSBpbnRvIHN0ZC4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEEgbmFtZXNwYWNlIGlzIG5vdCBhIGNvbnRleHQsIGhlcmUuCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogUmVtb3ZlIERFQ0xfQ0hBSU4gcHJvY2Vzc2luZy4KCShidWlsZF9vZmZzZXRfcmVmKTogUHJvY2VzcyBPVkVSTE9BRCBub2Rlcy4KCSogbGFuZy1zcGVjcy5oIChfX0hPTk9SX1NURCk6IERlZmluZSBpZiAtZm5ldy1hYmkgb3IgLWZob25vci1zdGQuCgkqIGxleC5jIChpZGVudGlmaWVyX3R5cGUpOiBMb29wIHVzaW5nIE9WTF9DSEFJTi4KCShzZWVfdHlwZW5hbWUpOiBTZXQgbG9va2luZ19mb3JfdHlwZW5hbWUgdG8gMi4KCShyZWFsX3l5bGV4KTogTGlrZXdpc2UuCgkoZG9faWRlbnRpZmllcik6IEV4cGVjdCBPVkVSTE9BRCBub2RlcyBpbnN0ZWFkIG9mIFRSRUVfTElTVHMuCgkoZG9fc2NvcGVkX2lkKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJQ2hhbmdlIGNhbGxpbmcgY29udmVudGlvbiBmb3IgcXVhbGlmaWVkX2xvb2t1cF91c2luZ19uYW1lc3BhY2UuCgkoYnVpbGRfbGFuZ19kZWNsKTogRG9uJ3Qgc2V0IGluX25hbWVzcGFjZSBhbnltb3JlLgoJKiBtZXRob2QuYyAodHlwZXZlY19zaXplKTogTmV3IGdsb2JhbC4KCShidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFJldHVybiBpZiBnbG9iYWxfbmFtZXNwYWNlLgoJT3RoZXJ3aXNlLCBhbHdheXMgZXhwZWN0IGEgZGVjbGFyYXRpb24gY29udGV4dC4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IExpa2V3aXNlLgoJTWFrZSBzdXJlIHdlIGRvbid0IHdyaXRlIGJleW9uZCB0eXBldmVjX3NpemUuCgkoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogTGlrZXdpc2UuCglBbGxvY2F0ZSBvbmUgZXh0cmEgc2xvdCBmb3IgdGhlIG5hbWVzcGFjZS4KCShoYWNrX2lkZW50aWZpZXIpOiBNYXJrIGNvZGUgZGVhZC4KCVByb2Nlc3MgT1ZFUkxPQUQgYW5kIE5BTUVTUEFDRV9ERUNMIG5vZGVzLgoJKiBwYXJzZS55IChwcm9ncmFtKTogUG9wIG5hbWVzcGFjZXMgdW50aWwgaW4gZ2xvYmFsIG5hbWVzcGFjZS4KCShleHRkZWYpOiBJbiBhIHVzaW5nLWRlY2xhcmF0aW9uLCBkb24ndCBkaXNjYXJkIHRoZSBpZGVudGlmaWVyIGlmCgl0aGVyZSBpcyBubyBkZWNsYXJhdGlvbi4KCShsZWZ0X2N1cmx5KTogSWdub3JlIHR5cGUgY29udGV4dHMgd2hpY2ggYXJlIG5hbWVzcGFjZXMuCgkodHlwZW5hbWVfc3ViMik6IFVzZSBJREVOVElGSUVSX1RZUEVfVkFMVUUgdG8gcmV0cmlldmUgdGhlIHR5cGUKCXVzZWQgYXMgc2NvcGUuCgkqIHB0LmMgKHRlbXBsYXRlX2NsYXNzX2RlcHRoKTogRXhwZWN0IHR5cGVzIHRvIGJlIG5hbWVzcGFjZXMuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogU2ltcGxpZnkgYnkgZXhwZWN0aW5nIE9WRVJMT0FEIG5vZGVzLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFB1c2ggaW50byBuYW1lc3BhY2UgbGV2ZWwuCglSZXNldCBjdHggaWYgaXQgaXMgYSBuYW1lc3BhY2UuCglTZXQgREVDTF9DT05URVhUIHRvIGN1cnJlbnRfbmFtZXNwYWNlIGlmIG5vdCBzZXQgYWxyZWFkeS4KCUlnbm9yZSByZWFsIGNvbnRleHRzIHRoYXQgYXJlIG5hbWVzcGFjZXMuCgkobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogU2tpcCBnbG9iYWxfbmFtZXNwYWNlLgoJTWFuZ2xlIG90aGVyIG5hbWVzcGFjZXMgYXMgZGVjbGFyYXRpb25zLgoJKGxvb2t1cF90ZW1wbGF0ZV9mdW5jdGlvbik6IFNldCB0eXBlIG9mIE9WRVJMT0FEIG5vZGVzIHRvIHVua25vd24uCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogUHVzaCBpbnRvIG5hbWVzcGFjZSBvZiBjb250ZXh0LgoJSWYgdGhlIGNvbnRleHQgaXMgYSBuYW1lc3BhY2UsIHNldCBpdCB0byBnbG9iYWxfbmFtZXNwYWNlLgoJVXNlIGlkX2NvbnRleHQgZm9yIG1hbmdsaW5nLgoJKGZvcl9lYWNoX3RlbXBsYXRlX3Bhcm0pOiBIYW5kbGUgT1ZFUkxPQUQgYW5kIE5BTUVTUEFDRV9ERUNMIG5vZGVzLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBJZ25vcmUgbmFtZXNwYWNlIGNvbnRleHRzLgoJUHVzaCBpbnRvIG5hbWVzcGFjZSBsZXZlbC4KCSh0c3Vic3QpOiBIYW5kbGUgTkFNRVNQQUNFX0RFQ0wgbm9kZXMuCglSZW1vdmUgREVDTF9DSEFJTiBwcm9jZXNzaW5nLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IFJlY29nbml6ZSBPVkVSTE9BRCBpbnN0ZWFkIG9mIFRSRUVfTElTVCBub2Rlcy4KCSogcHRyZWUuYyAocHJpbnRfbGFuZ19pZGVudGlmaWVyKTogUHJpbnQgYmluZGluZ3MuCgkobGFuZ19wcmludF94bm9kZSk6IFByaW50IE9WRVJMT0FEIG5vZGVzLgoJKiBydHRpLmMgKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogUHVzaCB0eXBlX2luZm8gaW50byBzdGQuCgkqIHNlYXJjaC5jIChsb29rdXBfZm5maWVsZHNfaGVyZSk6IEV4cGVjdCBPVkVSTE9BRCBub2Rlcy4KCShsb29rdXBfZm5maWVsZHNfMSwgZ2V0X3ZpcnR1YWxzX25hbWVkX3RoaXMsIGdldF9tYXRjaGluZ192aXJ0dWFsLAoJZGZzX2RlYnVnX21hcmssIGRmc19wdXNoZGVjbHMsIGRmc19jb21wcmVzc19kZWNscywgYWRkX2NvbnZlcnNpb25zLAoJbG9va3VwX2ZuZmllbGRzX2hlcmUpOiBMaWtld2lzZS4KCVByb2Nlc3MgYWxsIG5vZGVzLCBpbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggVFJFRV9DSEFJTi4KCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX29yX3JlZmVyZW5jZV90eXBlKTogU2V0IGNvbnRleHQKCXRvIGdsb2JhbF9uYW1lc3BhY2UuCgkoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKiBzcGV3LmMgKHl5bGV4KTogU2F2ZSBvbGQgc2V0dGluZyBvZiBsb29raW5nX2Zvcl90eXBlbmFtZS4KCSogdHJlZS5jIChkZWNsX2xpc3RfbGVuZ3RoKTogUmVtb3ZlLgoJKGJpbmRpbmdfaW5pdCk6IE5ldyBmdW5jdGlvbi4KCShjb3VudF9mdW5jdGlvbnMpOiBSZXdyaXRlLgoJKGlzX292ZXJsb2FkZWRfZm4pOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkocmVhbGx5X292ZXJsb2FkZWRfZm4sIGdldF9maXJzdF9mbiwgbHZhbHVlX3R5cGUpOiBMaWtld2lzZS4KCShvdmxfY29ucywgc2NyYXRjaF9vdmxfY29ucywgYnVpbGRfb3ZlcmxvYWQsIGJ1aWxkX292ZXJsb2FkX2FmdGVyLAoJb3ZsX21lbWJlcik6IE5ldyBmdW5jdGlvbnMuCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBFeHBlY3QgT1ZFUkxPQUQgbm9kZXMuCgkodHlwZV91bmtub3duX3ApOiBMaWtld2lzZS4KCShyZXF1aXJlX2luc3RhbnRpYXRlZF90eXBlKTogTGlrZXdpc2UuCgkoYnVpbGRfY29tcG9uZW50X3JlZik6IERlY2xhcmUgY29kZSBkZWFkLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IENyZWF0ZSBhbmQgZXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IENoZWNrIGZvciA6Om1haW4gb25seS4KCShidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLiAgRXhwZWN0IE9WRVJMT0FEIG5vZGVzLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBDaGVjayBmb3IgVFJFRV9MSVNUIGJlZm9yZSBhY2Nlc3NpbmcKCVRSRUVfVkFMVUUuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogQ2hlY2sgZm9yIG5hbWVzcGFjZSBiaW5kaW5ncyBpbnN0ZWFkCglvZiBnbG9iYWwgYmluZGluZ3MuCgkocHVzaGRlY2wsIHB1c2hfb3ZlcmxvYWRlZF9kZWNsLCBsb29rdXBfdGFnLCBsb29rdXBfbmFtZV9yZWFsLAoJbG9va3VwX25hbWVfY3VycmVudF9sZXZlbCwgc3RhcnRfZGVjbCwgeHJlZl90YWcsCglmaW5pc2hfZW51bSk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGRmc19kZWJ1Z19tYXJrKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBVc2UgU0VUX0lERU5USUZJRVJfVFlQRV9WQUxVRS4KCShwb3BsZXZlbF9jbGFzcywgcG9wX2Zyb21fdG9wX2xldmVsKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9tZXRob2QpOiBMaWtld2lzZS4KCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlKTogVXNlIFNFVF9JREVOVElGSUVSX0dMT0JBTF9WQUxVRS4KCSogZGVjbC5jIChyZWNvcmRfYnVpbHRpbl90eXBlKTogTGlrZXdpc2UuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcsIGdyb2tmbmRlY2wpOiBMaWtld2lzZS4KCSogbGV4LmMgKGdldF90aW1lX2lkZW50aWZpZXIsIGRvX2lkZW50aWZpZXIsIGRvX3Njb3BlZF9pZCk6IExpa2V3aXNlLgoJKG1ha2VfbGFuZ190eXBlKTogTGlrZXdpc2UuCgkqIHBhcnNlLnkgKG1ha2VfdGh1bmspOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0KTogTGlrZXdpc2UuCgkqIHRyZWUuYyAoZGVidWdfYmluZm8pOiBMaWtld2lzZS4KCSogZXhjZXB0aW9uLmNjLCBuZXcuY2MsIG5ldzEuY2MsIG5ldzIuY2MsIHRpbmZvLmNjLCB0aW5mby5oLAoJdGluZm8yLmNjLCBpbmMvbmV3Lmg6IEFkZCBzdGQgcXVhbGlmaWNhdGlvbnMuCgkqIGluYy9uZXc6IFdyYXAgd2l0aCBuYW1lc3BhY2Ugc3RkIGlmIF9fSE9OT1JfU1RELgoJKiBpbmMvdHlwZWluZm86IExpa2V3aXNlLgoKRnJpIE1heSAgOCAwMDo0Mzo1MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgc2Vjb25kX2NvbnYKCXByb3Blcmx5IGZvciB0ZW1wbGF0ZXMuCgpUaHUgTWF5ICA3IDE3OjA5OjI1IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBTZXQgVFJFRV9VU0VEIGZsYWcgdG8KCXplcm8gZm9yIGJ1aWxkX3R5cGVfdmFyaWFudHMgbm9kZXMgYXMgd2VsbC4KCldlZCBNYXkgIDYgMTk6Mjc6MDkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRG9uJ3QgdHN1YnN0IHRoZSB0eXBlIG9mIGFuIElERU5USUZJRVJfTk9ERS4KCldlZCBNYXkgIDYgMTY6NDk6NDggMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNhbGwubywgY2xhc3MubywgZGVjbC5vLCBkZWNsMi5vLCBlcnJmbi5vLCBlcnJvci5vLAoJZXhjZXB0Lm8sIGV4cHIubywgZnJpZW5kLm8sIGluaXQubywgbGV4Lm8sIG1ldGhvZC5vLCBwdC5vLCByZXBvLm8sCglydHRpLm8sIHNlYXJjaC5vLCBzZW1hbnRpY3Mubywgc2lnLm8sIHRyZWUubywgdHlwZWNrLm8sIHR5cGVjazIubywKCXhyZWYubyk6IEFkZCB0b3BsZXYuaCBkZXBlbmRlbmNpZXMuCgpXZWQgTWF5ICA2IDE2OjQ0OjU4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGVycmZuLmMgKGNwX2Vycm9yLCBjcF93YXJuaW5nKTogUmVtb3ZlIGRlY2xhcmF0aW9ucyBmb3IKCWVycm9yIGFuZCB3YXJuaW5nIHJlc3BlY3RpdmVseS4KCldlZCBNYXkgIDYgMTQ6Mjg6MTggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZXJyb3IuYzogQ29udmVydCB0byB1c2luZyBjdHlwZSBtYWNyb3MgZGVmaW5lZCBpbiBzeXN0ZW0uaC4KCSogbWV0aG9kLmM6IExpa2V3aXNlLgoJKiB4cmVmLmM6IExpa2V3aXNlLgoJKiBsZXguYzogTGlrZXdpc2UuICBBbHNvIHJlbW92ZSByZWR1bmRhbnQgc3lzdGVtIGhlYWRlciBzdHVmZi4KCldlZCBNYXkgIDYgMDY6MzY6NDEgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY2FsbC5jLCBjbGFzcy5jLCBkZWNsLmMsIGRlY2wyLmMsIGVycmZuLmMsIGVycm9yLmMsIGV4Y2VwdC5jLAoJZXhwci5jLCBmcmllbmQuYywgaW5pdC5jLCBsZXguYywgbWV0aG9kLmMsIHB0LmMsIHJlcG8uYywgcnR0aS5jLAoJc2VhcmNoLmMsIHNlbWFudGljcy5jLCBzaWcuYywgdHJlZS5jLCB0eXBlY2suYywgdHlwZWNrMi5jLAoJeHJlZi5jOiBBZGQgaW5jbHVkZSBvZiB0b3BsZXYuaC4KCldlZCBNYXkgIDYgMDI6MzM6MzkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChwZXJtX21hbmlwKTogQWxzbyByZWdlbmVyYXRlIHRoZSBSVEwgb2YgYW4gZXh0ZXJuLgoJKGNvcHlfdG9fcGVybWFuZW50KTogVXNlIGVuZF90ZW1wb3JhcnlfYWxsb2NhdGlvbi4KClR1ZSBNYXkgIDUgMjM6NTQ6MDQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgZWFjaCBhcnJheQoJZWxlbWVudCBpcyBhIGZ1bGwtZXhwcmVzc2lvbi4KClR1ZSBNYXkgIDUgMTg6MjQ6MTMgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX21hbmdsZWRfbmFtZSk6IEFkZCBhIGNhbGwgdG8gYnVpbGRfdHlwZV92YXJpYW50Cgl0byBnZXQgdGhlIHJpZ2h0IHR5cGUuCgpUdWUgTWF5ICA1IDAxOjI1OjAzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgLlNVRkZJWEVTLgoKCSogY3AtdHJlZS5kZWY6IFJlbW92ZSBOQU1FU1BBQ0VfREVDTC4KClN1biBNYXkgIDMgMDE6MzI6MTQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBEbyBldmFsdWF0ZSBhcmcgZXZlbiBpZiBpdCBoYXMgZW1wdHkKCWNsYXNzIHR5cGUuCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBwdXNoIGEgbWVtYmVyIGZ1bmN0aW9uLgoKVGh1IEFwciAzMCAxODo1OToyMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoZysrRkFRLmluZm8pOiBQdXQgLW8gb3B0aW9uIGJlZm9yZSBpbnB1dCBmaWxlLgoKVGh1IEFwciAzMCAxMzowNTozMyAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBneHhpbnQudGV4aTogQWRkIGluZm8gZm9yIHNxdWFuZ2xpbmcgY29kZXMgSyBhbmQgQi4KClR1ZSBBcHIgMjggMTM6MjI6MDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogc2VtYW50aWNzLmMgKGJlZ2luX3N0bXRfZXhwcik6IEF2b2lkIGR1cGxpY2F0aW5nIHRoZSBlZmZlY3Qgb2YKCXRoZSBleHByZXNzaW9uIGluIHRlbXBsYXRlcy4KCShmaW5pc2hfc3RtdF9leHByKTogTGlrZXdpc2UuCgoxOTk4LTA0LTI4ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbDIuYyAoYW1iaWd1b3VzX2RlY2wpOiBGaXggTkFNRSBwYXJtIHRvIGJlIGEgdHJlZSwgbm90IGludC4KCk1vbiBBcHIgMjcgMTM6NTg6MTAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChtYXliZV9wdXNoX3RvX3RvcF9sZXZlbCk6IEFsd2F5cyBjbGVhcgoJY3VycmVudF90ZW1wbGF0ZV9wYXJtcyBhbmQgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLgoJKHB1c2h0YWcpOiBSZW1vdmUgY2hlY2sgb2YgY3VycmVudF9jbGFzc190eXBlIGFuZCBzb21lIGNvbW1lbnRzLAoJc2luY2UgbWF5YmVfcHVzaF90b190b3BfbGV2ZWwgbm8gbG9uZ2VyIGNyZWF0ZXMgY29uZnVzaW9uLgoKU3VuIEFwciAyNiAxMjoxMDoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9JU19URU1QTEFURSk6IE5ldyBtYWNyby4KCShERUNMX0NMQVNTX1RFTVBMQVRFX1ApOiBMaWtld2lzZS4KCShERUNMX1BSSU1BUllfVEVNUExBVEUpOiBMaWtld2lzZS4KCShQUklNQVJZX1RFTVBMQVRFX1ApOiBVc2UgaXQuCgkocHVzaF90ZW1wbGF0ZV9kZWNsX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogVGFrZSBuZXcgdGVtcGxhdGUgcGFyYW1ldGVycyBhcwoJaW5wdXQuCgkoaXNfc3BlY2lhbGl6YXRpb25fb2YpOiBOZXcgZnVuY3Rpb24uCgkoY29tcF90ZW1wbGF0ZV9hcmdzKTogRGVjbGFyZS4KCSogZGVjbC5jIChwdXNodGFnKTogSGFuZGxlIGZyaWVuZCB0ZW1wbGF0ZSBjbGFzc2VzLgoJKHhyZWZfdGFnKTogTGlrZXdpc2UuICBVc2UgbmV3IGNhbGxpbmcgY29udmVudGlvbiBmb3IKCXJlZGVjbGFyZV9jbGFzc190ZW1wbGF0ZS4KCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBIYW5kbGUgZnJpZW5kIHRlbXBsYXRlcy4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IFVzZSBpc19zcGVjaWFsaXphdGlvbl9vZiB3aGVyZQoJYXBwcm9wcmlhdGUuICBEZWFsIHdpdGggZnJpZW5kIGNsYXNzIHRlbXBsYXRlcy4KCShtYWtlX2ZyaWVuZF9jbGFzcyk6IExldCBhIGNsYXNzIHRlbXBsYXRlIGJlIGZyaWVuZHMgd2l0aCBpdHNlbGYuCgkqIHB0LmMgKGNvbXBfdGVtcGxhdGVfYXJncyk6IFJlbW92ZSBkZWNsYXJhdGlvbi4KCSh0c3Vic3RfZnJpZW5kX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfdGVtcGxhdGVfZGVjbF9yZWFsKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFVzZSBpdC4KCShyZWRlY2xhcmVfY2xhc3NfdGVtcGxhdGUpOiBBZGp1c3QgZm9yIG5ldyBjYWxsaW5nIGNvbnZlbnRpb24uCgkoY29tcF90ZW1wbGF0ZV9hcmdzKTogR2l2ZSBpdCBleHRlcm5hbCBsaW5rYWdlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3R5cGUpOiBVc2UgdHN1YnN0X2ZyaWVuZF9jbGFzcyB0byBkZWFsCgl3aXRoIGZyaWVuZCB0ZW1wbGF0ZXMuCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBVc2UgY29tcF90ZW1wbGF0ZV9hcmdzLCByYXRoZXIgdGhhbgoJZXhwYW5kaW5nIGl0IGlubGluZS4KCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2wpOiBIYW5kbGUgYSBuZXN0ZWQgdGVtcGxhdGUgdHlwZQoJbGlrZSBvdGhlciBjb21wb25lbnQgdHlwZSBkZWNsYXJhdGlvbnMuCgoJKiBwdC5jIChjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEhhbmRsZSBvdmVybG9hZGVkCgljb25zdHJ1Y3RvcnMgY29ycmVjdGx5LgoKCSogcHQuYyAobWFieWJlX2dldF90ZW1wbGF0ZV9kZWNsX2Zyb21fdHlwZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFVzZSBpdC4KClRodSBBcHIgMjMgMjE6MTk6MDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBXUkFQUEVSLiAgVVNFUl9DT05WIG5vdyBvbmx5IGhhcyB0d28gb3BzLgoJKiBjcC10cmVlLmg6IEFkZCBXUkFQUEVSIHN1cHBvcnQuCgkqIGNhbGwuYyAoYWRkX2NhbmRpZGF0ZSk6IFNwbGl0IG91dCBmcm9tIGFkZF8qX2NhbmRpZGF0ZSBmbnMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogVGFrZSB0aGUgY2FuZGlkYXRlIGluc3RlYWQgb2YgZnVuY3Rpb24gYW5kIGFyZ3MuCglFbmZvcmNlIGFjY2VzcyBjb250cm9sIGhlcmUuICBFbWl0IG92ZXJsb2FkIHdhcm5pbmdzIGhlcmUuCgkoYWRkX3dhcm5pbmcpOiBOZXcgZm4uCgkoam91c3QpOiBBZGQgV0FSTiBwYXJtLiAgSWYgbm90IHNldCwgY2FsbCBhZGRfd2FybmluZyBpbnN0ZWFkIG9mCglwcmludGluZyBhIHdhcm5pbmcuICBSZS1lbmFibGUgc29tZSB3YXJuaW5ncy4KCSh0b3VybmV5KTogUGFzcyBpdC4KCShjb252ZXJ0X2xpa2UpOiBBZGp1c3QuCgkoYnVpbGRfbmV3X29wKTogQWRqdXN0LgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogQWRqdXN0LgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBBZGp1c3QuCgkoVVNFUl9DT05WX0ZOKTogQWRqdXN0LgoJKiB0cmVlLmMgKGJ1aWxkX2V4cHJfd3JhcHBlciwgYnVpbGRfZXhwcl9wdHJfd3JhcHBlciwKCWJ1aWxkX2ludF93cmFwcGVyKTogTmV3IGZucy4KClRodSBBcHIgMjMgMTg6Mjc6NTMgMTk5OCAgTWFyayBQLiBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodW5pZnkpOiBGaXggdHlwbyBpbiBwcmV2aW91cyBjaGFuZ2UuCgpUaHUgQXByIDIzIDA5OjMyOjU4IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZV9yZWFsKTogRGVjbGFyZSBjYW5vbmljYWxfbmFtZS4KCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IEZpeCBQTUZzLgoKV2VkIEFwciAyMiAxMzoyNDo0OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogU2V0IFRSRUVfUFJJVkFURSBhbmQgVFJFRV9QUk9URUNURUQgZm9yCgl0aGUgREVDTF9SRVNVTFRzIG9mIGEgbWVtYmVyIFRFTVBMQVRFX0RFQ0wsIG5vdCBqdXN0IHRoZQoJVEVNUExBVEVfREVDTC4KCgkqIHB0LmMgKHRzdWJzdCk6IERlY3JlYXNlIHRoZSB0ZW1wbGF0ZS1sZXZlbCBvZgoJVEVNUExBVEVfVEVNUExBVEVfUEFSTVMuICBMaWtld2lzZSBmb3IgdGhlIERFQ0xfSU5JVElBTCBvZiBhCglURU1QTEFURV9QQVJNX0lOREVYLgoJKHRlbXBsYXRlX2RlY2xfbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkodW5pZnkpOiBNYWtlIHN1cmUgdG8gcmVjb3JkIHVuaWZpY2F0aW9ucyBmb3IgdGVtcGxhdGUKCXBhcmFtZXRlcnMsIGV2ZW4gd2hlbiB0aGUgcGFyYW1ldGVycyBleGFjdGx5IG1hdGNoIHRoZSBhcmd1bWVudHMuCglDb21iaW5lIGR1cGxpY2F0ZWQgY29kZSBmb3IgVEVNUExBVEVfVEVNUExBVEVfUEFSTXMgYW5kCglURU1QTEFURV9UWVBFX1BBUk1TLiAgRG9uJ3QgdHJ5IHRvIHVuaWZ5IHRlbXBsYXRlIHBhcmFtZXRlcnMgdGhhdAoJYXJlbid0IGZyb20gdGhlIGxldmVsIHdlJ3JlIGN1cnJlbnRseSB3b3JraW5nIG9uLgoKVHVlIEFwciAyMSAyMjowMDowNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBlcnJmbi5jIChjcF90aGluZyk6IFVzZSB4cmVhbGxvYywgbm90IHhtYWxsb2MsIHRvIGNvcHkgbWVtb3J5LgoKCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogU2V0IERFQ0xfSUdOT1JFRCBmb3IgbWVtYmVyCgljbGFzcyB0ZW1wbGF0ZXMsIHRvby4KCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IFJlbWFuZ2xlIHRoZSBuYW1lIG9mIGEgbWVtYmVyIFRZUEVfREVDTC4KClR1ZSBBcHIgMjEgMTg6NTk6MTEgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekByaGluby5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbmx5IGNoZWNrIERFQ0xfRlJJRU5EX1AgaWYgZnVuY3Rpb24uCgpUdWUgQXByIDIxIDE0OjIyOjAwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNwLXRyZWUuaCAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGludFRJX3R5cGVfbm9kZSwgdW5zaWduZWRfaW50VElfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSGFuZGxlIFRJIHR5cGVzLgoJKiB0eXBlY2suYyAodW5zaWduZWRfdHlwZSwgc2lnbmVkX3R5cGUpOiBIYW5kbGUgVEkgdHlwZXMuCgpTYXQgQXByIDE4IDE1OjI1OjIxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGcrK3NwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBOZXcgYXJndW1lbnQgaW5fYWRkZWRfbGlicmFyaWVzLgoJTmV3IGxvY2FsIGFkZGVkX2xpYnJhcmllcy4gIEluY3JlbWVudCBjb3VudCB3aGVuIGFkZCBsaWJyYXJ5IHRvCglhcmdsaXN0LgoKRnJpIEFwciAxNyAyMToyNTowMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjcC10cmVlLmggKHR5cGVfYXNfc3RyaW5nX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkqIHB0LmMgKG1hbmdsZV9jbGFzc19uYW1lX2Zvcl90ZW1wbGF0ZSk6IFVzZSBpdC4KCSogZXJyb3IuYyAoZHVtcF9hZ2dyX3R5cGUpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKGR1bXBfdHlwZV9wcmVmaXgpOiBMaWtld2lzZS4KCShkdW1wX3R5cGVfc3VmZml4KTogTGlrZXdpc2UuCgkoZHVtcF90eXBlX3JlYWwpOiBDb252ZXJ0IGZyb20gZHVtcF90eXBlLiAgSWYgZGVzaXJlZCwgdGhlCgkiY2Fub25pY2EiIG5hbWUgb2YgYSB0eXBlZGVmLCBpLmUuLCB0aGUgbmFtZSBvZiB0aGUgdW5kZXJseWluZwoJdHlwZSwgY2FuIGJlIHByaW50ZWQuCgkoZHVtcF90eXBlKTogQ2FsbCBkdW1wX3R5cGVfcmVhbC4KCkZyaSBBcHIgMTcgMTQ6MzA6NDUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogLWZuZXctYWJpIGltcGxpZXMgLWZ2dGFibGUtdGh1bmtzLgoKCSogdHlwZWNrLmMgKGNvbXBfdGFyZ2V0X3R5cGVzKTogVHdlYWsgcGVkYW50aWMgY2FzZS4KCShjb21wX3RhcmdldF9wYXJtcyk6IFR3ZWFrIHBlZGFudGljIGNhc2UuICBDbGVhbiB1cCBzb21ld2hhdC4KCVJldHVybiAtMSBvciAxIGluc3RlYWQgb2YgMSBvciAyLgoJKGNvbXBwYXJtcyk6IFJlbW92ZSBTVFJJQ1QgaGFuZGxpbmcuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEZpeCBoYW5kbGluZyBvZiBwbWZzLgoKRnJpIEFwciAxNyAxNDowNDoxNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0eXBlY2suYyAoY29tcF90YXJnZXRfdHlwZXMpOiBIYW5kbGUgcmVmZXJlbmNlcyBsaWtlIHBvaW50ZXJzLgoJKGNvbXBfdGFyZ2V0X3Bhcm1zKTogTm90ZSB0aGF0IHJldHVybiBjb2RlIGZyb20gY29tcF90YXJnZXRfdHlwZXMKCWNhbiBiZSBuZWdhdGl2ZSB0byBpbmRpY2F0ZSBmYWlsdXJlLgoKRnJpIEFwciAxNyAwOToxMDo1MiAxOTk4ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmFsbC5idWlsZCk6IERvbid0IGRlcGVuZCBvbiAkKERFTUFOR0xFUl9QUk9HKSwKCXdoaWNoIHJlcXVpcmVzIGEgd29ya2luZyB0YXJnZXQgY29tcGlsZXIgdG8gYnVpbGQuCgpGcmkgQXByIDE3IDA4OjU3OjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRyZWUuYyAoYXZvaWRfb3ZlcmxhcCk6IEFkZCBwcm90b3R5cGUuCgoJKiBzcGV3LmMgKG51bV90b2tlbnMpOiBBZGQgcHJvdG90eXBlLgoJKG50aF9ub2tlbiwgYWRkX3Rva2VuLCBjb25zdW1lX3Rva2VuLCBkZWJ1Z195eWNoYXIpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChkZnNfY2hlY2tfb3ZlcmxhcCk6IEFkZCBwcm90b3R5cGUuCgkoZGZzX25vX292ZXJsYXBfeWV0KTogTGlrZXdpc2UuCgoJKiBwdC5jIChvcmlnaW5hbF90ZW1wbGF0ZSk6IEFkZCBwcm90b3R5cGUuCgkoaW5saW5lX25lZWRzX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkocHVzaF9pbmxpbmVfdGVtcGxhdGVfcGFybXNfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkocmV0cmlldmVfc3BlY2lhbGl6YXRpb24sIHJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocHJpbnRfY2FuZGlkYXRlcywgcmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwpOiBMaWtld2lzZS4KCShidWlsZF90ZW1wbGF0ZV9kZWNsLCBtYXJrX3RlbXBsYXRlX3Bhcm0pOiBMaWtld2lzZS4KCSh0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uLCBnZXRfYmluZGluZ3NfcmVhbCk6IExpa2V3aXNlLgoKCSogbWV0aG9kLmMgKHN0YXJ0X3NxdWFuZ2xpbmcpOiBBZGQgcHJvdG90eXBlLgoJKGVuZF9zcXVhbmdsaW5nLCBjaGVja19rdHlwZSwgaXNzdWVfa3R5cGUpOiBMaWtld2lzZS4KCShidWlsZF9vdmVybG9hZGVkX3Njb3BlX3JlZiwgY2hlY2tfYnR5cGUpOiBMaWtld2lzZS4KCShidWlsZF9tYW5nbGVkX3RlbXBsYXRlX3Bhcm1faW5kZXgpOiBMaWtld2lzZS4KCgkqIGxleC5jIChpbml0X2NwcF9wYXJzZSk6IEFkZCBwcm90b3R5cGUuCgkoaGFuZGxlX2NwX3ByYWdtYSwgaGFuZGxlX3N5c3ZfcHJhZ21hKTogTGlrZXdpc2UuCgkocmVkdWNlX2NtcCwgdG9rZW5fY21wKTogTGlrZXdpc2UuCgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogQWRkIHByb3RvdHlwZS4KCShwdXNoX2VoX2luZm8sIGdldF9laF9pbmZvLCBnZXRfZWhfdmFsdWUsIGdldF9laF90eXBlKTogTGlrZXdpc2UuCgkoZ2V0X2VoX2NhdWdodCwgZ2V0X2VoX2hhbmRsZXJzLCBkb19wb3BfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChpc19uYW1lc3BhY2VfYW5jZXN0b3IpOiBBZGQgcHJvdG90eXBlLgoJKG5hbWVzcGFjZV9hbmNlc3RvciwgYWRkX3VzaW5nX25hbWVzcGFjZSk6IExpa2V3aXNlLgoJKGFtYmlndW91c19kZWNsKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGluZGVudCk6IEFkZCBwcm90b3R5cGUuCgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IEFkZCBwcm90b3R5cGUuCgpGcmkgQXByIDE3IDAxOjU3OjEyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogSnVzdCByZXR1cm4gYSBQTUYuCgpGcmkgQXByIDE3IDAwOjQ1OjEyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRG9uJ3Qgc3RyaXAgY3YtcXVhbGlmaWVycwoJd2hlbiBkb2luZyBpbml0aWFsaXphdGlvbnMuCgoJKiBwdC5jICh1bmlmeSk6IFVzZSBjb21wdHlwZXMgdG8gY29tcGFyZSB0eXBlIGFyZ3MuCgpGcmkgQXByIDE3IDAwOjI0OjIyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRml4IGNoZWNrIGZvciB3aGVuIGl0J3Mgc2FmZSB0byBmcmVlCgl0aGUgbmV3IGRlY2wuCgoJKiBwdC5jIChtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBEb24ndCBwYXNzIGEgdHlwZWRlZiB0eXBlCgl0byB0eXBlX2FzX3N0cmluZy4KClRodSBBcHIgMTYgMTc6NDc6MzAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcHQuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9pbmRleCk6IEFkZCBwcm90b3R5cGUuCgoJKiBzZWFyY2guYyAobXlfdHJlZV9jb25zKTogRG9uJ3QgY2xlYXIgd29yZHMgb3V0c2lkZSB0aGUKCW5ld2x5IGFsbG9jYXRlZCBub2RlLgoKV2VkIEFwciAxNSAxNTozNDo0NCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBsZXguYyAoaW5pdF9wYXJzZSk6IE5vdyByZXR1cm5zIGNoYXIqIGNvbnRhaW5pbmcgdGhlIGZpbGVuYW1lLgoKV2VkIEFwciAxNSAxMzoyMDowNiAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCQkJICBKZWZmIExhdyAgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIGVycmZuLmM6IFJld29yayB0byBhdm9pZCBwcm9ibGVtcyB3aGVuIEhPU1RfV0lERV9JTlQgaXMgbG9uZ2VyCgl0aGFuIGEgcG9pbnRlci4KClN1biBBcHIgMTIgMjI6MzE6MTkgMTk5OCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBVc2UgVFlQRV9QUkVDSVNJT04uCgpGcmkgQXByIDEwIDEyOjE2OjQ5IDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAbG9vbnkuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgd2FybiBmb3IgcmVkdW5kYW50IGRlY2xzIGlmCglmcmllbmQ6IGxldCBhZGRfZnJpZW5kIHRha2UgY2FyZSBvZiBpdC4KClRodSBBcHIgIDkgMDI6NDA6NDggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV9wb2ludGVyX2NvbnN0cnVjdG9yKTogRG9uJ3Qgc2V0CglUUkVFX0hBU19DT05TVFJVQ1RPUiBmb3IgYSBzaWduYXR1cmUgcG9pbnRlci4KCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogRG9uJ3QgZm9yY2UgYSB0ZW1wb3JhcnkgZm9yIGludGVybmFsIHN0cnVjdHMuCgkqIGluaXQuYyAocmVzb2x2ZV9vZmZzZXRfcmVmKTogV2FybiBhYm91dCBpbXBsaWNpdCAmIG9uIHBtZnMKCWhlcmUsIHRvby4KCSogdHlwZWNrLmMgKGJ1aWxkX3VuYXJ5X29wKTogT25seSBhbGxvdyB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYQoJcmVhbCBjb25zdHJ1Y3Rvci4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IFNpbXBsaWZ5LgoJKHN0b3JlX2luaXRfdmFsdWUpOiBEb24ndCBwZWR3YXJuIGFib3V0IHVzaW5nIHsgfSBmb3IgcG1mcy4KClRodSBBcHIgIDkgMjI6MTY6NTcgMTk5OCAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHN0YXJ0X2RlY2wpOiAgVXBkYXRlIHByb3RvdHlwZS4KCSogZGVjbC5jIChzdGFydF9kZWNsKTogIExpa2UgdGhlIEMgdmVyc2lvbiwgbmV3IHBhcmFtZXRlcnMKCWZvciB0aGUgYXR0cmlidXRlcy4gIENhbGwgY3BsdXNfZGVjbF9hdHRyaWJ1dGVzIGhlcmUsCgkocHVzaGRlY2wpOiAgTGlrZSBDIHZlcnNpb24sIGRvIGJ1aWxkX3R5cGVfY29weSBpZiBUWVBFX0RFQ0wsCgkoZ3Jva2RlY2xhcmF0b3IpOiAgUGFzcyBOVUxMIGZvciBuZXcgc3RhcnRfZGVjbCBhcmd1bWVudHMuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogIExpa2V3aXNlLgoJKiBwYXJzZS55OiAgTWVyZ2UgY3BsdXNfZGVjbF9hdHRyaWJ1dGUgY2FsbHMgaW50byBzdGFydF9kZWNsIGNhbGxzLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBDaGVjayBUWVBFX01BSU5fVkFSSUFOVC4KCSogbGV4LmMgKGJ1aWxkX2xhbmdfZGVjbCk6IEFkZCBsYW5nX25hbWVfamF2YS4KCSogY2xhc3MuYyAocHVzaF9sYW5nX2NvbnRleHQpOiBBZGQgbGFuZ19uYW1lX2phdmEuCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBDaGVjayBmb3IgaXNfamF2YV90eXBlLgoKVGh1IEFwciAgOSAyMjoxNjo1NyAxOTk4ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2hlY2sgVFlQRV9NQUlOX1ZBUklBTlQuCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogQ2hlY2sgZm9yIFRSRUVfQ09ERSBmb3IKCVZPSURfVFlQRSBpbnN0ZWFkIG9mIHR5cGUgPT0gIHZvaWRfdHlwZV9ub2RlLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoc3RhcnRfZGVjbCk6IExpa2V3aXNlLgoJKGdyb2twYXJtcyk6IExpa2V3aXNlLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoc3RhcnRfbWV0aG9kKTogTGlrZXdpc2UuCgpUaHUgQXByICA5IDAwOjE4OjQ0IDE5OTggIERhdmUgQnJvbGxleSAgKGJyb2xsZXlAY3lnbnVzLmNvbSkKCgkqIGxleC5jIChmaW5wdXQpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9jcHBfcGFyc2UpOiAgUmVuYW1lZCBmcm9tIGluaXRfcGFyc2UuCgkoaW5pdF9wYXJzZSk6IEhhbmRsZSAhVVNFX0NQUExJQi4gIENhbGwgaW5pdF9jcHBfcGFyc2Ugd2hlbiBmaW5pc2hlZC4KCShmaW5pc2hfcGFyc2UpOiBOZXcgZnVuY3Rpb24uCgkqIGNwLXRyZWUuaCAoaW5pdF9sZXgsIGluaXRfcGFyc2UpOiBSZW1vdmUgZGVjbGFyYXRpb25zLgoKTW9uIEFwciAgNiAwMjoyNTowNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX2NhbGwpOiBTdGlsbCBldmFsdWF0ZSB0aGUgYWN0dWFsIGFyZ3VtZW50LgoJKiBjbGFzcy5jIChpc19lbXB0eV9jbGFzcyk6IFVwZGF0ZSBmb3IgLWZuZXctYWJpLgoKCSogZGVjbDIuYzogLWZuZXctYWJpIGltcGxpZXMgLWZzcXVhbmdsZS4KCgkqIG1ldGhvZC5jIChkb19idWlsZF9hc3NpZ25fcmVmKTogRG9uJ3QgZG8gYW55dGhpbmcgdG8gY29weQoJYW4gZW1wdHkgY2xhc3MuCgkoZG9fYnVpbGRfY29weV9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoKU2F0IEFwciAgNCAxODo0Mzo1OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGF2b2lkX292ZXJsYXApOiBSZXR1cm4gYSB2YWx1ZS4KClNhdCBBcHIgIDQgMTI6NTI6MzUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWV0aG9kLmMgKGNoZWNrX2J0eXBlKTogQWRkIG1pc3NpbmcgYXJndW1lbnQgdG8geHJlYWxsb2MuCgkoY2hlY2tfa3R5cGUpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDMgMDI6MjI6NTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUltcGxlbWVudCBlbXB0eSBiYXNlIG9wdGltaXphdGlvbi4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWRkIHZiYXNlIGZpZWxkcyBlYXJsaWVyLiAgU2V0CglDTEFTU1RZUEVfU0laRSBvZiBhbiBlbXB0eSBiYXNlIHRvIDAuICBUeXBlcyB3aXRoIGJhc2VzIGNhbiBiZSBlbXB0eS4KCSogc2VhcmNoLmMgKGRmc19jaGVja19vdmVybGFwLCBkZnNfbm9fb3ZlcmxhcF95ZXQpOiBOZXcgZm5zLgoJKHR5cGVzX292ZXJsYXBfcCk6IE5ldyBmbi4KCSogdHJlZS5jIChhdm9pZF9vdmVybGFwKTogTmV3IGZuLgoJKGJ1aWxkX2Jhc2VfZmllbGRzKTogVXNlIGl0IHRvIGF2b2lkIG92ZXJsYXBwaW5nIGVtcHR5IGJhc2VzLgoJKiBjcC10cmVlLmgsIGRlY2wyLmMsIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZuZXctYWJpLgoKCSogZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcl9zdG10KTogU3RyaXAgdW51c2VkIElORElSRUNUX1JFRnMuCgoJUmUtaW1wbGVtZW50IGFsbG9jYXRpb24gb2YgYmFzZSBjbGFzcyBzdWJvYmplY3RzLgoJKiB0cmVlLmMgKHVuc2hhcmVfYmFzZV9iaW5mb3MpOiBOZXcgZm4uCgkobGF5b3V0X2Jhc2V0eXBlcyk6IFVzZSBpdC4gIE5vdyBoYW5kbGVzIG9mZnNldHMgb2YgYm90aCB2aXJ0dWFsIGFuZAoJbm9uLXZpcnR1YWwgYmFzZXMsIGFmdGVyIGxheW91dF90eXBlLgoJKGxheW91dF92YmFzZXR5cGVzKTogUmVtb3ZlLgoJKGJ1aWxkX2Jhc2VfZmllbGRzKTogR2VuZXJhdGUgRklFTERfREVDTHMgZm9yIGVhY2ggbm9uLXZpcnR1YWwgYmFzZS4KCShidWlsZF92YmFzZV9wb2ludGVyX2ZpZWxkcyk6IFNwbGl0IG91dCBmcm9tIG9sZCBsYXlvdXRfYmFzZXR5cGVzLgoJKiBjbGFzcy5jIChmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBMb3NlIG9mZnNldCBoYW5kbGluZyBjb2RlLgoJTW92ZSBub252ZHRvciB3YXJuaW5nIGhlcmUuICBEb24ndCBtZXNzIHdpdGggdF9iaW5mbyBhbnltb3JlLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IG1lc3Mgd2l0aCB0X2JpbmZvIGFueW1vcmUuICBVc2UgZm5zIGFib3ZlLgoJKiBjcC10cmVlLmg6IEFkanVzdC4KClRodSBBcHIgIDIgMTQ6MjU6MTMgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBMb3NlIENMQVNTVFlQRV9WQkFTRV9TSVpFLCBzb21lIHVudXNlZCBzdHVmZi4KCSogZGVjbC5jLCBkZWNsMi5jLCBwdC5jLCBwdHJlZS5jLCBsZXguYzogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGR1cGxpY2F0ZV90YWdfZXJyb3IpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBTZXQgQ0xBU1NUWVBFX1NJWkUsIENMQVNTVFlQRV9NT0RFLCBDTEFTU1RZUEVfQUxJR04uCgkqIHRyZWUuYyAobGF5b3V0X3ZiYXNldHlwZXMpOiBVcGRhdGUgZnJvbSBsYXlvdXRfcmVjb3JkLCByZW1vdmUKCXZhcl9zaXplIHN1cHBvcnQsIHVzZSBDTEFTU1RZUEVfU0laRSBpbnN0ZWFkIG9mIENMQVNTVFlQRV9WQkFTRV9TSVpFLgoJKGxheW91dF9iYXNldHlwZXMpOiBMaWtld2lzZS4KCldlZCBBcHIgIDEgMTg6MjI6MjUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2xhc3MuYywgTWFrZSBzdXJlIHN5c3RlbS5oIGlzIGluY2x1ZGVkIGp1c3QgYWZ0ZXIgY29uZmlnLmguCglEZWxldGUgbGluZ2VyaW5nIHN0ZGlvIGFuZCBlcnJubyByZWZlcmVuY2VzIHRvby4KCSogZGVjbC5jLCBlcnJmbi5jLCBwYXJzZS55LCBwdHJlZS5jIHNlYXJjaC5jLCB4cmVmLmM6IExpa2V3aXNlLgoKV2VkIEFwciAgMSAxNTozODozNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogRml4IGFjY2VzcyBjb250cm9sIGZvciBsb2NhbCBjbGFzc2VzLgoKCSogY2xhc3MuYyAoaXNfZW1wdHlfY2xhc3MpOiBOZXcgZm4uCgkqIGNhbGwuYyAoYnVpbGRfY2FsbCk6IERvbid0IHBhc3MgZW1wdHkgY2xhc3Mgb2JqZWN0cyB0byBhIGZ1bmN0aW9uLgoKV2VkIEFwciAgMSAxNDo1ODozNSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IERvIG5hbWUgcmVzb2x1dGlvbiBmb3IgZGVmYXVsdAoJYXJndW1lbnRzIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcyBpbiB0aGUgc2NvcGUgb2YgdGhlIHRlbXBsYXRlcy4KClR1ZSBNYXIgMzEgMTM6NDM6NTcgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2FsbC5jOiBJbmNsdWRlIHN5c3RlbS5oLiAgUmVtb3ZlIGluY2x1ZGVzLCBkZWNsYXJhdGlvbnMgYW5kCglkZWZpbmVzIHByb3ZpZGVkIGJ5IHN5c3RlbS5oLgoJKiBjbGFzcy5jLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLCBlcnJmbi5jIGVycm9yLmM6IExpa2V3aXNlLgoJKiBleGNlcHQuYywgZXhwci5jIGZyaWVuZC5jLCBnKytzcGVjLmMsIGluaXQuYywgaW5wdXQuYzogTGlrZXdpc2UuCgkqIGxleC5jLCBwYXJzZS55LCBwdC5jLCBwdHJlZS5jIHJlcG8uYyBydHRpLmMsIHNlYXJjaC5jOiBMaWtld2lzZS4KCSogc2VtYW50aWNzLmMsIHNpZy5jLCBzcGV3LmMsIHRyZWUuYywgdHlwZWNrLmM6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMsIHhyZWYuYzogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluOiBEZXBlbmRlbmNpZXMgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4KCSogTWFrZS1sYW5nLmluOiBMaWtld2lzZS4KCk1vbiBNYXIgMzAgMTI6MTU6MDAgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoZm5fdHlwZV91bmlmaWNhdGlvbik6IEFsbG93IGluY29tcGxldGUgdW5pZmljYXRpb24gd2l0aG91dAoJYW4gaW1tZWRpYXRlIGVycm9yIG1lc3NhZ2UuCgpNb24gTWFyIDMwIDA4OjU1OjQyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobWVtYmVyX3ApOiBOZXcgZm4uCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogT25seSBzZXQgREVDTF9TVEFUSUNfRlVOQ1RJT05fUCBmb3IKCWluaXRpYWxpemluZyBjbGFzcyBtZW1iZXJzLgoKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX1BBUk1fSU5ERVgpOiBDbGFzcyAneCcuCgkqIHB0cmVlLmMgKGxhbmdfcHJpbnRfeG5vZGUpOiBIYW5kbGUgVEVNUExBVEVfUEFSTV9JTkRFWC4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBIYW5kbGUgbm9uLXNjb3BlZCBkZXN0cnVjdG9ycywgdG9vLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoKCSogcHQuYyAocHJpbnRfdGVtcGxhdGVfY29udGV4dCk6IFNwbGl0IG91dC4uLgoJKHB1c2hfdGluc3RfbGV2ZWwpOiAuLi5mcm9tIGhlcmUuCgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogRG9uJ3QgcGFzcyBhIHR5cGUgdG8gZGVjbF9mdW5jdGlvbl9jb250ZXh0LgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogQWx3YXlzIGhhbmQgb2ZmCgljb252ZXJzaW9ucyB0byBjbGFzcyB0eXBlLgoKU3VuIE1hciAyOSAyMDowMTo1OSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBmcmllbmQuYyAoaXNfZnJpZW5kKTogTG9jYWwgY2xhc3NlcyBoYXZlIHRoZSBzYW1lIGFjY2VzcyBhcyB0aGUKCWVuY2xvc2luZyBmdW5jdGlvbi4KClN1biBNYXIgMjkgMDA6NDc6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdHlwZWNrLmMgKGV4cGFuZF90YXJnZXRfZXhwcik6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoKCSogc2VhcmNoLmM6IFB1dCB2YXJpb3VzIHByb3RvdHlwZXMgaW5zaWRlICNpZmRlZiBNSV9NQVRSSVguCgoJKiByZXBvLmMgKHNhdmVfc3RyaW5nKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgoJKiBtZXRob2QuYyAodGh1bmtfcHJpbnRhYmxlX25hbWUpOiBEZWxldGUgZGVhZCBmdW5jdGlvbi4KCgkqIGxleC5jICh5eW5leHRjaCk6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoKCSogZXhwci5jICh0cmVlX2V4dHJhY3RfYWdncl9pbml0KTogI2lmIDAgb3V0LgoKCSogZXhjZXB0LmMgKGRvX3Vud2luZCk6IERlbGV0ZSBkZWFkIGZ1bmN0aW9uLgoJKGVhc3lfZXhwYW5kX2FzbSk6IExpa2V3aXNlLgoKCSogY3Z0LmMgKGJ1aWxkX2NvbnZlcnNpb25fdHlwZV8xKTogRGVsZXRlIGRlYWQgZnVuY3Rpb24uCgoJKiBjcC10cmVlLmggKHB1c2hfZXhwcmVzc2lvbl9vYnN0YWNrKTogRGVjbGFyZS4KCgkqIGNhbGwuYyAoc291cmNlX3R5cGUpOiAjaWYgMCBvdXQuCgoJKiBjbGFzcy5jIChhbHRlcl9hY2Nlc3MpOiBSZW1vdmUgdW51c2VkIGxhYmVsLiAgQWRkIGJyYWNlcwoJYXJvdW5kIGVtcHR5IGVsc2UgY2xhdXNlLgoKCSogbGV4LmMgKHl5cHJpbnQpOiBGaXggYXJndW1lbnQgdG8gcHJpbnRmLgoKU2F0IE1hciAyOCAxNzo0Mzo1MiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jICh0c3Vic3QpOiBDbGVhciBUUkVFX1VTRUQgZm9yIG5ldyBGVU5DVElPTl9ERUNMcy4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogTWFrZSBzdXJlIHRlbXBsYXRlCglhcmd1bWVudHMgYXJlIHBlcm1hbmVudC4KCSogaW5pdC5jIChyZXNvbHZlX29mZnNldF9yZWYpOiBEb24ndCBnbyBsb29raW5nIGFyb3VuZCBpbgoJdGVtcGxhdGUgdHlwZXMuCgoJKiBzZW1hbnRpY3MuYzogQWRkIHJvdXRpbmVzIHRvIGhhbmRsZSBleHByZXNzaW9ucywgYW5kIHNvbWUKCWRlY2xhcmF0aW9uIHByb2Nlc3NpbmcuCgkqIHBhcnNlLnk6IFVzZSB0aGVtLgoJKGN1cnJlbnRfY2xhc3NfZGVwdGgpOiBNb3ZlIGRlY2xhcmF0aW9uIHRvIGNwLXRyZWUuaC4KCSogcGFyc2UuYzogUmVnZW5lcmF0ZWQuCgkqIGNwLXRyZWUuaDogVXNlIHRoZW0uCgkoY3VycmVudF9jbGFzc19kZXB0aCk6IERlY2xhcmUuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogVXNlIGJlZ2luX3N0bXRfZXhwciBhbmQgZmluaXNoX3N0bXRfZXhwci4KCkZyaSBNYXIgMjcgMjA6MjM6MTggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogQmUgYSBiaXQgbW9yZSBleHBsaWNpdCB3aXRoIHRlbXBsYXRlCgl0eXBlIGFyZ3VtZW50cywgd2hlbiB2ZXJib3NlLgoKRnJpIE1hciAyNyAxODoxNjo0MCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbmMvZXhjZXB0aW9uOiBSZW9yZGVyIGNsb3NpbmcgYnJhY2VzLgoKRnJpIE1hciAyNyAxMzoyMjoxOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChyZWRlY2xhcmVfY2xhc3NfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uCgkqIGNwX3RyZWUuaCAocmVkZWNsYXJlX2NsYXNzX3RlbXBsYXRlKTogRGVjbGFyZSBpdC4KCSogZGVjbC5jICh4cmVmX3RhZyk6IFVzZSBpdC4KClRodSBNYXIgMjYgMTE6MTY6MzAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBDaGVjayBJU19BR0dSX1RZUEUsIG5vdAoJVFlQRV9MQU5HX1NQRUNJRklDLgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgY29uc3QgYW5kIHZvbGF0aWxlIGZyb20gdHlwZSBhZnRlcgoJc2V0dGluZyBjb25zdHAgYW5kIHZvbGF0aWxlcC4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERvbid0IHdhcm4gYWJvdXQgYm9vbCBiaXRmaWVsZCBsYXJnZXIKCXRoYW4gb25lIGJpdC4KClRodSBNYXIgMjYgMTA6MjU6NTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogU1RSSVBfTk9QUyB3aGVyZSBhcHByb3ByaWF0ZS4KClRodSBNYXIgMjYgMTA6MjQ6MDUgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChidWlsZF9vYmplY3RfY2FsbCk6IENvbXBsYWluIGFib3V0IGFtYmlndW91cyBvcGVyYXRvcigpLAoJcmF0aGVyIHRoYXQgY3Jhc2hpbmcuCgkoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfb3BfZGVsZXRlX2NhbGwpOiBMaWtld2lzZS4KClRodSBNYXIgMjYgMTA6MjM6MjQgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IFVzZSBjb21wX3RhcmdldF90eXBlcwoJaW5zdGVhZCBvZiBjb21wX3B0cl90dHlwZXMuCgpXZWQgTWFyIDI1IDE2OjEwOjUwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwLXRyZWUuaCAoZW5mb3JjZV9hY2Nlc3MpOiBEZWNsYXJlLgoJKiBjYWxsLmMgKGVuZm9yY2VfYWNjZXNzKTogTWFrZSBpdCBleHRlcm4sIG5vdCBzdGF0aWMuCgkqIGNsYXNzLmMgKGFsdGVyX2FjY2Vzcyk6IFVzZSBlbmZvcmNlX2FjY2VzczsgbW9kaWZ5IGNvZGUgZm9yIElTTwoJY29tcGxpYW5jZSwgcmF0aGVyIHRoYW4gQVJNIHJ1bGVzLgoKV2VkIE1hciAyNSAxMjoxMDo0NSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogY3AtdHJlZS5oOiBGaXggdHlwby4KCldlZCBNYXIgMjUgMDI6MDE6MDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwcik6IE9ubHkgZG8gUENDX1NUQVRJQ19TVFJVQ1RfUkVUVVJOIHRoaW5nCglpZiAoYWdncmVnYXRlX3ZhbHVlX3AgKHR5cGUpKS4KCgkqIGRlY2wyLmMgKGNvbnN0cnVjdG9yX25hbWVfZnVsbCk6IEhhbmRsZSBUWVBFTkFNRV9UWVBFLgoKVHVlIE1hciAyNCAxNjoxMjowMSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0cmVlLmMgKG1hcGNhcik6IFdoZW4gZGVhbGluZyB3aXRoIGEgREVDTCwgdXNlIGl0J3MgY29uc3RhbnQKCXZhbHVlLCBpZiBhbnkuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IERvbid0IG1hbmdsZSB0aGUgbmFtZXMgb2YgdGVtcGxhdGUKCWNsYXNzZXMgd2hvc2UgYXJndW1lbnRzIGFyZSB1bmtub3duLgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBIYW5kbGUgR09UT19TVE1UIGNvcnJlY3RseS4KClR1ZSBNYXIgMjQgMTI6MjE6NTUgMTk5OCAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IFRZUEVfUFJFQ0lTT04gZm9yIGJvb2xzIHRvIDEuCgpUdWUgTWFyIDI0IDEyOjIxOjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIFRZUEVfTUFYX1ZBTFVFIGZvcgoJYm9vbGVhbl90eXBlX25vZGUgdG8gMS4KClR1ZSBNYXIgMjQgMTA6MjM6NDcgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgbCcuCgoJKiBwdC5jIChmb3JfZWFjaF90ZW1wbGF0ZV9wYXJtKTogTmV3IGZ1bmN0aW9uLCBjcmVhdGVkIGJ5Cgljb252ZXJ0aW5nIHVzZXNfdGVtcGxhdGVfcGFybXMuCgkodHJlZV9mbl90KTogTmV3IHR5cGVkZWYuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IFVzZSBpdC4KCShtYXJrX3RlbXBsYXRlX3Bhcm0pOiBOZXcgZnVuY3Rpb24uCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgbGlzdCBvZiBhIHBhcnRpYWwKCXNwZWNpYWxpemF0aW9uIHVzZXMgYWxsIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoKCSogTWFrZS1sYW5nLmluIChjKytmaWx0KTogRG9uJ3QgZGVsZXRlIGN4eG1haW4uYyBhZnRlciB3ZSdyZSBkb25lCgl3aXRoIGl0OyB3ZSBtaWdodCB3YW50IGl0IGZvciBkZWJ1Z2dpbmcuCgkqIGNwLXRyZWUuaCAodHlwZV91bmlmaWNhdGlvbik6IENoYW5nZSBpbnRlcmZhY2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFNraXAgbmVzdGVkIHRlbXBsYXRlIHR5cGVzLCBqdXN0IGxpa2UKCW9yZGluYXJ5IG5lc3RlZCB0eXBlcy4KCShpbnN0YW50aWF0ZV90eXBlKTogVXNlIG5ldyBpbnRlcmZhY2UgdG8gdHlwZV91bmlmaWNhdGlvbi4KCSogbGV4LmMgKGluaXRfbGV4KTogQWRkIF9fc3ogYXMgb3BuYW1lIGZvciBzaXplb2YuCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9zY29wZV9yZWYpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogSGFuZGxlIGNvbXBsZXggZXhwcmVzc2lvbnMuICBTZXQKCW51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGlmIG5lY2Vzc2FyeS4KCShidWlsZF9vdmVybG9hZF92YWx1ZSk6IEhhbmRsZSBub24tUEFSTV9ERUNMIG5vZGVzOyB0aGlzCglyb3V0aW5lIGlzIG5vdyB1c2VkIGJ5IGJ1aWxkX292ZXJsb2FkX2ludC4gIFJlbW92ZSBzb21lCglhc3NpZ25tZW50cyB0byBudW1lcmljX291dHB1dF9uZWVkX2Jhci4gIFVzZQoJYnVpbGRfb3ZlcmxvYWRfc2NvcGVfcmVmLgoJKGJ1aWxkX3F1YWxpZmllZF9uYW1lKTogTm90ZSB0aGF0IHNvbWUgdGVtcGxhdGUgbWFuZ2xlZCBuYW1lcyBlbmQKCXdpdGggZGlnaXRzLCBhbmQgc2V0IG51bWVyaWNfb3V0cHV0X25lZWRfYmFyIGFwcHJvcHJpYXRlbHkuICBVc2UKCWJ1aWxkX3VuZGVyc2NvcmVfaW50LgoJKiBwdC5jICh1bmlmeSk6IENoYW5nZSBpbnRlcmZhY2UuCgkodHlwZV91bmlmaWNhdGlvbl9yZWFsKTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogVXNlIG5ldyBpbnRlcmZhY2VzLgoJKHRzdWJzdCk6IERlYWwgZ3JhY2VmdWxseSB3aXRoIHNpdHVhdGlvbnMgaW4gd2hpY2ggdGhlIGFyZ3VtZW50Cgl2ZWN0b3IgaXMgbm90IGZ1bGx5IGZpbGxlZC4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogVXNlIG5ldyBpbnRlcmZhY2VzLgoJKHR5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4gIFJlbW92ZSBOT1BfRVhQUiBoYWNrLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuICBEZWFsIHdpdGggdW5pZmljYXRpb24gb2YgY29tcGxleCBleHByZXNzaW9ucy4KCk1vbiBNYXIgMjMgMTI6MjQ6MzcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IEluaXRpYWxpemUgc2tpcCBwcm9wZXJseS4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogUmV2ZXJ0LgoJKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBSZW1vdmUuCgkobG9va3VwX25hbWVfcmVhbCk6IERvbid0IGNhbGwgaXQuICBDYWxsIGxvb2t1cF9maWVsZCBpZiB3ZSBzZWUgYQoJVFlQRV9ERUNMIGZyb20gYSB0ZW1wbGF0ZSBiYXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogRG8gaW1wbGljaXQgdHlwZW5hbWUgc3R1ZmYuCgpTdW4gTWFyIDIyIDAwOjUwOjQyIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgkJCSAgR2VvZmYgTm9lciAgICA8bm9lckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IFZhcmlvdXMgZml4ZXMgZm9yIGJ1aWxkaW5nIGN5Z3dpbjMyIG5hdGl2ZSB0b29sY2hhaW5zLgoJKiBNYWtlLWxhbmcuaW46IExpa2V3aXNlLgoKRnJpIE1hciAyMCAxODowNzozOSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAodHN1YnN0LCBURU1QTEFURV9URU1QTEFURV9QQVJNKTogU2ltcGxpZnkuCgpGcmkgTWFyIDIwIDEwOjQyOjA3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobWFrZV9pbXBsaWNpdF90eXBlbmFtZSk6IFJld3JpdGUgcmVtb3ZlZCBjb2RlLgoJKG1ha2VfdHlwZW5hbWVfdHlwZSk6IENhbGwgaXQgaWYgdGhlIHR5cGUgd2UgbG9vayB1cCBjb21lcyBmcm9tCglhIGJhc2UgdGhhdCB1c2VzIHRlbXBsYXRlIHBhcm1zLgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IFJld3JpdGUuCgkodHN1YnN0LCBGVU5DVElPTl9ERUNMKTogVXNlIGl0LgoKRnJpIE1hciAyMCAwODoxMjo0MyAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBzZW1hbnRpY3MuYyAoZmluaXNoX2FzbV9zdG10KTogRml4IGNvbWJpbmUgc3RyaW5ncy4gIENhbGwKCWNfZXhwYW5kX2FzbV9vcGVyYW5kcyAoKSBpZiBvdXRwdXRfb3BlcmFuZHMsIGlucHV0X29wZXJhbmRzIG9yCgljbG9iYmVycyBpcyBub3QgTlVMTF9UUkVFLgoKRnJpIE1hciAyMCAwMDoxMDoxOSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAoY29tcGxldGVfdGVtcGxhdGVfYXJncyk6IE5ldyBmdW5jdGlvbi4KCShnZXRfYmluZGluZ3MpOiBEZWFsIHdpdGggc3BlY2lhbGl6YXRpb25zIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcwoJd2l0aCByZXR1cm4gdHlwZSBjb250YWluaW5nIHBhcmFtZXRlcnMgZnJvbSBvdXRlciBjbGFzcwoJdGVtcGxhdGVzLgoJKHRzdWJzdCwgVEVNUExBVEVfVEVNUExBVEVfUEFSTSk6IFdoZW4gcmVkdWNpbmcgcGFyYW1ldGVyIGxldmVsLAoJc3Vic3RpdHV0ZSBhcmd1bWVudHMgYW5kIGNvbXBvc2UgYSBuZXcgdHlwZS4KClRodSBNYXIgMTkgMTk6MDE6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0KTogQ2xlYXIgREVDTF9QRU5ESU5HX0lOTElORV9JTkZPIGZvciBuZXcKCUZVTkNUSU9OX0RFQ0xzLgoKVGh1IE1hciAxOSAxMTo1MTo1OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBMb3NlIHVzZWxlc3MgY29kZS4KCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IEhhbmRsZSBBKiAtPiBjb25zdCBBKiBwcm9wZXJseS4KCgkqIHB0LmMgKGdldF9iaW5kaW5nc19yZWFsKTogUmVuYW1lIGZyb20gZ2V0X2JpbmRpbmdzLiAgQWRkCgljaGVja19yZXR0eXBlIHBhcm0uCgkoZ2V0X2JpbmRpbmdzKTogUGFzcyAxLgoJKGdldF9iaW5kaW5nc19vdmVybG9hZCk6IFBhc3MgMC4KCldlZCBNYXIgMTkgMDk6MDg6MTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBXaGVuIHJldmVydGluZyBhIHN0YXRpYwoJbWVtYmVyIGZ1bmN0aW9uLCBhbHNvIHJlbW92ZSB0aGUgYHRoaXMnIHBhcmFtZXRlciBmcm9tCglsYXN0X2Z1bmN0aW9uX3Bhcm1zLgoKVGh1IE1hciAxOSAwMjoyNzo0OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfY29weSwgQ09OU1RfREVDTCk6IERvbid0IGJvdGhlciB0c3Vic3RpbmcKCWEgZnVuY3Rpb24gY29udGV4dC4KCgkqIGRlY2wuYyAoc3RvcmVfYmluZGluZ3MpOiBVc2UgZnJlZV9iaW5kaW5nX3ZlY3MuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogTGlrZXdpc2UuCgpXZWQgTWFyIDE4IDEyOjQxOjQzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobWFrZV9pbXBsaWNpdF90eXBlbmFtZSk6IE9ubHkgY2hhbmdlIHRoZSB0eXBlIG9mIGEKCVRZUEVOQU1FX1RZUEUuCgpXZWQgTWFyIDE4IDEwOjA5OjUxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHNlbWFudGljcy5jOiBOZXcgZmlsZSwgY29udGFpbmluZyByb3V0aW5lcyB0byBwZXJmb3JtIHRoZQoJc2VtYW50aWMgcGhhc2Ugb2YgcGFyc2luZy4KCSogcGFyc2UueTogVXNlIGl0LgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgdGhlIHZhcmlvdXMgZnVuY3Rpb25zIGluIHNlbWFudGljcy5jLgoJUHJvdmlkZSBtYWNyb3MgdG8gYWNjZXNzIF9TVE1UIHRyZWUgbm9kZXMuCgkqIGNwLXRyZWUuZGVmOiBBZGQgQVNNX1NUTVQgdHJlZSBub2RlLgoJKiBNYWtlZmlsZS5pbiwgTWFrZS1sYW5nLmluOiBBZGQgZGVwZW5kZW5jaWVzIG9uIGFuZCBmb3IKCXNlbWFudGljcy5jLgoKV2VkIE1hciAxOCAwMDoyNDoxMCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBPbmx5IGNoZWNrIHByaW1hcnkgdGVtcGxhdGVzLgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBDb21wbGFpbiBhYm91dCBkZWZhdWx0IGFyZ3MKCWluIGV4cGxpY2l0IHNwZWNpYWxpemF0aW9uLgoKCSogcGFyc2UueSAobm9tb2RzX2luaXRkY2wwKTogQWxzbyBjYWxsIGNwX2ZpbmlzaF9kZWNsIGZvciBhCgljb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yLgoKVHVlIE1hciAxNyAxNDo0NDo1NCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0eXBlY2syLmMgKGJ1aWxkX3hfYXJyb3cpOiBEb24ndCBjcmFzaCB3aGVuIGFuIGFnZ3JlZ2F0ZSB0eXBlCgloYXMgbm8gb3ZlcmxvYWRlZCBvcGVyYXRvciAtPi4KCgkqIGNhbGwuYyAoYnVpbGRfZmllbGRfY2FsbCk6IERvbid0IGNyYXNoIHdoZW4gcHJlc2VudGVkIHdpdGggYQoJZmllbGQgdGhhdCBpcyBhY3R1YWxseSBhIG5lc3RlZCB0eXBlLgoKCSogZGVjbC5jIChwdXNodGFnKTogRGVhbCB3aXRoIGZyaWVuZCBjbGFzcyBpbmplY3Rpb24gaW4gbG9jYWwKCWNsYXNzZXMuCgoJKiBjYWxsLmMgKGJ1aWxkX29iamVjdF9jYWxsKTogRG9uJ3QgY3Jhc2ggaWYgT0JKIGlzIGEKCXBvaW50ZXItdG8tbWVtYmVyLWZ1bmN0aW9uLgoKVHVlIE1hciAxNyAxMTo0MDoyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBDb21wbGFpbiBhYm91dCB0ZW1wbGF0ZSB3aXRoIEMgbGlua2FnZSwKCWFub255bW91cyB0ZW1wbGF0ZSBjbGFzcy4KCk1vbiBNYXIgMTYgMTI6MTA6MzkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAocHVzaGNsYXNzKTogT25seSB1c2UgdGhlIG1pX21hdHJpeCBzdHVmZiAjaWZkZWYgTUlfTUFUUklYLgoJKiBzZWFyY2guYzogTGlrZXdpc2UuCgoJKiBsZXguYyAoZG9fcGVuZGluZ19kZWZhcmdzKTogT25seSBjYWxsCgltYXliZV97YmVnaW4sZW5kfV9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyBmb3IgRlVOQ1RJT05fREVDTHMuCgoJKiBwYXJzZS55IChpbml0ZGNsMF9pbm5hcmRzKTogTW92ZSBtYXliZWFzbSBiYWNrIGludG8gaW5pdGRjbDAgZXQgYWwuCgpNb24gTWFyIDE2IDEwOjQ3OjIyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHBhcnNlLnk6IERlYWwgd2l0aCBDT05TVFJVQ1RPUlMgaW4gbmV3X2luaXRpYWxpemVycy4KCk1vbiBNYXIgMTYgMTA6NTQ6MjEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBEZWFsIHdpdGggQklORF9FWFBSIGluIGEgd2F5IHRoYXQgbW9yZQoJY2xvc2VseSBtaW1pY3MgdGhlIGJlaGF2aW9yIGluIHBhcnNlLnkuCgkodHN1YnN0X2V4cHIpOiBSZXR1cm4gdGhlIHJlc3VsdGluZyBCTE9DSyB3aGVuIG1ha2luZyBhIHRzdWJzdCdpbmcKCWludG8gYSBjb21wb3VuZCBzdGF0ZW1lbnQuCgpTdW4gTWFyIDE1IDAyOjA3OjI2IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoVEVNUExBVEVfUEFSTVNfRk9SX0lOTElORSk6IE5ldyBtYWNyby4KCSogcHQuYyAoaW5saW5lX25lZWRzX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZuLgoJKG9yaWdpbmFsX3RlbXBsYXRlKTogTmV3IGZuLgoJKHB1c2hfaW5saW5lX3RlbXBsYXRlX3Bhcm1zX3JlY3Vyc2l2ZSk6IE5ldyBmbi4KCShtYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFVzZSB0aGVtLgoJKG1heWJlX2VuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGlzX21lbWJlcl9vcl9mcmllbmRfdGVtcGxhdGUpOiBSZW5hbWUgdG8gaXNfbWVtYmVyX3RlbXBsYXRlLgoJTWVtYmVyIGZ1bmN0aW9ucyBvZiBsb2NhbCBjbGFzc2VzIGFyZSBuZXZlciBtZW1iZXIgdGVtcGxhdGVzLgoKU3VuIE1hciAxNSAwMToxNDoyMiAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBIYW5kbGUgVEVNUExBVEVfREVDTCB0aGF0IHdhcwoJYWRkZWQgaW4gdGhlIGNsYXNzIHNjb3BlIHRvIGNhdGNoIHJlZGVmaW5pdGlvbiBlcnJvci4KCgkqIHB0LmMgKHJlZHVjZV90ZW1wbGF0ZV9wYXJtX2xldmVsKTogQWxzbyBjb3B5Cgl0aGUgREVDTF9URU1QTEFURV9QQVJNUyBmaWVsZC4KClN1biBNYXIgMTUgMTA6NTQ6MDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0KTogQ2xlYXIgVFlQRV9SRUZFUkVOQ0VfVE8gd2hlbiBjcmVhdGluZyBhCglyZWR1Y2VkLWxldmVsIHRlbXBsYXRlIHR5cGUgcGFyYW1ldGVyLgoKU3VuIE1hciAxNSAxMjoyNjowMiAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjcC10cmVlLmggKHN0cnVjdCBsYW5nX2RlY2xfZmxhZ3MpOiBBZGQgbmVlZHNfZmluYWxfb3ZlcnJpZGVyLgoJKERFQ0xfTkVFRFNfRklOQUxfT1ZFUlJJREVSX1ApOiBOZXcgbWFjcm8uCgkqIGNsYXNzLmMgKG92ZXJyaWRlX29uZV92dGFibGUpOiBTZXQgREVDTF9ORUVEU19GSU5BTF9PVkVSUklERVJfUC4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBQcm9wYWdhdGUgaXQuCgkqIHR5cGVjazIuYyAoYWJzdHJhY3RfdmlydHVhbHNfZXJyb3IpOiBVc2UgdHdvIGxvb3BzIHRvIGVtaXQKCWFic3RyYWN0IHZpcnR1YWwgZnVuY3Rpb25zIGFuZCB2aXJ0dWFsIGZ1bmN0aW9ucyB3aGljaCBuZWVkIGEKCWZpbmFsIG92ZXJyaWRlciBzZXBhcmF0ZWx5LgoKVGh1IE1hciAxMiAwOTozOTo0MCAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBsYW5nLXNwZWNzLmg6IFByb3Blcmx5IHB1dCBicmFja2V0cyBhcm91bmQgYXJyYXkgZWxlbWVudHMgaW4KCWluaXRpYWxpemVyLgoKCSogdHlwZWNrLmMgKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBDb3JyZWN0bHkgcGxhY2UgcGFyZW5zIGFyb3VuZAoJJiYgYW5kIHx8IGluIGV4cHJlc3Npb24uCgpUaHUgTWFyIDEyIDA5OjI2OjA0IDE5OTggIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNhbGwuYyAoZGVmYXVsdF9wYXJtX2NvbnZlcnNpb25zKTogUmVtb3ZlIHByb3RvdHlwZSBkZWZpbml0aW9uLgoJKGJ1aWxkX21ldGhvZF9jYWxsKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSByZXN1bHQuCgoJKiBjdnQuYyAob2NwX2NvbnZlcnQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGNvbnZlcnNpb24uCgoJKiBkZWNsMi5jIChhbWJpZ3VvdXNfZGVjbCk6IEFkZCBleHBsaWNpdCBwYXJhbWV0ZXIgZGVmaW5pdGlvbiBmb3IgbmFtZS4KCgkqIGV4Y2VwdC5jIChkb191bndpbmQpOiAjaWYgMCBkZWZpbml0aW9uIG9mIHVudXNlZCB2YXJpYWJsZXMgZmNhbGwKCWFuZCBuZXh0X3BjLgoKCSogZXhwci5jIChleHRyYWN0X3NjYWxhcl9pbml0KTogI2lmIDAgcHJvdG90eXBlIGFuZCBmdW5jdGlvbgoJZGVmaW5pdGlvbi4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbml0X3R5cGUuCgkoYnVpbGRfbmV3XzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHQuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgbmV3dGFnOwoJY2FzdCBjYWxsZWQgZnVuY3Rpb24gcmV0dXJuIHZhbHVlIHRvIHZvaWQuCgkoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgbmFtZSBhbmQgZm4uCgoJKiB0cmVlLmMgKGdldF90eXBlX2RlY2wpOiBBZGQgZGVmYXVsdCByZXR1cm4gdG8gc2h1dCB1cCBjb21waWxlciBmcm9tCgljb21wbGFpbmluZyBjb250cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfY29uZGl0aW9uYWxfZXhwcik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgcnZhbC4KClRodSBNYXIgMTIgMDk6MTI6MTUgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogY2FsbC5jIChkZWZhdWx0X3Bhcm1fY29udmVyc2lvbnMpOiBSZW1vdmUgcHJvdG90eXBlIGRlZmluaXRpb24uCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlc3VsdC4KCShidWlsZF9vdmVyX2NhbGwpOiBBZGQgZGVmYXVsdCBjYXNlIGluIGVudW1lcmF0aW9uIHN3aXRjaC4KClRodSBNYXIgMTIgMDg6Mzk6MTMgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQ2hhbmdlIGoncyB0eXBlIHRvIHNpemVfdC4KCgkqIHRyZWUuYyAobGF5b3V0X3ZiYXNldHlwZXMpOiByZWNvcmRfYWxpZ24gYW5kIGRlc2lyZWRfYWxpZ24gYXJlIG9mCgl0eXBlIHVuc2lnbmVkIGludDsgY29uc3Rfc2l6ZSBhbmQgbm9udmlydHVhbF9jb25zdF9zaXplIGxpa2V3aXNlLgoKV2VkIE1hciAxMSAwNzoyNToyMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChuZXdfaW5pdGlhbGl6ZXIpOiBNYWtlIHN1cmUgYWxsIGluaXRpYWxpemVycyBhcmUKCWxpc3RzLgoKVHVlIE1hciAxMCAwNzozMjozNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBNYXJrIHRpbmZvIGZ1bmN0aW9ucyBmb3IKCWN2LXF1YWxpZmllZCB2ZXJzaW9ucyBvZiBjbGFzcyB0eXBlcyBhcyBERUNMX05PVF9SRUFMTFlfRVhURVJOLgoKRnJpIE1hciAgNiAyMzoyNzozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZXRob2QuYzogRml4IHR5cG8uCgpGcmkgTWFyICA2IDEwOjA2OjU5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1ldGhvZC5jOiBJbmNsdWRlICJzeXN0ZW0uaCIgdG8gZ2V0IHN0ZGxpYi5oLCBzdGRpby5oLAoJY3R5cGUuaCwgc3RyaW5nLmgsIGV0Yy4KCShpc3N1ZV9ucmVwZWF0cyk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24gc3dpdGNoLgoJKGNoZWNrX2J0eXBlKTogTGlrZXdpc2UuCgkocHJvY2Vzc19vdmVybG9hZF9pdGVtKTogTGlrZXdpc2UuCgoJKiBNYWtlZmlsZS5pbiAobWV0aG9kLm8pOiBEZXBlbmQgb24gc3lzdGVtLmguCgpXZWQgTWFyICA0IDIyOjI2OjUzIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogbGV4LmMgKGRvX3Njb3BlZF9pZCk6IEZpeCBwYXJlbnRoZXNpemluZy4KCldlZCBNYXIgIDQgMTI6MTE6NTMgMTk5OCAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGdldF90aW5mb19mbl9keW5hbWljKTogSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW4KCUZMQUdfUlRUSSBpcyB1bnNldCwgaW5pdGlhbGl6ZSB0eXBlIGluZm8gbWFjaGluZXJ5IGFuZCBjb250aW51ZQoJd2l0aCBGTEFHX1JUVEkgZW5hYmxlZC4KCShnZXRfdHlwZWlkKTogTGlrZXdpc2UuCgpXZWQgTWFyICA0IDExOjQ3OjU1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6ICZEOjppIGhhcyB0eXBlIEI6OiogaWYgaSBjb21lcwoJZnJvbSBCLgoKV2VkIE1hciAgNCAxMToyODowOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBEZWFsIG1vcmUgZ3JhY2VmdWxseSB3aXRoCglpbnZhbGlkIGRlY2xhcmF0aW9ucy4KClR1ZSBNYXIgIDMgMDE6Mzg6MTcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMsIGRlY2wuYywgZGVjbDIuYywgaW5pdC5jLCBydHRpLmMsIHR5cGVjay5jLCB0eXBlY2syLmMsCgljcC10cmVlLmg6IENsZWFuIHVwIG1vcmUgb2xkIG92ZXJsb2FkaW5nIGNvZGUsIG9sZCBSVFRJIGNvZGUsIGFuZAoJc29tZSBmb3JtYXR0aW5nIHF1aXJrcy4KCgkqIGNhbGwuYywgY2xhc3MuYywgY3AtdHJlZS5oLCBjdnQuYywgZGVjbC5jLCBpbml0LmMsIGxleC5jLAoJbWV0aG9kLmMsIHB0LmMsIHB0cmVlLmMsIHR5cGVjay5jOiBSZW1vdmUgc3VwcG9ydCBmb3IKCS1mbm8tYW5zaS1vdmVybG9hZGluZyBhbmQgb3ZlcmxvYWRpbmcgTUVUSE9EX0NBTExfRVhQUi4KCSogY2xhc3MuaDogUmVtb3ZlLgoJKiBNYWtlZmlsZS5pbjogQWRqdXN0LgoKCSogcHQuYyAodW5pZnkpOiBEb24ndCBhbGxvdyByZWR1Y2VkIGN2LXF1YWxzIHdoZW4gc3RyaWN0LgoKCSogY2FsbC5jLCBjbGFzcy5jLCBwdC5jLCBjcC10cmVlLmg6IFJlbW92ZSBuc3Vic3RzIHBhcm0gZnJvbQoJKnR5cGVfdW5pZmljYXRpb24qIGFuZCB1bmlmeS4KCk1vbiBNYXIgIDIgMTI6MTE6MDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZXhwbGljaXRfdGVtcGxhdGVfdHlwZSk6IFJlbW92ZSBURU1QTEFURSBrZXl3b3JkLgoJKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IEFuZCBhZGQgaXQgYmVmb3JlIHRoaXMgdXNlLgoJKHR5cGVuYW1lX3N1YjApOiBBbmQgdGhpcyB1c2UuICBBbHNvIGFkZCB1c2Ugd2l0aG91dCB0aGUga2V5d29yZC4KCSh0eXBlbmFtZV9zdWIxKTogTGlrZXdpc2UuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGUKCWFueXRoaW5nIGlmIG91ciB0eXBlIHVzZXMgdGVtcGxhdGUgcGFybXMuCgpNb24gTWFyICAyIDExOjA0OjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBEb24ndCBjYWxsIHRlbXBvcmFyeV9hbGxvY2F0aW9uIGZvciBhCgluZXN0ZWQgZnVuY3Rpb24uCgpTdW4gTWFyICAxIDIxOjA2OjM3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgbWVzcyB3aXRoIGZyaWVuZHMgaWYKCW91ciB0eXBlIHVzZXMgdGVtcGxhdGUgcGFybXMuCgpTYXQgRmViIDI4IDEyOjA2OjQ0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IFVzZSBleHBsaWNpdF90ZW1wbGF0ZV90eXBlLgoJKHR5cGVuYW1lX3N1Yik6IEFsbG93IGEgdGVtcGxhdGVfdHlwZSwgYW4gZXhwbGljaXRfdGVtcGxhdGVfdHlwZSwKCW9yIGFuIGltcGxpY2l0IHRlbXBsYXRlIHR5cGUgYXQgdGhlIGVuZC4KCSogbGV4LmMgKHl5cHJpbnQpOiBIYW5kbGUgYSBQVFlQRU5BTUUgYmVpbmcgYSBURU1QTEFURV9ERUNMLgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSB0ZW1wbGF0ZS1pZCB3aGVyZSB0aGUgbmFtZQoJaXMgYSBURU1QTEFURV9ERUNMLgoJKiBjYWxsLmMgKGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUKCWRlc3RydWN0b3IgY2FsbC4KCSogcHQuYyAodHN1YnN0X2NvcHksIE1FVEhPRF9DQUxMX0VYUFIpOiBEb24ndCBhc3N1bWUgYSBtZW1iZXIKCWRlc3RydWN0b3IgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUuCgoJKiBjcC10cmVlLmggKFRZUEVOQU1FX1RZUEVfRlVMTE5BTUUpOiBOZXcgbWFjcm8uCgkqIHBhcnNlLnkgKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IEFkZCAndGVtcGxhdGUnIGNhc2UuCgkoZXhwbGljaXRfdGVtcGxhdGVfdHlwZSk6IE5ldyBydWxlLgoJKHR5cGVuYW1lX3N1Yik6IFVzZSBpdC4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBIYW5kbGUgZ2V0dGluZyBhIHRlbXBsYXRlLWlkIGZvciBOQU1FLgoJKiBwdC5jICh0c3Vic3QpOiBMaWtld2lzZS4KCkZyaSBGZWIgMjcgMTE6MTc6NTAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoYWRkX3RvX3RlbXBsYXRlX2FyZ3MpOiBGaXggdGhpbmtvLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCBpdCBsYXRlci4KCgkqIHB0LmMgKGdldF9jbGFzc19iaW5kaW5ncyk6IEFkZCBvdXRlcl9hcmdzIHBhcm0uCgkobW9zdF9zcGVjaWFsaXplZF9jbGFzcyk6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogUGFzcyBpdC4KCShtb3JlX3NwZWNpYWxpemVkX2NsYXNzKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogR2V0IGNvbnRleHQgZnJvbSB0ZW1wbGF0ZSBpZiBub25lCgl3YXMgc3BlY2lmaWVkLgoJKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IERvbid0IGRvIGFueXRoaW5nIHdpdGggYQoJcGFydGlhbCBzcGVjaWFsaXphdGlvbi4KCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogVXNlIElTX0FHR1JfVFlQRSBpbnN0ZWFkIG9mCglBR0dSRUdBVEVfVFlQRV9QLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogTWVtYmVyIGNsYXNzIHRlbXBsYXRlcyBoYXZlIGFscmVhZHkgYmVlbgoJY2hlY2tlZCBmb3IgbmFtZSBjbGFzaGVzLgoJKiBkZWNsLmMgKHB1c2hkZWNsX3dpdGhfc2NvcGUpOiBIYW5kbGUgcHVzaGluZyBhdCBjbGFzcyBsZXZlbC4KCkZyaSBGZWIgMjcgMDI6MjU6MTYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0LCBURU1QTEFURV9ERUNMKTogU3VwcG9ydCBtZW1iZXIgY2xhc3MgdGVtcGxhdGVzLgoJKHRzdWJzdCwgKl9QQVJNKTogU3VwcG9ydCBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUgY2xhc3Nlcy4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IExvb2sgdXAgdGhlIHBhdHRlcm4gZnJvbSB0aGUKCW9yaWdpbmFsIHRlbXBsYXRlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEhhbmRsZSBnZXR0aW5nIGEgdGVtcGxhdGUgZm9yIGQxLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvcnJlY3Qgc2V0dGluZyBvZiAncHJpbWFyeScuCgkocmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwpOiBBZGQgJ2xldmVscycgcGFybS4KCShmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBTdXBwb3J0IG1lbWJlciBjbGFzcyB0ZW1wbGF0ZXMuCgkodGVtcGxhdGVfY2xhc3NfZGVwdGgpOiBIYW5kbGUgbXVsdGlwbGUgbGV2ZWxzLgoJKiBwYXJzZS55IChjb21wb25lbnRfZGVjbF8xLCBmbi5kZWYyKTogUmVtb3ZlIG1lbWJlciB0ZW1wbGF0ZSBjYXNlLgoJKGNvbXBvbmVudF9kZWNsKTogQWRkIG1lbWJlciB0ZW1wbGF0ZSBjYXNlcy4KCSogZGVjbDIuYyAoY2hlY2tfbWVtYmVyX3RlbXBsYXRlKTogV2Ugbm93IGhhbmRsZSBtZW1iZXIgdGVtcGxhdGUKCWNsYXNzZXMuCgkqIGRlY2wuYyAocHVzaHRhZyk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGVzLgoJKiBtZXRob2QuYyAoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiBEb24ndCB0b3VjaAoJSURFTlRJRklFUl9HTE9CQUxfVkFMVUUuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZik6IElmIG5hbWUgaXNuJ3QgYW4gaWRlbnRpZmllciwganVzdAoJcmV0dXJuIGl0LgoJKiBzcGV3LmMgKHl5bGV4KTogSGFuZGxlIFBUWVBFTkFNRSBsaWtlIFRZUEVOQU1FLgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogRG8gYWRqdXN0IGZvciBjb252ZXJzaW9ucyB0bwoJYW5kIGZyb20gdmlydHVhbCBiYXNlLgoKV2VkIEZlYiAyNSAwOTo1MToyOSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBHaXZlIGhhcmQgZXJyb3IgZm9yIGNvbnZlcnNpb24KCWZyb20gdmlydHVhbCBiYXNlLgoKCSogY3AtdHJlZS5oOiBUd2VhayBmb3JtYXR0aW5nLgoKV2VkIEZlYiAyNSAwMDozNTozMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogSGFuZGxlIHJlZGVjbGFyYXRpb24gZXJyb3IuCgoJKiBjcC10cmVlLmggKElERU5USUZJRVJfTkFNRVNQQUNFX1ZBTFVFKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfTkFNRVNQQUNFX0JJTkRJTkdTKTogTmV3IG1hY3JvLgoJKE5BTUVTUEFDRV9CSU5ESU5HKTogTmV3IG1hY3JvLgoJKElERU5USUZJRVJfR0xPQkFMX1ZBTFVFKTogVXNlIE5BTUVTUEFDRV9CSU5ESU5HLgoJKiAqLmM6IFVzZSB0aGVtLgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogVXNlIGlubmVybW9zdF9hcmdzLgoKCSogZGVjbC5jIChnZXRfdW5pcXVlX25hbWUpOiBUd2VhayBmcm9tIGVhcmxpZXIgaW4gdGhlIG5hbWUuCgpUdWUgRmViIDI0IDIyOjE1OjA0IDE5OTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBDUExVU19CSU5ESU5HIG5vZGUuCgkqIGNwLXRyZWUuaCAodHJlZV9iaW5kaW5nKTogTmV3IHN0cnVjdC4KCShCSU5ESU5HX1NDT1BFLCBCSU5ESU5HX1ZBTFVFKTogTmV3IG1hY3Jvcy4KCShjdXJyZW50X25hbWVzcGFjZSwgZ2xvYmFsX25hbWVzcGFjZSk6IERlY2xhcmUgZXh0ZXJuLgoJKHN0cnVjdCBsYW5nX2RlY2xfZmxhZ3MpOiBOZXcgZmllbGQgaW5fbmFtZXNwYWNlLgoJKERFQ0xfTkFNRVNQQUNFX1VTSU5HLCBERUNMX05BTUVTUEFDRV9VU0VSUyk6IE5ldyBtYWNyb3MuCgkoREVDTF9OQU1FU1BBQ0UsIFNFVF9ERUNMX05BTUVTUEFDRSk6IE5ldyBtYWNyb3MuCgkoVFJFRV9JTkRJUkVDVF9VU0lORyk6IE5ldyBtYWNyby4KCSogZGVjbDIuYyAoY3VycmVudF9uYW1lc3BhY2UsIGdsb2JhbF9uYW1lc3BhY2UpOiBEZWNsYXJlLiAgVGhlCgl2YWx1ZSBpcyBhIE5BTUVTUEFDRV9ERUNMIG5vdywgbm90IGEgVFJFRV9MSVNULgoJKGlzX25hbWVzcGFjZV9hbmNlc3RvciwgbmFtZXNwYWNlX2FuY2VzdG9yKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMuCgkoYWRkX3VzaW5nX25hbWVzcGFjZSwgYW1iaWd1b3VzX2RlY2wpOiBMaWtld2lzZS4KCShsb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogTmV3IHN1cHBvcnQgZnVuY3Rpb24gZm9yIGxvb2t1cF9uYW1lLgoJKHF1YWxpZmllZF9sb29rdXBfdXNpbmdfbmFtZXNwYWNlKTogTmV3IHN1cHBvcnQgZnVuY3Rpb24gZm9yCglkb19zY29wZWRfaWQgYW5kIGxvb2t1cF9uYW1lc3BhY2VfbmFtZS4KCShnZXRfbmFtZXNwYWNlX2lkKTogTWFyayBhcyBvYnNvbGV0ZS4KCShjdXJyZW50X25hbWVzcGFjZV9pZCk6IExpa2V3aXNlLgoJKGRvX25hbWVzcGFjZV9hbGlhcyk6IEltcGxlbWVudC4KCShkb191c2luZ19kaXJlY3RpdmUpOiBJbXBsZW1lbnQgYXMgY2FsbCB0byBhZGRfdXNpbmdfbmFtZXNwYWNlLgoJKiBkZWNsLmMgKGJpbmRpbmdfZm9yX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkocHVzaF9uYW1lc3BhY2UsIHBvcF9uYW1lc3BhY2UpOiBJbXBsZW1lbnQuCgkocHVzaF9kZWNsKTogRG9uJ3QgaW5zdGFsbCBhIEZVTkNUSU9OX0RFQ0wgaW4gdGhlIGdsb2JhbCBicmFuY2guCgkobG9va3VwX25hbWVzcGFjZV9uYW1lKTogSW1wbGVtZW50IHVzaW5nIHF1YWxpZmllZCBsb29rdXAuCgkobG9va3VwX25hbWVfcmVhbCk6IEZvciBnbG9iYWwgc2NvcGluZywgbG9va3VwIGluCglnbG9iYWxfbmFtZXNwYWNlLiAgRm9yIG5hbWVzcGFjZSBzY29waW5nLCBsb29rdXAgaW4gZ2l2ZW4KCW5hbWVzcGFjZS4gIEZvciB1bnNjb3BlZCBsb29rdXAsIGl0ZXJhdGUgb3ZlciBuYW1lc3BhY2UsCgljb25zaWRlcmluZyB1c2luZyBkaXJlY3RpdmVzLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBnbG9iYWxfbmFtZXNwYWNlLgoJKGdyb2t2YXJkZWNsKTogQnVpbGQgYXNzZW1ibGVyIG5hbWUgYXMgc3RhdGljIG5hbWUgZm9yIGdsb2JhbHMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgb2xkIG5hbWVzcGFjZSBtYW5nbGluZy4KCSh4cmVmX3RhZyk6IFdoZW4gaW5zdGFsbGluZyBhIGdsb2JhbCBiaW5kaW5nIGZvciB0aGUKCXRhZywgbWFrZSBzdXJlIHdlIGhhdmUgYW4gaWRlbnRpZmllci4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25lc3RlZF9uYW1lKTogTWFuZ2xlIG5hbWVzcGFjZXMuCgkoYnVpbGRfcXVhbGlmaWVkX25hbWUpOiBMaWtld2lzZS4KCShidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBMaWtld2lzZS4KCSogbGV4LmMgKGJ1aWxkX2xhbmdfZGVjbCk6IFNldCBuYW1lc3BhY2UgZm9yIG5ldyBkZWNsYXJhdGlvbiB0bwoJY3VycmVudF9uYW1lc3BhY2UuCgkoZG9fc2NvcGVkX2lkKTogRmluZCBnbG9iYWwgbmFtZXMgaW4gZ2xvYmFsIG9yIGN1cnJlbnQKCW5hbWVzcGFjZSwgb3IgdXNpbmcgcXVhbGlmaWVkIG5hbWVzcGFjZSBsb29rdXAsIGRlcGVuZGluZyBvbgoJY29udGV4dC4KCSogaW5pdC5jIChidWlsZF9tZW1iZXJfY2FsbCk6IFdoZW4gc2NvcGUgaXMgbmFtZXNwYWNlLCB1c2UKCWJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBpbnN0ZWFkLgoJKGJ1aWxkX29mZnNldF9yZWYpOiBXaGVuIHNjb3BlIGlzIG5hbWVzcGFjZSwgY29sbGFwc2UgcHJvY2Vzc2luZwoJdG8gbG9va3VwX25hbWVzcGFjZV9uYW1lIGluc3RlYWQuCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IFN1cHBvcnQgTkFNRVNQQUNFX0RFQ0wuCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBCaW5kIGdsb2JhbHMgdG8gY3VycmVudCBuYW1lc3BhY2UuCgkocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBMaWtld2lzZS4KCShsb29rdXBfdGFnKTogTGlrZXdpc2UuCgkobG9va3VwX25hbWVfY3VycmVudF9sZXZlbCk6IExpa2V3aXNlLgoJKHhyZWZfdGFnKTogTGlrZXdpc2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCShpZGVudGlmaWVyX3R5cGVkZWNsX3ZhbHVlKTogTGlrZXdpc2UuCgkocmVhbF95eWxleCk6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoZG9faW5saW5lX2Z1bmN0aW9uX2hhaXIpOiBMaWtld2lzZS4KCSogcGFyc2UueSAodW5zY29wZWQpOiBMaWtld2lzZS4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSogcnR0aS5jIChjYWxsX3ZvaWRfZm4pOiBMaWtld2lzZS4KCSogc2lnLmMgKGJ1aWxkX3NpZ3RhYmxlKTogTGlrZXdpc2UuCgkqIHB0cmVlLmMgKGxhbmdfcHJpbnRfeG5vZGUpOiBOZXcgZnVuY3Rpb24uCgpUdWUgRmViIDI0IDAxOjQwOjI0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgaW5zdGFudGlhdGUgaWYgcGVkYW50aWMKCWFuZCB0aGUgYXJncyB1c2UgdGVtcGxhdGUgcGFybXMuCgoJKiBwdC5jIChwdXNoX3RpbnN0X2xldmVsKTogSWYgdGhlIGluc3RhbnRpYXRpb24gdXNlcyB0ZW1wbGF0ZSBwYXJtcywKCWZhaWwgc2lsZW50bHkuCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBEbyBjYWxsIGNvbXBsZXRlX3R5cGUgZm9yIGJhc2V0eXBlcwoJdGhhdCBpbnZvbHZlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgpUdWUgRmViIDI0IDAwOjM2OjQzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAocHJvY2Vzc19pbml0X2NvbnN0cnVjdG9yKTogRml4IGxhYmVsZWQgaW5pdCBjaGVjay4KCk1vbiBGZWIgMjMgMDU6MDg6NTUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYywgY2FsbC5jLCBkZWNsLmMsIG1ldGhvZC5jLCBjcC10cmVlLmg6IFJlbW92ZSB1bnVzZWQgTkFSR1MKCWFyZ3VtZW50IHRvIHRzdWJzdCBhbmQgZnJpZW5kcy4KCgkqIHB0LmMgKHRzdWJzdCwgRlVOQ1RJT05fREVDTCk6IFRpZHkuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogSGFuZGxlIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24KCXRlbXBsYXRlcyBsaWtlIG5vbi10ZW1wbGF0ZXMuICBIYW5kbGUgZnJpZW5kIHRlbXBsYXRlcyBsaWtlIG5vcm1hbAoJZnVuY3Rpb24gdGVtcGxhdGVzLgoJKiBwdC5jICh0c3Vic3QsICpfUEFSTSk6IERvbid0IHVzZSBvcmlnX2xldmVsLgoJKGdldF9iaW5kaW5ncyk6IERvbid0IGNhbGwgYWRkX3RvX3RlbXBsYXRlX2FyZ3MuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCSh0c3Vic3QsIEZVTkNUSU9OX0RFQ0wpOiBDYWxsIGFkZF90b190ZW1wbGF0ZV9hcmdzIGFzIGFwcHJvcHJpYXRlLgoJKiBwdHJlZS5jIChwcmludF9sYW5nX3R5cGUpOiBQcmludCBpbmRleC9sZXZlbCBmb3IgdGVtcGxhdGUgcGFybXMuCgpNb24gRmViIDIzIDAyOjUyOjI5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIE1ha2UtbGFuZy5pbiAoY2MxcGx1cyk6IE5vdGUgdGhhdCBjYzFwbHVzIGRlcGVuZHMgb24KCWNwL2NwLXRyZWUuaCBhbmQgY3AvY3AtdHJlZS5kZWYuCgoJKiBjcC10cmVlLmRlZiAoVEVNUExBVEVfQ09OU1RfUEFSTSk6IFJlbW92ZS4KCShURU1QTEFURV9QQVJNX0lOREVYKTogTmV3IHRyZWUgY29kZSwgdXNlZCB0byBpbmRpY2F0ZSBhCglwb3NpdGlvbiBpbiBhIHRlbXBsYXRlIHBhcmFtZXRlciBsaXN0LgoJKiBjcC10cmVlLmggKHRlbXBsYXRlX3Bhcm1faW5kZXgpOiBOZXcgc3RydWN0dXJlLCB1c2VkIGFzIHRoZSB0cmVlCglzdHJ1Y3R1cmUgZm9yIGEgVEVNUExBVEVfUEFSTV9JTkRFWC4KCShURU1QTEFURV9QQVJNX0lEWCk6IE5ldyBtYWNyby4KCShURU1QTEFURV9QQVJNX0xFVkVMKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfUEFSTV9ERVNDRU5EQU5UUyk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1BBUk1fT1JJR19MRVZFTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1BBUk1fREVDTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RZUEVfUEFSTV9JTkRFWCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RZUEVfT1JJR19MRVZFTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RZUEVfREVDTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX0NPTlNUX0lEWCk6IFJlbW92ZS4KCShURU1QTEFURV9DT05TVF9MRVZFTCk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX0NPTlNUX1NFVF9JTkZPKTogTGlrZXdpc2UuCgkoVEVNUExBVEVfVFlQRV9TRVRfSU5GTyk6IExpa2V3aXNlLgoJKFRFTVBMQVRFX1RZUEVfSURYKTogUmVkZWZpbmUgaW4gdGVybXMgb2YgVEVNUExBVEVfUEFSTV9JTkRFWAoJbm9kZS4KCShURU1QTEFURV9UWVBFX0xFVkVMKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBDYWxsIGNvbXBfdGVtcGxhdGVfcGFybXMsIHJhdGhlciB0aGFuCglleHBhbmRpbmcgaXQgaW5saW5lLgoJKGR1cGxpY2F0ZV9kZWNscyk6IElmIHR3byB0ZW1wbGF0ZSBkZWNsYXJhdGlvbnMgYXJlIGJlaW5nIG1lcmdlZCwKCXRoZW4gdGhlaXIgVEVNUExBVEVfSU5GT3Mgc2hvdWxkIGJlIG1lcmdlZCBhcyB3ZWxsLgoJKGdyb2tmbmRlY2wpOiBTYXZlIHRlbXBsYXRlLWlkIGluZm9ybWF0aW9uIHdoZW4gZGVjbGFyaW5nIGEgZnJpZW5kCgl3aXRoIGV4cGxpY2l0IHRlbXBsYXRlIGFyZ3VtZW50cy4gIFBhc3MgYXJndW1lbnRzIHRvCgljaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiB2aWEgY29ycmVjdCBjb252ZW50aW9uOyBhdCBzb21lCglwb2ludCBjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbiBjaGFuZ2VkLCBidXQgdGhlc2UgY2FsbC1zaXRlcwoJZGlkIG5vdC4KCShncm9rZGVjbGFyYXRvcik6IFRpZHkgdXAgc2xpZ2h0bHkuCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBUaWR5IHVwIHNsaWdodGx5LiAgRG9uJ3QgYXNzdW1lIHRoYXQKCXR3byB0ZW1wbGF0ZSBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBERUNMX0FTU0VNQkxFUl9OQU1FIHRoZSBzYW1lLAoJc2luY2UgdGhlIG5hbWVzIGFyZSBub3QgeWV0IG1hbmdsZWQuCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IFVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQgb2YKCVRFTVBMQVRFX0NPTlNUX1BBUk0uCgkoZHVtcF9leHByKTogTGlrZXdpc2UuICBVc2UgdGhlIFRFTVBMQVRFX1BBUk1fREVDTCB0byBnZXQgYXQgdGhlCglkZWNsIGZvciBhIG5vbi10eXBlIHBhcmFtZXRlciwgcmF0aGVyIHRoYW4gcHJpbnRpbmcgYDx0cGFybSAuLi4+Jy4KCSogZnJpZW5kLmMgKGlzX2ZyaWVuZCk6IEhhbmRsZSBURU1QTEFURV9ERUNMIGZyaWVuZHMuCgkoZG9fZnJpZW5kKTogRGVhbCB3aXRoIHRlbXBsYXRlIGZyaWVuZHMuCgkqIGxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBDYWxsCgltYXliZV9iZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZywgcmF0aGVyIHRoYW4KCWNvbmRpdGlvbmFsbHkgY2FsbGluZyBiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZy4KCShwcm9jZXNzX25leHRfaW5saW5lKTogTGlrZXdpc2UuICBDYWxsCgltYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcsIHJhdGhlciB0aGFuCgljb25kaXRpb25hbGx5IGNhbGxpbmcgZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLgoJKGRvX3BlbmRpbmdfZGVmYXJncyk6IExpa2V3aXNlLgoJKGRvX2lkZW50aWZpZXIpOiBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mCglURU1QTEFURV9DT05TVF9QQVJNLgoJKiBtZXRob2QuYyAoYnVpbGRfbWFuZ2xlZF90ZW1wbGF0ZV9wYXJtX2luZGV4KTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogVXNlIGl0LgoJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBMaWtld2lzZS4KCSogcHQuYyAoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogQWxsb3cgZnJpZW5kIGRlY2xhcmF0aW9ucy4KCSh0ZW1wbGF0ZV9jbGFzc19kZXB0aCk6IE5ldyBmdW5jdGlvbi4KCShpc19tZW1iZXJfdGVtcGxhdGUpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZS4uLgoJKGlzX21lbWJlcl9vcl9mcmllbmRfdGVtcGxhdGUpOiBOZXcgZnVuY3Rpb24uCgkoZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogUmVuYW1lLCBhbmQgbW9kaWZ5LCB0byBiZWNvbWUuLi4KCShtYXliZV9lbmRfbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpLgoJKGJ1aWxkX3RlbXBsYXRlX3Bhcm1faW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkocmVkdWNlX3RlbXBsYXRlX3Bhcm1fbGV2ZWwpOiBOZXcgZnVuY3Rpb24uCgkocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogTW9kaWZ5IHRvIHVzZSBidWlsZF90ZW1wbGF0ZV9wYXJtX2luZGV4LgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IERlYWwgd2l0aCBmcmllbmQgdGVtcGxhdGVzLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkIG9mCglURU1QTEFURV9DT05TVF9QQVJNLgoJKHRzdWJzdF9mcmllbmRfZnVuY3Rpb24pOiBOZXcgZnVuY3Rpb24uCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBHZW5lcmF0ZSB0aGUgREVDTF9GUklFTkRMSVNUCglmb3IgYSBuZXcgaW5zdGFudGlhdGlvbiBieSB1c2luZyB0c3Vic3RfZnJpZW5kX2Z1bmN0aW9uIHJhdGhlcgoJdGhhbiBqdXN0IHRzdWJzdC4KCSh0c3Vic3QpOiBEb24ndCB0c3Vic3QgaW50byBhIHR5cGUgd2hpY2ggaXMgYSBURU1QTEFURV9ERUNMLgoJVXNlIFRFTVBMQVRFX1BBUk1fSU5ERVggaW5zdGVhZCBvZiBURU1QTEFURV9DT05TVF9QQVJNLCBhbmQgdGhlCglhcHByb3ByaWF0ZSBuZXcgbWFjcm9zLiAgVXNlIHJlZHVjZV90ZW1wbGF0ZV9wYXJtX2xldmVsIHRvCglnZW5lcmF0ZSBsb3dlci1sZXZlbCB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLiAgSGFuZGxlIHRzdWJzdCdpbmcgaW50bwoJVEVNUExBVEVfREVDTFMgdGhhdCBkZWNsYXJlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk1TLiAgRG9uJ3QgZm9yZ2V0Cgl0byB0c3Vic3QgdGhlIERFQ0xfQ09OVEVYVCBhbmQgREVDTF9DTEFTU19DT05URVhUIG9mIG5ld2x5IGNyZWF0ZWQKCXRlbXBsYXRlcy4gIFNpbWlsYXJseSBmb3IgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMgZm9yIGEgbmV3Cgl0ZW1wbGF0ZS4KCSh0c3Vic3RfY29weSk6IFRpZHkgdXAgc2xpZ2h0bHkuICBVc2UgVEVNUExBVEVfUEFSTV9JTkRFWCBpbnN0ZWFkCglvZiBURU1QTEFURV9DT05TVF9QQVJNLiAgSGFuZGxlIFRZUEVfREVDTHMgYnkgdHN1YnN0aW5nIGludG8gdGhlbS4KCSh1bmlmeSk6IFVzZSBURU1QTEFURV9QQVJNX0lOREVYIGluc3RlYWQgb2YgVEVNUExBVEVfQ09OU1RfUEFSTS4KCShnZXRfYmluZGluZ3MpOiBDYWxsIGFkZF90b190ZW1wbGF0ZV9hcmdzIGlmIG5lY2Vzc2FyeS4KCShpbnN0YW50aWF0ZV9kZWNsKTogSGFuZGxlIGluc3RhbnRpYXRpb25zIG9mIGZyaWVuZCB0ZW1wbGF0ZXMuCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGRfMSk6IERvbid0IHRyZWF0IHRoZSBUWVBFX0ZJRUxEUyBvZiBhCglURU1QTEFURV9UWVBFX1BBUk0gYXMgYSBsaXN0IG9mIGZpZWxkczsgaXQncyBub3QhCgkqIHNwZXcuYyAoeXlsZXgpOiBEbyBhIGxpdHRsZSBtYW51YWwgY29uc3RhbnQgcHJvcGFnYXRpb24gdG8KCWNsYXJpZnkgdGhlIGNvZGUuCgpTdW4gRmViIDIyIDE5OjUzOjI5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGVycm9yLmM6IEluY2x1ZGUgc3lzL3R5cGVzLmguCgpUaHUgRmViIDE5IDE0OjQ5OjA5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1ldGhvZC5jIChidWlsZF9tYW5nbGVkX25hbWUpOiBTdGFydCBDUFAgZGlyZWN0aXZlcyBpbiBjb2x1bW4gemVyby4KClRodSBGZWIgMTkgMTA6MzY6NDggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBTb3JyeSBhYm91dCBub24tdHJpdmlhbAoJbGFiZWxlZCBpbml0aWFsaXplcnMuCgkqIHBhcnNlLnkgKGluaXRsaXN0KTogUmUtZW5hYmxlIGxhYmVsZWQgaW5pdGlhbGl6ZXJzLgoKVGh1IEZlYiAxOSAxMDoxNTo1NSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWRkIGEgbmV3IHBhcmFtZXRlciwgaXNfdG1wbF9wYXJtLAoJYWxsIGNhbGxlcnMgY2hhbmdlZC4gIFJlbHkgb24gdGhlIG5ldyBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBhcmcKCWJlaW5nIGEgVFJFRV9MSVNUIHdoZW4gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgYXJlIHdvcmtpbmcgaW5zaWRlCgl0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuICBDbGVhbiB1cCBpc190eXBlIHRlc3QuCgpUaHUgRmViIDE5IDEwOjA0OjEyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBQcmVzZXJ2ZSBUUkVFX0NPTlNUQU5ULgoJKiB0eXBlY2syLmMgKGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3ApOiBBbGxvdyBjb252ZXJzaW9ucwoJYmV0d2VlbiBwb2ludGVycyBhbmQgcmVmZXJlbmNlcy4KCjE5OTgtMDItMTkgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfdW5hcnlfb3ApOiBPbmx5IHdhcm4gYWJvdXQgaW5jci9kZWNyIGEgcG9pbnRlcgoJaWYgcGVkYW50aWMgfHwgd2Fybl9wb2ludGVyX2FyaXRoLgoKVGh1IEZlYiAxOSAwOTozNzoyMSAxOTk4ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi51c2MuZWR1PgoKCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCjE5OTgtMDItMTggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKHN0cmlwX2F0dHJzKTogUmVtb3ZlIGRlY2wuCgoxOTk4LTAyLTE4ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IENhbGwgbWVyZ2VfbWFjaGluZV9kZWNsX2F0dHJpYnV0ZXMuCglVcGRhdGUgb2xkZGVjbCdzIGF0dHJpYnV0ZXMgdG9vLgoJKHN0cmlwX2F0dHJzKTogUmVtb3ZlIGZ1bmN0aW9uLgoJKiB0eXBlY2suYyAoY29tbW9uX3R5cGUpOiBDYWxsIG1lcmdlX21hY2hpbmVfdHlwZV9hdHRyaWJ1dGVzLgoKVHVlIEZlYiAxNyAxNDowNzo1MiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChpbml0ZGNsMF9pbm5hcmRzKTogTmV3IGdyYW1tYXIgc3ltYm9sLgoJKG5vbW9kc19pbml0ZGVjbHMsIG5vbW9kc19pbml0ZGNsMCk6IENoYW5nZSB0eXBlIGZyb20gaXR5cGUgdG8KCW5vbmUsIHNpbmNlIHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgbmV2ZXIgdXNlZC4KCShwYXJzZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKGRhdGFkZWYpOiBSZW1vdmUgcmVkdW5kYW50IGFjdGlvbnMuCgkoaW5pdGRjbDAsIG5vdHlwZV9pbml0ZGNsMCwgbm9tb2RzX2luaXRkY2wwKTogVXNlIGluaXRkY2wwX2lubmFyZHMuCgkqIHBhcnNlLmM6IFJlZ2VuZXJhdGVkLgoKVHVlIEZlYiAxNyAxMTo1NDoxNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IFVzZSBnZXRkZWNscygpIHRvIGNoZWNrIGZvciBkZWNsLgoKU2F0IEZlYiAxNCAxMTo1MDo1MSAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlLWxhbmcuaW4gKERFTUFOR0xFUl9JTlNUQUxMX05BTUUsIERFTUFOR0xFUl9DUk9TU19OQU1FKTogTmV3CgltYWNyb3MuCgkoYysrLmluc3RhbGwtY29tbW9uKTogSW5zdGFsbCBjKytmaWx0IHByb3Blcmx5IGFzIG5hdGl2ZSBvciBhcyBjcm9zcwoJdmFyaWFudC4KCShjKysudW5pbnN0YWxsKTogQWRkIGMrK2ZpbHQuCgpGcmkgRmViIDEzIDE0OjU1OjM3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCBtdWx0aS1sZXZlbCBwdHIgY29udmVyc2lvbnMuCgpGcmkgRmViIDEzIDE0OjA2OjIyIDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogUHJvcGFnYXRlIGVycm9yX21hcmtfbm9kZSB1cC4KCkZyaSBGZWIgMTMgMTM6MjQ6MzIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBJZiB0aGUgY29uZGl0aW9uIGlzbid0IGEgZGVjbGFyYXRpb24sCglzdGFydCB0aGUgY29udHJvbGxlZCBibG9jayBhZnRlciB0aGUgdGVzdC4KCkZyaSBGZWIgMTMgMDI6MjY6MTAgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENvbnZlcnQgYnVpbHRpbiBhYnMsIGxhYnMgYW5kIGZhYnMgdG8KCXRyZWUtY29kZXMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZS1lbmFibGUgYWJzLCBsYWJzIGFuZCBmYWJzIGFzCglidWlsdGlucy4KCkZyaSBGZWIgMTMgMDE6MzY6NDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogQSBCQVNFX0NPTlYgcmVwbGFjZXMgYW4gUlZBTFVFX0NPTlYuCgpGcmkgRmViIDEzIDAwOjIxOjU5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaDogQWRkIGFjY2Vzc19wcm90ZWN0ZWRfdmlydHVhbF9ub2RlLgoJKiBjbGFzcy5jIChpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBJbml0aWFsaXplIGl0LgoJKiBkZWNsLmMgKHhyZWZfYmFzZXR5cGVzKTogVXNlIGl0LgoJKiBwYXJzZS55IChiYXNlX2NsYXNzX2FjY2Vzc19saXN0KTogTGlrZXdpc2UuCgoJKiBNYWtlLWxhbmcuaW4gKERFTUFOR0xFUl9QUk9HKTogQWRkICQoZXhlZXh0KS4KCShjKysuaW5zdGFsbC1jb21tb24pOiBJbnN0YWxsIGMrK2ZpbHQuCgpUaHUgRmViIDEyIDEyOjQ2OjUxIDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc2hhZG93X3RhZyk6IEdpdmUgZXJyb3IgZm9yIHR5cGVkZWYtaW5nIGJ1aWx0LWluIHR5cGVzLgoKV2VkIEZlYiAxMSAyMzoyODowNSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogVXNlIGNvbXB0eXBlcyB3aGVuIGNvbXBhcmluZwoJVFlQRV9NQUlOX1ZBUklBTlRTIHRvIGhhbmRsZSBub24tY2Fub25pY2FsIGFycmF5L2luZGV4IHR5cGVzLgoKV2VkIEZlYiAxMSAxNjo0MjowNCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiB0cmVlLmMgKGlzX292ZXJsb2FkZWRfZm4pOiBVc2UgcmVhbGx5X292ZXJsb2FkZWRfZm4uCgkocmVhbGx5X292ZXJsb2FkZWRfZm4pOiBNb3ZlIGNoZWNrIGhlcmUgZnJvbSBpc19vdmVybG9hZGVkX2ZuLgoJKGdldF9maXJzdF9mbik6IFVzZSByZWFsbHlfb3ZlcmxvYWRlZF9mbiBhbmQgaXNfb3ZlcmxvYWRlZF9mbi4KCldlZCBGZWIgMTEgMTU6NTQ6MTggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMpOiBUeXBlLWNoZWNrIHBvaW50ZXItdG8tbWVtYmVyCgljb252ZXJzaW9ucy4KCk1vbiBGZWIgIDkgMjI6MjM6MzEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3AtdHJlZS5oIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBSZXR1cm4gdGhlIGRlY2wgcGFzc2VkIGluLCBvciBhbgoJZXF1aXZhbGVudCBkdXBsaWNhdGUuCgkqIGRlY2wuYyAocHVzaHRhZyk6IFVzZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcHVzaF90ZW1wbGF0ZV9kZWNsLgoJKGR1cGxpY2F0ZV9kZWNscyk6IFdoZW4gZHVwbGljYXRpbmcgYSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiwgbWVyZ2UKCXRoZSBERUNMX1RFTVBMQVRFX1JFU1VMVHMgYXMgd2VsbC4KCShtYWtlX2ltcGxpY2l0X3R5cGVuYW1lKTogRG9uJ3QgdHJ5IHRvIGRpdmUgaW50byB0eXBlbmFtZSB0eXBlcyB0bwoJZmluZCBhIGNvbnRleHQgZm9yIG1ha2luZyBhIG5ldyBpbXBsaWNpdCB0eXBlbmFtZS4KCShzdGFydF9kZWNsKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBwdXNoX3RlbXBsYXRlX2RlY2wuCgkoZ3Jva2RlY2xhcmF0b3IpOiBDb21wbGFpbiBhYm91dCBkZWNsYXJhdGlvbnMgbGlzdCBgY29uc3Qgb3BlcmF0b3IKCWludCcuICBTaW5jZSB3ZSBkb24ndCBjb3JyZWN0bHkgaGFuZGxlIGluLWNsYXNzIGluaXRpYWxpemF0aW9ucyBvZgoJbm9uLXN0YXRpYyBkYXRhIG1lbWJlcnMsIGNvbXBsYWluIGFib3V0IHRoaXMgKG5vdyBpbGxlZ2FsKQoJcHJhY3RpY2UuICBJc3N1ZSBhbiBlcnJvciBmb3IgaW5pdGlhbGl6YXRpb25zIG9mIG5vbi1jb25zdCBzdGF0aWNzCglzaW5jZSB0aGF0IGlzIGlsbGVnYWwgYXMgd2VsbCwgYW5kIHNpbmNlIHdlIGRvbid0IGhhbmRsZSB0aGF0IGNhc2UKCWNvcnJlY3RseSBlaXRoZXIuCgkoc3RhcnRfZnVuY3Rpb24pOiBVc2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHB1c2hfdGVtcGxhdGVfZGVjbC4KCShzdGFydF9tZXRob2QpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogTGlrZXdpc2UuICBTaW5jZSB0aGUgY2hhbmdlIHRvCglncm9rZGVjbGFyYXRvciBlbnN1cmVzIHRoYXQgYWxsIGluaXRpYWxpemVkIGZpZWxkcyBhcmUgaW4gZmFjdAoJc3RhdGljLCByZW1vdmUgYSByZWR1bmRhbnQgdGVzdCBmb3IgVFJFRV9QVUJMSUMuCgkqIHBhcnNlLnkgKGluaXRsaXN0KTogRGlzYWJsZSBsYWJlbGVkIGluaXRpYWxpemVycyBzaW5jZSB0aGV5IGRvCglub3Qgd29yayBhcyBwZXIgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBzaW5jZSB0aGV5IGRvIG5vdCB1c2UgdGhlCglzYW1lIHN5bnRheCBhcyB0aGUgQyBmcm9udCBlbmQuCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IFJldHVybiB0aGUgZGVjbCBwYXNzZWQgaW4sIG9yIGFuCgllcXVpdmFsZW50IGR1cGxpY2F0ZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBXaGVuIHNlYXJjaGluZyBpbiBhIG5lc3RlZCBjb250ZXh0LAoJdXNlIHRoZSByaWdodCBhcmd1bWVudHMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IEhhbmRsZSB0aGUgREVDTF9JTklUSUFMIGZvciBhIENPTlNUX0RFQ0wuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogQXNzaWduIHRoZSBjb3JyZWN0IHR5cGUgdG8gdGhlCglyZXN1bHQgb2YgYnVpbGRfdmZuX3JlZi4KClR1ZSBGZWIgMTAgMjM6NTY6NDYgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogRml4IHR5cG8uCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBBbGxvdyBvbGQtc3R5bGUgc3BlY2lhbGl6YXRpb24KCW9mIGNsYXNzIHRlbXBsYXRlIG1lbWJlcnMuCgpUdWUgRmViIDEwIDIwOjM2OjUyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCQkJICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIERFQ0xfVVNFX1RFTVBMQVRFIGluc3RlYWQKCXdoZW4gZGVjaWRpbmcgdG8gb3ZlcnJpZGUgREVDTF9BU1NFTUJMRVJfTkFNRS4KClR1ZSBGZWIgMTAgMTU6MzA6NTUgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEB0b3JwZWRvLnRvLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2Zfb3B0aW9ucyk6IEFkZCAtZnNxdWFuZ2xlIHRvIG9wdGlvbiBwcm9jZXNzaW5nIGxpc3QuCgkqIGNwLXRyZWUuaCAoZmxhZ19kb19zcXVhbmdsaW5nKTogQWRkIGRlY2xhcmF0aW9uLgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mc3F1YW5nbGUgYW5kIC1mbm8tc3F1YW5nbGUuCgkqIG1ldGhvZC5jOiBBZGQgbWFjcm9zIGFuZCBzdGF0aWMgdmFyaWFibGVzIGZvciBzcXVhbmdsaW5nLgoJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBSZW5hbWUgdG8gYnVpbGRfbWFuZ2xlZF9uYW1lLCBhZGQgbG9naWMgZm9yIEIKCWNvbXByZXNzaW9uLCBhbmQgc3BsaXQgaW50byBwcm9jZXNzX21vZGlmaWVycyBhbmQKCXByb2Nlc3Nfb3ZlcmxvYWRfaXRlbS4KCShwcm9jZXNzX21vZGlmaWVycyk6IE5ldyBmdW5jdGlvbiwgdG8gaGFuZGxlIGNvbnN0YW50LCByZWZlcmVuY2UsCglhbmQgcG9pbnRlciB0eXBlcy4KCShwcm9jZXNzX292ZXJsb2FkX2l0ZW0pOiBOZXcgZnVuY3Rpb24sIGhhbmRsZXMgaXNzdWUgb2YgdHlwZSBjb2Rlcy4KCShidWlsZF9vdmVybG9hZF9uYW1lKTogTmV3IGZ1bmN0aW9uLCBzdGFydCBzcXVhbmdsaW5nIGFuZCBjYWxsCglidWlsZF9tYW5nbGVkX25hbWUuCgkoQUxMT0NBVEVfVFlQRVZFQywgREVBTExPQ0FURV9UWVBFVkVDKTogUmVtb3ZlIG1hY3JvIGFuZCBleHBhbmQgaW5saW5lLgoJKHN0YXJ0X3NxdWFuZ2xpbmcpOiBOZXcgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBzcXVhbmdsaW5nIHN0cnVjdHMuCgkoZW5kX3NxdWFuZ2xpbmcpOiBOZXcgZnVuY3Rpb24gdG8gZGVzdHJveSBzcXVhbmdsaW5nIHN0cnVjdHMuCgkobnJlcGVhdHMpOiBSZW5hbWUgdmFyaWFibGUgdG8gTnJlcGVhdHMuCgkoaXNzdWVfbnJlcGVhdHMpOiBOZXcgZnVuY3Rpb24gZm9yIGlzc3VpbmcgJ24nIHR5cGUgcmVwZWF0cy4KCShjaGVja19rdHlwZSk6IE5ldyBmdW5jdGlvbiB0byBjaGVjayBmb3IgdHlwZSBLIG5hbWUgY29tcHJlc3Npb24uCgkoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUpOiBBZGQgYSBjaGVjayBmb3IgSyBuYW1lIGNvbXByZXNzaW9uLgoJKGJ1aWxkX3F1YWxpZmllZF9uYW1lKTogQWRkIGEgY2hlY2sgZm9yIEsgbmFtZSBjb21wcmVzc2lvbiBhbmQgZG9uJ3QKCXVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIHdoZW4gc3F1YW5nbGluZyBpcyBvbi4KCShjaGVja19idHlwZSk6IE5ldyBmdW5jdGlvbiwgY2hlY2tzIGZvciBCIHR5cGUgY29tcHJlc3Npb24uCgkoYnVpbGRfc3RhdGljX25hbWUsIGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IEluaXRpYXRlIHNxdWFuZ2xpbmcuCgkoYnVpbGRfdHlwZW5hbWVfb3ZlcmxvYWQsIGJ1aWxkX292ZXJsb2FkX3dpdGhfdHlwZSk6IEluaXRpYXRlCglzcXVhbmdsaW5nCgpTdW4gRmViICA4IDIzOjQ3OjM4IDE5OTggIHNjb3R0IHNueWRlciAgPHNzc0BkMGxpbnV4MDEuZm5hbC5nb3Y+CgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IEF2b2lkIG5hbWUgYnVmZmVyIG92ZXJmbG93LgoKU2F0IEZlYiAgNyAxNjo0ODo1NCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogQ2FsbCBjcF9maW5pc2hfZGVjbCBmb3IgdmFycyBldmVuIGlmIHdlCglkb24ndCBkZWZpbmUgdGhlbSB5ZXQuCgoJKiBwYXJzZS55IChub21vZHNfaW5pdGRjbDApOiBBZGQgY29uc3RydWN0b3JfZGVjbGFyYXRvciBjYXNlLgoKRnJpIEZlYiAgNiAyMTozMjoyNSAxOTk4ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogY29uZmlnLWxhbmcuaW4gKGRpZmZfZXhjbHVkZXMpOiBVc2UgYmFzZW5hbWUgb25seS4KClRodSBGZWIgIDUgMTk6MTA6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdGluZm8yLmNjOiBBZGQgdGluZm8gZm9yIHNpZ25lZCBjaGFyLgoKVGh1IEZlYiAgNSAxNDozODoyMyAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBzZWFyY2guYyAoY29tcHV0ZV9hY2Nlc3MpOiBIYW5kbGUgcHJvdGVjdGVkIGNvbnN0cnVjdG9ycyBpbiBkZXJpdmVkCgljbGFzc2VzIGFzIGFjY2Vzc2libGUuCgpXZWQgRmViICA0IDAxOjI2OjQ5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIsIFBDQ19TVEFUSUNfU1RSVUNUX1JFVFVSTiBjb2RlKToKCUNhbGwgY29udmVydF9mcm9tX3JlZmVyZW5jZSBzb29uZXIuCgpUdWUgRmViICAzIDIzOjUwOjUyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGN2dC5jIChvY3BfY29udmVydCk6IE9idGFpbiB0aGUgY29uc3RhbnQgdmFsdWVzIGZyb20gY29uc3RhbnQKCWRlY2xzIGV2ZW4gaWYgdGhlIGRlc3RpbmF0aW9uIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIHR5cGUgb2YgdGhlCglkZWNsLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBNYWtlIHN1cmUgdGhhdCBzdGF0aWMgaW5saW5lcyB3aXRoCglkZWZpbml0aW9ucyBhcmUgbm90IG1hcmtlZCBERUNMX0VYVEVSTkFMIGJlZm9yZSByZXR1cm5pbmcuCgpUdWUgRmViICAzIDIyOjQzOjQyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYzogTG9zZSBhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUuCgkobG9va3VwX25hbWVfcmVhbCk6IExpa2V3aXNlLgoJKiBwYXJzZS55OiBMb3NlIHByb2Nlc3NpbmdfdGVtcGxhdGVfYXJnLCB0ZW1wbGF0ZV9hcmcxLgoJKHByaW1hcnkpOiBMaWtld2lzZS4KCSogc3Bldy5jICh5eWxleCk6IFNldCBsYXN0aWRkZWNsIGZvciBQVFlQRU5BTUVzLCB0b28uCgpUdWUgRmViICAzIDIyOjA0OjAxIDE5OTggIEtyaWFuZyBMZXJkc3V3YW5ha2lqICA8bGVyZHN1d2FAc2NmLnVzYy5lZHU+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBGaXggdHlwZSBvZiBkZWZhdWx0IGFyZ3VtZW50cyBmb3IgdGVtcGxhdGUKCXRlbXBsYXRlIHBhcmFtZXRlcnMgYW5kIG5vbnR5cGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IEhhbmRsZSBpbnZhbGlkIGRlZmF1bHQgdGVtcGxhdGUKCXRlbXBsYXRlIGFyZ3VtZW50cyBoZXJlLgoKCSogcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IFVzZSB0ZW1wbGF0ZV9hcmcgaW5zdGVhZCBvZiBQVFlQRU5BTUUKCWZvciBkZWZhdWx0IHRlbXBsYXRlIHRlbXBsYXRlIGFyZ3VtZW50LgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBNZXJnZSBkZWZhdWx0IHRlbXBsYXRlIGFyZ3VtZW50Cgljb2Rlcy4gIENhbiB0cmVhdCBSRUNPUkRfVFlQRSBhcyB0ZW1wbGF0ZSBuYW1lIGlmIGl0IGlzIGltcGxpY2l0bHkKCWNyZWF0ZWQuICBGaXggYXJndW1lbnQgaW5kZXggaW4gZXJyb3IgbWVzc2FnZS4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IE1lcmdlIHRlbXBsYXRlIGFyZ3VtZW50IGNvbXBhcmlzb24gY29kZXMgaW4KCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0gYW5kIFJFQ09SRF9UWVBFLgoKVHVlIEphbiAgNiAwMTo0Mjo0NCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGxleC5jIChmaWxlX25hbWVfbm9uZGlyZWN0b3J5KTogQWxzbyBjaGVjayBmb3IgJy8nLgoKTW9uIEZlYiAgMiAxMToyNDoyMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwYXJzZS55IChwcmltYXJ5KTogRGVhbCB3aXRoIHN0YXRlbWVudC1leHByZXNzaW9ucyBpbgoJdGVtcGxhdGVzLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IEhhbmRsZSBCSU5EX0VYUFIuCgkqIHRyZWUuYyAobWFwY2FyKTogTGlrZXdpc2UuCgoJKiBjYWxsLmMgKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGVfcmVhbCk6IFBhc3MgZXh0cmEgcGFyYW1ldGVyIHRvCglmbl90eXBlX3VuaWZpY2F0aW9uLgoJKiBjcC10cmVlLmggKGZuX3R5cGVfdW5pZmljYXRpb24pOiBBZGQgcGFyYW1ldGVyLgoJKiBwdC5jIChmbl90eXBlX3VuaWZpY2F0aW9uKTogQWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHRvIGRlYWwgd2l0aAoJc3RhdGljIG1lbWJlciBmdW5jdGlvbnMuCgkoZ2V0X2JpbmRpbmdzKTogRGVhbCB3aXRoIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zLgoKCSogY3AtdHJlZS5oIChERUNMX05PTlNUQVRJQ19NRU1CRVJfRlVOQ1RJT05fUCk6IE5ldyBtYWNyby4KCShyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IERlY2xhcmUuCgkqIGRlY2wuYyAocmV2ZXJ0X3N0YXRpY19tZW1iZXJfZm4pOiBSZW1vdmUgZGVjbGFyYXRpb24uICBDaGFuZ2UKCWxpbmthZ2UgZnJvbSBpbnRlcm5hbCB0byBleHRlcm5hbC4KCShjcF9maW5pc2hfZGVjbCk6IERlYWwgd2l0aCB2aXJ0dWFsIGZ1bmN0aW9ucyBpbiBjbGFzc2VzIGxvY2FsIHRvCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgZm9yZ2V0IHRvIGVtaXQgaW5jcmVtZW50L2RlY3JlbWVudAoJZXhwcmVzc2lvbnMgaW4gaW5pdGlhbGl6ZXJzIGZvciBmaWxlLXNjb3BlIHZhcmlhYmxlcy4KCSogcGFyc2UueSAodHlwZW5hbWVfc3ViMik6IElmIHRoZSB0eXBlbmFtZSBkb2Vzbid0IG5hbWVzIGEKCXRlbXBsYXRlLCByYXRoZXIgdGhhbiBhIHR5cGUsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCgkqIHB0LmMgKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucyBvZgoJc3RhdGljIG1lbWJlciBmdW5jdGlvbnMuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIG9mZnNldCByZWZlcmVuY2VzIHRvIGxpc3RzIG9mCgltZW1iZXIgZnVuY3Rpb25zLgoJKiBzZWFyY2guYyAobm90ZV9kZWJ1Z19pbmZvX25lZWRlZCk6IERvbid0IGNyYXNoIHdoZW4gaGFuZGVkIGEKCXR5cGUgd2hpY2ggaXMgYmVpbmcgZGVmaW5lZC4KCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBEb24ndCBjcmFzaCB3aGVuIGhhbmRlZCBOVUxMX1RSRUU7Cgl0aGF0IGNhbiBoYXBwZW4gd2l0aCBzb21lIGlsbGVnYWwgY29kZS4KCk1vbiBGZWIgIDIgMDA6NTc6MzggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2FsbC5jICh1c2VyX2hhcnNobmVzcyk6IEluaXRpYWxpemUgYGNvZGUnIHRvIDAuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBJbml0aWFsaXplIGBjYW5kaWRhdGVzJywgYGNwJyBhbmQgYGxlbicgdG8gMC4KCShudWxsX3B0cl9jc3RfcCk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgJiYgd2l0aGluIHx8LgoJKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCSh6X2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBJbml0aWFsaXplIGBhcmdzJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZSBmb3IgYG1lbV9hcmdzJy4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZSBmb3IgYG1lbV9hcmdsaXN0Jy4gIEFkZCBgcmV0dXJuJyBmcm9tCglkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24gc3dpdGNoLgoKCSogY2xhc3MuYyAoYnVpbGRfdnRhYmxlX2VudHJ5KTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZAoJYW1iaWd1b3VzIGBlbHNlJy4KCShidWlsZF9jbGFzc19pbml0X2xpc3QpOiBMaWtld2lzZS4KCShmaW5pc2hfc3RydWN0XzEpOiBJbml0aWFsaXplIGB3aWR0aCcgdG8gMC4KCShpbnN0YW50aWF0ZV90eXBlKTogSW5pdGlhbGl6ZSBgbmFtZScgdG8gTlVMTF9UUkVFLiAgQWRkCglleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX2FnZ3IpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cwoJYGVsc2UnLgoKCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogRWxpbWluYXRlIHVudXNlZCBwYXJhbWV0ZXIsIGFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKHJlY29yZF9idWlsdGluX3R5cGUpOiBJbml0aWFsaXplIGB0ZGVjbCcgdG8gTlVMTF9UUkVFLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBgdmJfb2ZmX2lkZW50aWZpZXInIHRvIE5VTExfVFJFRS4KCShjcF9maW5pc2hfZGVjbCk6IEluaXRpYWxpemUgYHR0eXBlJyB0byBOVUxMX1RSRUUuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kICYmIHdpdGhpbiB8fC4gIEFkZAoJZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCgkoZ3Jva3Bhcm1zKTogSW5pdGlhbGl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoJKHhyZWZfdGFnKTogUmVtb3ZlIHVudXNlZCBsYWJlbCBganVzdF9yZXR1cm4nLgoJKGZpbmlzaF9lbnVtKTogSW5pdGlhbGl6ZSBgbWlubm9kZScgYW5kIGBtYXhub2RlJyB0byBOVUxMX1RSRUUuCgkoZmluaXNoX2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBgY29uZCcgYW5kIGB0aGVuY2xhdXNlJyB0byBOVUxMX1RSRUUuCgkoaGFja19pbmNvbXBsZXRlX3N0cnVjdHVyZXMpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQKCXVzZWQgYXMgdHJ1dGggdmFsdWUuCgoJKiBkZWNsMi5jIChjb2VyY2VfZGVsZXRlX3R5cGUpOiBIaWRlIGRlZmluaXRpb24gb2YgYGUzJy4KCgkqIGVycm9yLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPi4KCShkdW1wX2V4cHIpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGknIHRvIHNpemVfdC4gIFJlbW92ZSB1bnVzZWQKCWxhYmVsIGBlcnJvcicuCgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGQnLgoJKGV4cGFuZF90aHJvdyk6IExpa2V3aXNlIGZvciBgbGFiZWwnLgoKCSogZnJpZW5kLmMgKGFkZF9mcmllbmRzKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMKCWBlbHNlJy4KCgkqIGluaXQuYyAoc29ydF9tZW1iZXJfaW5pdCk6IEluaXRpYWxpemUgYGxhc3RfZmllbGQnIHRvIE5VTExfVFJFRS4KCShzb3J0X2Jhc2VfaW5pdCk6IExpa2V3aXNlIGZvciBgYmluZm8nLgoJKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlIGZvciBgcnZhbCcuCgkoYnVpbGRfbWVtYmVyX2NhbGwpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQgdXNlZCBhcwoJdHJ1dGggdmFsdWUuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCShidWlsZF9uZXcpOiBJbml0aWFsaXplIGBuZWx0cycgdG8gTlVMTF9UUkVFLiAgSW5pdGlhbGl6ZQoJYG9sZF9pbW1lZGlhdGVfc2l6ZV9leHBhbmQnIHRvIDAuCgkoYnVpbGRfbmV3XzEpOiBJbml0aWFsaXplIGBuZWx0cycgYW5kIGBhbGxvY19ub2RlJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfdmVjX2RlbGV0ZV8xKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgYmxvY2snLgoJKGV4cGFuZF92ZWNfaW5pdCk6IEluaXRpYWxpemUgYGl0eXBlJyB0byBOVUxMX1RSRUUuCgoJKiBsZXguYzogSW5jbHVkZSA8c3RyaW5ncy5oPiBpZiB3ZSBkb24ndCBoYXZlIDxzdHJpbmcuaD4uICBQcm90ZWN0CglkZWNsYXJhdGlvbiBvZiBgaW5kZXgnIGFuZCBgcmluZGV4JyB3aXRoIGF1dG9jb25mIG1hY3Jvcy4KCShyZWluaXRfcGFyc2VfZm9yX2V4cHIpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwoJYGxvb2tfZm9yX3NlbWljb2xvbicgYW5kIGBsb29rX2Zvcl9sYnJhYycuCgkoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogSW5pdGlhbGl6ZSBgYXJncycgdG8gTlVMTF9UUkVFLgoJKHJlYWRlc2NhcGUpOiBJbml0aWFsaXplIGBmaXJzdGRpZycgdG8gMC4KCShyZWFsX3l5bGV4KTogQWRkIHBhcmVudGhlc2VzIGFyb3VuZCBhc3NpZ25tZW50IHVzZWQgYXMgdHJ1dGggdmFsdWUuCgoJKiBtZXRob2QuYzogSW5jbHVkZSA8c3RyaW5ncy5oPiBpZiB3ZSBkb24ndCBoYXZlIDxzdHJpbmcuaD4uCglQcm90ZWN0IGRlY2xhcmF0aW9uIG9mIGBpbmRleCcgd2l0aCBhdXRvY29uZiBtYWNyby4KCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBgZWxzZScuCglJbml0aWFsaXplIGB0eXBlJyB0byBOVUxMX1RSRUUuCgkoc3RydWN0c3ApOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpZCcuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkCglhbWJpZ3VvdXMgYGVsc2UnLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEluaXRpYWxpemUgYHRlbXBsYXRlJyB0byBOVUxMX1RSRUUuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBuYW1lJyBhbmQgYGUnLgoJKHRzdWJzdCk6IExpa2V3aXNlIGZvciBgaScuICBJbml0aWFsaXplIGBsYXN0JyB0byBOVUxMX1RSRUUuCgkoZG9fcG9wbGV2ZWwpOiBJbml0aWFsaXplIGBzYXZlZF93YXJuX3VudXNlZCcgdG8gMC4KCSh0eXBlX3VuaWZpY2F0aW9uKTogUmVtb3ZlIHVudXNlZCB2YXJhYmxlIGBwYXJtJy4KCSh1bmlmeSk6IExpa2V3aXNlIGZvciBgaicuCgoJKiByZXBvLmMgKGluaXRfcmVwbyk6IEFkZCBwYXJlbnRoZXNlcyBhcm91bmQgYXNzaWdubWVudCB1c2VkIGFzCgl0cnV0aCB2YWx1ZS4KCShmaW5pc2hfcmVwbyk6IFJlbW92ZSB1bnVzZWQgdmFyYWJsZSBgcCcuCgoJKiBzZWFyY2guYyAoZ2V0X2JpbmZvKTogSW5pdGlhbGl6ZSBgdHlwZScgdG8gTlVMTF9UUkVFLgoJKGdldF9iYXNlX2Rpc3RhbmNlKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogSW5pdGlhbGl6ZSBgcnZhbF9iaW5mb19oJywgYHR5cGUnLCBgYmFzZXR5cGVfcGF0aCcKCWFuZCBgbmV3X3YnIHRvIE5VTExfVFJFRS4KCShsb29rdXBfZm5maWVsZHMpOiBMaWtld2lzZSBmb3IgYHJ2YWxfYmluZm9faCcuCgkoYnJlYWR0aF9maXJzdF9zZWFyY2gpOiBBZGQgcGFyZW50aGVzZXMgYXJvdW5kIGFzc2lnbm1lbnQgdXNlZCBhcwoJdHJ1dGggdmFsdWUuCgkoZ2V0X3RlbXBsYXRlX2Jhc2UpOiBJbml0aWFsaXplIGB0eXBlJyB0byBOVUxMX1RSRUUuCgoJKiBzaWcuYyAoYXBwZW5kX3NpZ25hdHVyZV9maWVsZHMpOiBJbml0aWFsaXplIGBsYXN0X21mcHRyJyB0bwoJTlVMTF9UUkVFLgoJKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IExpa2V3aXNlIGZvcgoJYGxhc3RfcmhzX2ZpZWxkJywgYHBmbicgYW5kIGB2dF9vZmYnLgoJKGJ1aWxkX3NpZ3RhYmxlKTogTGlrZXdpc2UgZm9yIGBpbml0Jy4KCgkqIHRyZWUuYyAoYnJlYWtfb3V0X2NhbGxzKTogSW5pdGlhbGl6ZSBgdDInIHRvIE5VTExfVFJFRS4KCShwcm9wYWdhdGVfYmluZm9fb2Zmc2V0cyk6IExpa2V3aXNlIGZvciBgZGVsdGEnLgoJKGhhc2hfdHJlZV9jb25zKTogSW5pdGlhbGl6ZSBoYXNoY29kZSB0byAwLgoJKGNhbl9mcmVlKTogTGlrZXdpc2UgZm9yIGBzaXplJy4KCShjcF90cmVlX2VxdWFsKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMgYGVsc2UnLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfc2VxdWVuY2UpOiBIaWRlIHByb3RvdHlwZS4KCShjb21tb25fdHlwZSk6IEFkZCBleHBsaWNpdCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCShjb21wX3RhcmdldF90eXBlcyk6IExpa2V3aXNlLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEluaXRpYWxpemUgYGN0eXBlcHRyJyB0byBOVUxMX1RSRUUuCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogQWRkIGV4cGxpY2l0IGJyYWNlcyB0byBhdm9pZCBhbWJpZ3VvdXMKCWBlbHNlJy4KCShjb252ZXJ0X2FyZ3VtZW50cyk6IEluaXRpYWxpemUgYGNhbGxlZF90aGluZycgdG8gMC4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IEluaXRpYWxpemUgYHNhdmV3JyBhbmQgYHNhdmVlJyB0byAwLgoKCSogdHlwZWNrMi5jIChpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBJbml0aWFsaXplIGBlcnJtc2cnIHRvIDAuCgkoZGlnZXN0X2luaXQpOiBJbml0aWFsaXplIGBvbGRfdGFpbF9jb250ZW50cycgdG8gTlVMTF9UUkVFLgoJKGJ1aWxkX3hfYXJyb3cpOiBMaWtld2lzZSBmb3IgYGxhc3RfcnZhbCcuCgoJKiB4cmVmLmMgKEdOVV94cmVmX2RlY2wpOiBJbml0aWFsaXplIGBjbHMnIHRvIDAuCgpTdW4gRmViICAxIDEyOjQ1OjM0IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIHNldF9zaXpldHlwZS4KCSogZGVjbDIuYyAoc2l6ZXR5cGUpOiBEb24ndCBkZWNsYXJlLgoJKiB0eXBlY2suYyAoY19zaXplb2YpOiBDb252ZXJ0IHJlc3VsdCBvZiAqX0RJVl9FWFBSIHRvIHNpemV0eXBlLgoJKGNfc2l6ZW9mX25vd2FybiwgYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbXBvbmVudF9hZGRyLCB1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IExpa2V3aXNlLgoJKiBydHRpLmMgKGV4cGFuZF9jbGFzc19kZXNjKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGdldF92ZmllbGRfb2Zmc2V0KTogTGlrZXdpc2UuCgpUaHUgSmFuIDI5IDEwOjM5OjMwIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IE1vdmUgY2hlY2sgZm9yIGlzX292ZXJsb2FkZWRfZm4KCWVhcmx5IHRvIGF2b2lkIGJvZ3VzIGVycm9yLiAgSGFuZGxlIG92ZXJsb2FkZWQgZnVuY3Rpb24KCW5hbWVzIHByb3ZpZGVkIGFzIHRlbXBsYXRlIGFyZ3VtZW50cyBjb3JyZWN0bHkuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogRG9uJ3QgbWlzaGFuZGxlIG92ZXJsb2FkZWQgZnVuY3Rpb25zIHdoZW4KCWRlYWxpbmcgd2l0aCB0ZW1wbGF0ZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IElzc3VlIGFuIGVycm9yIG1lc3NhZ2UsIHJhdGhlciB0aGFuCgljcmFzaGluZywgd2hlbiB0aGUgVFlQRV9ERUNMIHByb3ZpZGVkIGlzIG5vdCBhIHRlbXBsYXRlIHR5cGUuCgpXZWQgSmFuIDI4IDIzOjE0OjQ0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBEb24ndCBqdXN0IHJldHVybiBhIGtub3duIHR5cGUgaWYKCWl0J3Mgd3JvbmcuCgpXZWQgSmFuIDI4IDExOjA0OjA3IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBSZW1vdmUgaGFuZGxpbmcgb2YgRlVOQ1RJT05fREVDTAoJc2luY2UgdGhhdCBjb2RlIGNvdWxkIG5ldmVyIGJlIHJlYWNoZWQuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBBdm9pZCBhYm9ydGluZyBpbiB0aGUgbWlkc3Qgb2YgcHJpbnRpbmcgYW4KCWVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gaWxsZWdhbCB0ZW1wbGF0ZSBkZWNsYXJhdGlvbi4KCgkqIHBhcnNlLnkgKHN0cnVjdHNwKTogUHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgcmF0aGVyIHRoYW4gY3Jhc2hpbmcsCgl3aGVuIGEgY2xhc3MtaGVhZCBkb2VzIG5vdCBuYW1lIGEgY2xhc3MuCgoJKiBwdC5jIChjb252ZXJ0X25vbnR5cGVfYXJndW1lbnQpOiAgQWxsb3cgUkVBTF9UWVBFIGFuZCBDT01QTEVYX1RZUEUKCXRlbXBsYXRlIGFyZ3VtZW50cyBhcyBhIGcrKyBleHRlbnNpb24uCgoJKiBjcC10cmVlLmRlZiAoQUxJR05PRl9FWFBSKTogTmV3IHRyZWUgY29kZS4KCSogZGVjbDIuYyAoZ3Jva19hbGlnbm9mKTogSWYgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsLCBqdXN0IHN0b3JlCgl0aGUgZXhwcmVzc2lvbi4KCSogdHlwZWNrLmMgKGNfYWxpZ25vZik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IEhhbmRsZSBBTElHTk9GX0VYUFIuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiB0cmVlLmMgKGNwX3RyZWVfZXF1YWwpOiBMaWtld2lzZS4KCSogcHQuYyAodXNlc190ZW1wbGF0ZV9wYXJtcyk6IENvcnJlY3RseSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYQoJU0laRU9GX0VYUFIvQUxJR05PRl9FWFBSIHVzZXMgdGVtcGxhdGUgcGFyYW1ldGVycyBzbyB0aGF0IGNvbnN0YW50Cglmb2xkaW5nIGNhbiBiZSBkb25lLgoKCSogY3AtdHJlZS5oIChncm9rX2VudW1fZGVjbHMpOiBSZW1vdmUgdHlwZSBwYXJhbWV0ZXIuCgkqIGRlY2wuYyAoZ3Jva19lbnVtX2RlY2xzKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGdyb2tfeF9jb21wb25lbnRzKTogQ2FsbCBncm9rX2VudW1fZGVjbHMKCXVuY29uZGl0aW9uYWxseSwgc2luY2UgaXQgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vCgljdXJyZW50X2xvY2FsX2VudW0uICBVc2UgdGhlIG5ldyBjYWxsaW5nIHNlcXVlbmNlLgoJKiBwdC5jICh0c3Vic3RfZW51bSk6IFVzZSB0aGUgbmV3IGNhbGxpbmcgc2VxdWVuY2UgZm9yCglncm9rX2VudW1fZGVjbHMuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogTWFrZSBtZW1iZXIgZnVuY3Rpb25zIG9mIGxvY2FsIGNsYXNzZXMKCWluIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGhhdmUgY29tZGF0IGxpbmthZ2UgaGVyZS4uLgoJKGdyb2tkZWNsYXJhdG9yKTogUmF0aGVyIHRoYW4gaGVyZS4KCldlZCBKYW4gMjggMTA6NTU6NDcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY29udmVydF9ub250eXBlX2FyZ3VtZW50KTogVXNlIGRlY2xfY29uc3RhbnRfdmFsdWUuCgpUdWUgSmFuIDI3IDE2OjQyOjIxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZV9yZWFsKTogTmV3IGZ1bmN0aW9uLgoJKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBVc2UgaXQuCgkoYWRkX3RlbXBsYXRlX2NvbnZfY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkoam91c3QpOiBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvIG1vcmVfc3BlY2lhbGl6ZWQuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBIYW5kbGUgYSBzaW5nbGUgRlVOQ1RJT05fREVDTC4KCShpc19sb2NhbF9jbGFzcyk6IFJlbW92ZS4KCShmaW5pc2hfc3RydWN0KTogQ2hlY2sgVElfUEVORElOR19TUEVDSUFMSVpBVElPTl9GTEFHLgoJKiBjcC10cmVlLmggKGlzX2xvY2FsX2NsYXNzKTogUmVtb3ZlLgoJKHBlcmZvcm1fYXJyYXlfdG9fcG9pbnRlcl9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoZmluaXNoX21lbWJlcl90ZW1wbGF0ZV9kZWNsKTogQWRkLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogUmV0dXJuIGEgdHJlZSwgbm90IGFuIGludC4KCShtb3JlX3NwZWNpYWxpemVkKTogVGFrZSBhZGRpdGlvbmFsIGFyZ3VtZW50LgoJKGdldF9iaW5kaW5ncyk6IExpa2V3aXNlLgoJKFRJX1BFTkRJTkdfU1BFQ0lBTElaQVRJT05fRkxBRyk6IE5ldyBtYWNyby4KCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IFVzZSBjb21wX3B0cl90dHlwZXMuCgkocGVyZm9ybV9hcnJheV90b19wb2ludGVyX2NvbnZlcnNpb24pOiBSZW1vdmUuCgkqIGRlY2wuYyAoc2F2ZWRfc2NvcGUpOiBBZGQgcHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbiwKCXByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbiBmaWVsZHMuCgkobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIHRoZW0uCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSB0aGVtLgoJKGdyb2tmbmRlY2wpOiBVc2UgbmV3IHJldHVybiB2YWx1ZSBmcm9tCgljaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbi4KCShzdGFydF9kZWNsKTogRG9uJ3QgY2hlY2sgZmxhZ19ndWlkaW5nX2RlY2xzIGJlZm9yZSBwdXNoaW5nCglkZWNscy4KCShjcF9maW5pc2hfZGVjbCk6IFJlbW92ZSBwcmV2aW91cyAoYm9ndXMpIGNoYW5nZS4KCShncm9rX2RlY2xhcmF0b3IpOiBVc2UgZGVjbF9mdW5jdGlvbl9jb250ZXh0IHJhdGhlciB0aGFuCglpc19sb2NhbF9jbGFzcy4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvIGdldF9iaW5kaW5ncy4KCShidWlsZF9leHByX2Zyb21fdHJlZSk6IExldCBidWlsZF94X2NvbXBvbmVudF9yZWYgY2hlY2sKCXZhbGlkaXR5IG9mIGFyZ3VtZW50cyByYXRoZXIgdGhhbiBkb2luZyBpdCBoZXJlLgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogUmVtb3ZlIGNvZGUgZm9vbGluZyB3aXRoCglwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uLCBwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24KCWZsYWdzLCBhcyB0aGF0IGlzIG5vdyBkb25lIGluIHttYXliZV9wdXNoX3RvcCxwb3BfZnJvbX1fdG9wX2xldmVsLgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IE1hbmdsZSBsb2NhbCBjbGFzc2VzIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMgY29ycmVjdGx5LgoJKiBwYXJzZS55IChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBNb3ZlIHRvIHB0LmMuCgkqIHB0LmMgKGZpbmlzaF9tZW1iZXJfdGVtcGxhdGVfZGVjbCk6IE1vdmVkIGhlcmUgZnJvbSBwYXJzZS55LgoJKHByaW50X2NhbmRpZGF0ZXMpOiBOZXcgZnVuY3Rpb24uCgkoZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uKTogQ2hhbmdlIGludGVyZmFjZS4gIFByb3Blcmx5IGxvb2sgZm9yCgltb3N0IHNwZWNpYWxpemVkIHZlcnNpb25zIG9mIHRlbXBsYXRlIGNhbmRpZGF0ZXMuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBGdWxseSBwcm9jZXNzIGV4cGxpY2l0CglpbnN0YW50aWF0aW9ucy4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBBdm9pZCBsb29raW5nIGF0IENMQVNTVFlQRSBmaWVsZHMgaW4KCUZVTkNUSU9OX0RFQ0xTLgoJKGRldGVybWluZV9vdmVybG9hZGVkX2Z1bmN0aW9uKTogUmVtb3ZlLgoJKGNvbnZlcnRfbm9udHlwZV9hcmd1bWVudCk6IENoYW5nZSBuYW1lIGZyb20KCWNvbnZlcnRfbm9udHlwZV9wYXJhbWV0ZXIuICBVc2UgZGV0ZXJtaW5lX292ZXJsb2FkZWRfZnVuY3Rpb24KCWluc3RlYWQgb2YgaW5zdGFudGlhdGVfdHlwZS4KCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUpOiBIYW5kbGUgdHlwZSBjb250ZXh0cyBhcyB3ZWxsIGFzCglmdW5jdGlvbiBjb250ZXh0cy4KCShjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogTGlrZXdpc2UuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkobW9yZV9zcGVjaWFsaXplZCk6IFRha2UgZXhwbGljdCB0ZW1wbGF0ZSBhcmd1bWVudHMgYXMgYQoJcGFyYW1ldGVyLgoJKG1vc3Rfc3BlY2lhbGl6ZWQpOiBMaWtld2lzZS4KCShnZXRfYmluZGluZ3MpOiBMaWtld2lzZS4gIENoZWNrIHRoYXQgcmV0dXJuIHR5cGVzIG1hdGNoIGJlZm9yZQoJcHJvY2xhaW1pbmcgYSBmdW5jdGlvbiBhIG1hdGNoLgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IFJlbW92ZSBjb2RlIHNlYXJjaGluZyBmb3IgZnVuY3Rpb24gdG8KCWluc3RhbnRpYXRlOyB0aGF0IGlzIG5vdyBkb25lIGluIGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLgoJKGFkZF9tYXliZV90ZW1wbGF0ZSk6IFBhc3MgZXh0cmEgYXJndW1lbnQgdG8gZ2V0X2JpbmRpbmdzLgoJKiB0cmVlLmMgKHJlYWxseV9vdmVybG9hZGVkX2ZuKTogVXNlIGlzX292ZXJsb2FkZWRfZm4gdG8gc2ltcGxpZnkKCWltcGxlbWVudGF0aW9uLgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IENoZWNrIGZvciBpbnZhbGlkIGFyZ3VtZW50cy4KClR1ZSBKYW4gMjcgMDE6NDQ6MDIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhwci5jIChjcGx1c19leHBhbmRfZXhwciwgQUdHUl9JTklUX0VYUFIpOiBEb24ndCBjaGVjayB0aGF0CglyZXR1cm5fdGFyZ2V0IGFuZCBjYWxsX3RhcmdldCBhcmUgZXF1aXZhbGVudC4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IEp1c3QgYWNjZXB0IGZ1bmN0aW9uIHBhcm1zIHRoYXQKCWRvbid0IHVzZSBhbnkgdGVtcGxhdGUgcGFybXMuCgpTdW4gSmFuIDI1IDAzOjMwOjAwIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBXaGVuIGJhaWxpbmcgb24gYSBjb21kYXQgdmFyaWFibGUsIGFsc28KCXVuc2V0IERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4uCgoJKiBwYXJzZS55ICh0eXBlbmFtZV9zdWIqKTogRml4IHN0ZDo6LgoKU2F0IEphbiAyNCAxMjoxMzo1NCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBGaXggdHlwZSBkZWZhdWx0IHRlbXBsYXRlIGFyZ3MuCgkoZHVtcF90eXBlKTogSGFuZCBURU1QTEFURV9ERUNMIG9mZiB0byBkdW1wX2RlY2wuCgpGcmkgSmFuIDIzIDE4OjM0OjM3IDE5OTggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogbGV4LmMgKERJUl9TRVBBUkFUT1IpOiBEZWZpbmUgdG8gYmUgJy8nIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuCgkoZmlsZV9uYW1lX25vbmRpcmVjdG9yeSk6IFVzZS4KCldlZCBKYW4gMjEgMTA6Mjk6NTcgMTk5OCAgS3JpYW5nIExlcmRzdXdhbmFraWogIDxsZXJkc3V3YUBzY2YudXNjLmVkdT4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IERvbid0IGFjY2VzcyBlbGVtZW50cyBvZiBBUkdMSVNUCgl0aGF0IGFyZSBub3QgcmVhbGx5IHByZXNlbnQuICBTdWJzdGl0dXRlIGRlZmF1bHQgYXJndW1lbnRzIGluCgl0ZW1wbGF0ZSB0ZW1wbGF0ZSBhcmd1bWVudHMuICBDb3JyZWN0bHkgY29udmVydCBURU1QTEFURV9ERUNMIHRvCglURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGNvbXBfdGVtcGxhdGVfYXJncyk6IFRFTVBMQVRFX0RFQ0wgYW5kIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0KCWFyZSBubyBsb25nZXIgdHJlYXRlZCBzcGVjaWFsbHkgaGVyZS4KCSogcGFyc2UueSAodGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IEZpeCBjb3B5IGVycm9yLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogV2FybiBhYm91dCBtaXNzaW5nIGB0eXBlbmFtZScgZm9yIG5lc3RlZAoJdHlwZSBjcmVhdGVkIGZyb20gdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogcGFyc2UueSAoYmFkX3Bhcm0pOiBMaWtld2lzZQoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKHB1c2hfbmVzdGVkX2NsYXNzKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuZGVmIChURU1QTEFURV9URU1QTEFURV9QQVJNKTogTmV3IHRyZWUgY29kZS4KCSogY3AtdHJlZS5oIChERUNMX1RFTVBMQVRFX1RFTVBMQVRFX1BBUk1fUCk6IE5ldyBtYWNyby4KCShjb3B5X3RlbXBsYXRlX3RlbXBsYXRlX3Bhcm0pOiBEZWNsYXJlLgoJKiBkZWNsLmMgKGFyZ19sb29raW5nX2Zvcl90ZW1wbGF0ZSk6IE5ldyB2YXJpYWJsZS4KCShsb29rdXBfbmFtZV9yZWFsKTogSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCglUcnkgdG8gcmV0dXJuIFRFTVBMQVRFX0RFQ0wgb3IgVEVNUExBVEVfVEVNUExBVEVfUEFSTQoJbm9kZSBpZiBhcmdfbG9va2luZ19mb3JfdGVtcGxhdGUgaXMgbm9uemVyby4KCShwdXNoZGVjbCk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGdyb2tfb3BfcHJvcGVydGllcywgeHJlZl90YWcsIHhyZWZfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgVEVNUExBVEVfREVDTC4KCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkqIGVycm9yLmMgKGR1bXBfdHlwZSk6IEFkZCBURU1QTEFURV9ERUNMIGFuZCBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKGR1bXBfdHlwZV9wcmVmaXgsIGR1bXBfdHlwZV9zdWZmaXgpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCShkdW1wX2RlY2wpOiBIYW5kbGUgdW5uYW1lZCB0ZW1wbGF0ZSB0eXBlIHBhcmFtZXRlcnMuCglIYW5kbGUgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCShkdW1wX2Z1bmN0aW9uX25hbWUpOiBIYW5kbGUgdGVtcGxhdGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCSogaW5pdC5jIChpc19hZ2dyX3R5cGVkZWYsIGlzX2FnZ3JfdHlwZSwgZ2V0X2FnZ3JfZnJvbV90eXBlZGVmKToKCUhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfdGVtcGxhdGVfcGFybV9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF90ZW1wbGF0ZV9wYXJtX25hbWVzKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkoYnVpbGRfb3ZlcmxvYWRfbmVzdGVkX25hbWUsIGJ1aWxkX292ZXJsb2FkX25hbWUpOgoJSGFuZGxlIFRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkqIHBhcnNlLnkgKG1heWJlX2lkZW50aWZpZXIpOiBOZXcgbm9udGVybWluYWwuCgkodGVtcGxhdGVfdHlwZV9wYXJtKTogVXNlIGl0LgoJKHRlbXBsYXRlX3RlbXBsYXRlX3Bhcm0sIHRlbXBsYXRlX2FyZzEpOiBOZXcgbm9udGVybWluYWwuCgkodGVtcGxhdGVfcGFybSk6IEFkZCB0ZW1wbGF0ZV90ZW1wbGF0ZV9wYXJtIHJ1bGVzLgoJKHRlbXBsYXRlX2FyZyk6IFNldCBwcm9jZXNzaW5nX3RlbXBsYXRlX2FyZy4KCSh0ZW1wbGF0ZV9hcmcxKTogUnVsZXMgbW92ZWQgZnJvbSB0ZW1wbGF0ZV9hcmcuCgkocHJpbWFyeSwgbm9ubmVzdGVkX3R5cGUpOiBTZXQgYXJnX2xvb2tpbmdfZm9yX3RlbXBsYXRlIGlmIHdlIGFyZQoJcHJvY2Vzc2luZyB0ZW1wbGF0ZSBhcmd1bWVudHMuCgkqIHB0LmMgKGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogSGFuZGxlIHRlbXBsYXRlIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zLCBjb21wX3RlbXBsYXRlX2FyZ3MpOiBMaWtld2lzZS4KCShtYW5nbGVfY2xhc3NfbmFtZV9mb3JfdGVtcGxhdGUsIGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgVEVNUExBVEVfREVDTCBhbmQKCVRFTVBMQVRFX1RFTVBMQVRFX1BBUk0uCgkoY3VycmVudF90ZW1wbGF0ZV9hcmdzKTogSGFuZGxlIFRFTVBMQVRFX0RFQ0wuCgkodHN1YnN0LCB0c3Vic3RfY29weSwgdW5pZnkpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogc2VhcmNoLmMgKGRmc193YWxrLCBkZnNfcmVjb3JkX2luaGVyaXRhbmNlKToKCUhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoJKiB0cmVlLmMgKGNvcHlfdGVtcGxhdGVfdGVtcGxhdGVfcGFybSk6IE5ldyBmdW5jdGlvbi4KCShtYXBjYXIpOiBIYW5kbGUgVEVNUExBVEVfVEVNUExBVEVfUEFSTS4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IEhhbmRsZSBURU1QTEFURV9URU1QTEFURV9QQVJNLgoKTW9uIEphbiAxOSAyMjo0MDowMyAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBEb24ndCBhbGxvdyBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2Ygc3RhdGljCglkYXRhIG1lbWJlcnMuCgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgdXNlci1kZWZpbmVkCgl0ZW1wbGF0ZSBjb252ZXJzaW9uIG9wZXJhdG9ycyBjb3JyZWN0bHkuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElzc3VlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlCglvYmplY3QgaW4gYSBDT01QT05FTlRfUkVGIGlzIGEgVEVNUExBVEVfREVDTC4KCgkqIHR5cGVjay5jIChpbmNvbXBsZXRlX3R5cGVfZXJyb3IpOiBIYW5kbGUgVEVNUExBVEVfVFlQRV9QQVJNcy4KCgkqIGNsYXNzLmMgKGlzX2xvY2FsX2NsYXNzKTogTmV3IGZ1bmN0aW9uLgoJKiBjcC10cmVlLmggKGlzX2xvY2FsX2NsYXNzKTogRGVjbGFyZSBpdC4KCShsYXN0X3RyZWUpOiBMaWtld2lzZS4KCShiZWdpbl90cmVlKTogTGlrZXdpc2UuCgkoZW5kX3RyZWUpOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogQ2hlY2sgZm9yIE5VTEwgd2hlcmUgbmVjZXNzYXJ5LgoJQ29uc2lkZXIgRlVOQ1RJT05fREVDTFMgdG8gZGVjbGFyZSBvYmplY3RzIHdpdGggdG9wLWxldmVsIGJpbmRpbmcsCgl3aGVuIGNhbGxpbmcgbWFrZV9kZWNsX3J0bC4KCShncm9rZGVjbGFyYXRvcik6IEdpdmUgbWVtYmVycyBvZiBsb2NhbCBjbGFzc2VzIGludGVybmFsIGxpbmthZ2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBSZW1vdmUgZGVjbGFyYXRpb24gb2YgbGFzdF90cmVlLgoJKGZpbmlzaF9mdW5jdGlvbik6IFNldCBmbGFnX2tlZXBfaW5saW5lX2Z1bmN0aW9ucyBhcm91bmQgY2FsbCB0bwoJcmVzdF9vZl9jb21waWxhdGlvbiBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBhIG1lbWJlciBmdW5jdGlvbiBpbiBhCglsb2NhbCBjbGFzcy4KCShzdGFydF9tZXRob2QpOiBDYWxsIHB1c2hfdGVtcGxhdGVfZGVjbCBmb3IgbWVtYmVyIGZ1bmN0aW9ucyBvZgoJbG9jYWwgY2xhc3NlcyBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMuCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IERvbid0IGdpdmUgZXh0ZXJuYWwgbGlua2FnZSB0bwoJaW5zdGFudGlhdGlvbnMgb2YgdGVtcGxhdGVzIHdpdGggaW50ZXJuYWwgbGlua2FnZS4KCSogcGFyc2UueSAobGFzdF90cmVlKTogUmVtb3ZlIGRlY2xhcmF0aW9uLgoJKHRlbXBsYXRlX3R5cGUpOiBQYXNzIGV4dHJhIHBhcmFtZXRlciB0byBsb29rdXBfdGVtcGxhdGVfY2xhc3MuCgkoc2VsZl90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCgkoc3RydWN0c3ApOiBNb3ZlIGNhbGwgdG8gcmVzZXRfc3BlY2lhbGl6YXRpb24gaW50byBsZWZ0X2N1cmx5LgoJKGxlZnRfY3VybHkpOiBDYWxsIHJlc2V0X3NwZWNpYWxpemF0aW9uLCBhbmQgYmVnaW5fdHJlZS4KCSogcHQuYyAoc2F2ZWRfdHJlZXMpOiBOZXcgdmFyaWFibGUuCgkobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogQ2hhbmdlIHByb3RvdHlwZS4gIFVzZQoJYWRkaXRpb25hbCBmdW5jdGlvbiBjb250ZXh0IHRvIG5hbWUgbG9jYWwgY2xhc3NlcyBpbiB0ZW1wbGF0ZXMKCWNvcnJlY3RseS4KCShjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogUGFzcyB0aGUgY29udGV4dC4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBIYW5kbGUgbG9jYWwgY2xhc3NlcyBhbmQgdGVtcGxhdGVzLCBhbmQKCW1lbWJlciBmdW5jdGlvbnMgZm9yIHN1Y2ggY2xhc3Nlcy4KCShjb252ZXJ0X25vbnR5cGVfcGFyYW1ldGVyKTogRml4IGhhbmRsaW5nIG9mIHBvaW50ZXItdG8tbWVtYmVyCgljb25zdGFudHMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSGFuZGxlIGxvY2FsIGNsYXNzZXMgaW4gdGVtcGxhdGVzLgoJKHRzdWJzdCk6IExpa2V3aXNlLiAgRG9uJ3QgYXNzdW1lIHRoYXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbnMKCWhhdmUgZXh0ZXJuYWwgbGlua2FnZTsgcGF5IGF0dGVudGlvbiB0byB0aGUgdGVtcGxhdGUgZGVjbGFyYXRpb24uCgkobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoJKGJlZ2luX3RyZWUpOiBOZXcgZnVuY3Rpb24uCgkoZW5kX3RyZWUpOiBMaWtld2lzZS4KCgkqIGRlY2wuYyAoeHJlZl9iYXNldHlwZXMpOiBEb24ndCBjYWxsIGNvbXBsZXRlX3R5cGUgZm9yIGJhc2V0eXBlcwoJdGhhdCBpbnZvbHZlIHRlbXBsYXRlIHBhcmFtZXRlcnM7IHRoYXQgY2FuIGxlYWQgdG8gaW5maW5pdGUKCXJlY3Vyc2lvbiB1bm5lY2Vzc2FyaWx5LgoKCSogcHQuYyAocmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBEbyBub3QgcmVnaXN0ZXIgc3BlY2lhbGl6YXRpb25zCgl0aGF0IGFyZW4ndCByZWFkeSB0byBiZSByZWdpc3RlcmVkIHlldC4KCShjaGVja19leHBsaWNpdF9zcGVjaWFsaXphdGlvbik6IEhhbmRsZSBleHBsaWNpdCBzcGVjaWFsaXphdGlvbiBvZgoJY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4KCShidWlsZF90ZW1wbGF0ZV9kZWNsKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hfdGVtcGxhdGVfZGVsYyk6IEhhbmRsZSBvdXQtb2YtY2xhc3Mgc3BlY2lhbGl6YXRpb25zIG9mCgltZW1iZXIgdGVtcGxhdGVzLgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBTZXQgdXAgdGhlIHRlbXBsYXRlCglpbmZvcm1hdGlvbiBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlIHNwZWNpYWxpemF0aW9uLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IEZpeCB0aGlua28uCgkodHN1YnN0KTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucyBvZiBtZW1iZXIgdGVtcGxhdGVzIGNvcnJlY3RseS4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IFJlbW92ZSBjYWxscyB0bwoJY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24gZnJvbSBoZXJlLgoJKGZpbmlzaF9zdHJ1Y3QpOiBBbmQgaW5zZXJ0IHRoZW0gaGVyZS4KCSogY3AtdHJlZS5oIChwZXJmb3JtX3F1YWxpZmljYXRpb25fY29udmVyc2lvbnMpOiBOZXcgZnVuY3Rpb24uCgkocGVyZm9ybV9hcnJheV90b19wb2ludGVyX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShiZWdpbl9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoZW5kX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBSZW5hbWVkIGZyb20KCWRldGVybWluZV9leHBsaWNpdF9zcGVjaWFsaXphdGlvbi4KCShjb21wX3RlbXBsYXRlX3Bhcm1zKTogTmV3IGZ1bmN0aW9uLgoJKHByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IE5ldyB2YXJpYWJsZS4KCSogY3Z0LmMgKHBlcmZvcm1fcXVhbGlmaWNhdGlvbl9jb252ZXJzaW9ucyk6IE5ldyBmdW5jdGlvbi4KCShwZXJmb3JtX2FycmF5X3RvX3BvaW50ZXJfY29udmVyc2lvbik6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbnNpZGVyIHRlbXBsYXRlIGZ1bmN0aW9ucwoJYWxpa2UgdW5sZXNzIHRoZXkgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXJzLiAgUmVmaW5lIGhhbmRsaW5nIG9mCglpbnN0YW50aWF0aW9uL3NwZWNpYWxpemF0aW9uIG1pc21hdGNoZXMuCgkoc3RhcnRfZGVjbCk6IERvbid0IGNhbGwgcHVzaGRlY2wgZm9yIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucywKCXNpbmNlIHRoZXkgZG9uJ3QgYWZmZWN0IG92ZXJsb2FkaW5nLgoJKHN0YXJ0X2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkoZ3Jva2ZuZGVjbCk6IENhbGwgY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24gYSBsaXR0bGUgbGF0ZXIuCglEb24ndCBjYWxsIGR1cGxpY2F0ZV9kZWNscyBmb3IgbWVtYmVybSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBEb24ndCB1cGRhdGUgdGVtcGxhdGVfY291bnQgZm9yIGNsYXNzZXMgdGhhdCBhcmUKCXRoZW1zZWx2ZXMgc3BlY2lhbGl6YXRpb25zLiAgUmVtb3ZlIHVzZSBvZiBgMicgYXMgcGFyYW1ldGVyIHRvCglncm9rZm5kZWNsIHNpbmNlIHRoYXQgdmFsdWUgaXNuJ3QgdXNlZC4KCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFNhdmUgYW5kIHJlc3RvcmUKCXByb2Nlc3NpbmdfZXhwbGljaXRfaW5zdGFudGlhdGlvbiBhcm91bmQgY2FsbHMgdG8gZ3Jva2ZpZWxkLgoJKiBwYXJzZS55IChmaW5pc2hfbWVtYmVyX3RlbXBsYXRlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoY29tcG9uZW50X2RlY2xfMSk6IFVzZSBpdC4KCShmbi5kZWYyKTogTGlrZXdpc2UuCgkodGVtcGxhdGVfYXJnX2xpc3Rfb3B0KTogTmV3IG5vbnRlcm1pbmFsLgoJKHRlbXBsYXRlX3R5cGUpOiBVc2UgaXQuCgkoc2VsZl90ZW1wbGF0ZV90eXBlKTogTGlrZXdpc2UuCgkodGVtcGxhdGVfaWQpOiBMaWtld2lzZS4KCShvYmplY3RfdGVtcGxhdGVfaWQpOiBMaWtld2lzZS4KCShub3R5cGVfdGVtcGxhdGVfZGVjbGFyYXRvcik6IExpa3dpc2UuCgkoYmVnaW5fZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGVuZF9leHBsaWNpdF9pbnN0YW50aWF0aW9uKTogTGlrZXdpc2UuCgkoZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IFVzZSB0aGVtLgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBZGQgcGFyYW1ldGVycy4KCShwcm9jZXNzaW5nX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBOZXcgdmFyaWFibGUuCgkoY29udmVydF9ub250eXBlX3BhcmFtZXRlcik6IE5ldyBmdW5jdGlvbi4KCShkZXRlcm1pbmVfb3ZlcmxvYWRlZF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGJlZ2luX2V4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBMaWtld2lzZS4KCShlbmRfZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKHJldHJpZXZlX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkocmVnaXN0ZXJfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShwcm9jZXNzaW5nX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogUmVtb3ZlZC4KCShkZXRlcm1pbmVfc3BlY2lhbGl6YXRpb24pOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zIG9mIG1lbWJlcgoJZnVuY3Rpb25zIG9mIHRlbXBsYXRlIGNsYXNzIGluc3RhbnRpYXRpb25zLgoJKGNoZWNrX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogUmVmaW5lIHRvIGNvbmZvcm0gdG8gc3RhbmRhcmQuCgkoY29tcF90ZW1wbGF0ZV9wYXJtcyk6IE5ldyBmdW5jdGlvbi4KCShjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBDYWxsIGNvbnZlcnRfbm9udHlwZV9wYXJhbWV0ZXIuCgkodHN1YnN0KTogUmVmaW5lIGhhbmRsaW5nIG9mIG1lbWJlciB0ZW1wbGF0ZXMuICBVc2UKCXJlZ2lzdGVyX3NwZWNpYWxpemF0aW9uLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVXNlIHJldHJpZXZlX3NwZWNpYWxpemF0aW9uLgoJKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBMaWtld2lzZS4KCSh0eXBlX3VuaWZpY2F0aW9uKTogSW1wcm92ZSBoYW5kbGluZyBvZiBleHBsaWN0IHRlbXBsYXRlCglhcmd1bWVudHMuCgkqIHRyZWUuYyAobWFwY2FyKTogUmV0dXJuIGVycm9yX21hcmtfbm9kZSwgcmF0aGVyIHRoYW4gYWJvcnRpbmcsCglvbiBWQVJfREVDTFMsIEZVTkNUSU9OX0RFQ0xTLCBhbmQgQ09OU1RfREVDTFMuCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IENhbGwgZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uLCByYXRoZXIKCXRoYW4gZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uLgoKTW9uIEphbiAxOSAxMzoxODo1MSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogQSBUQVJHRVRfRVhQUiBoYXMgc2lkZSBlZmZlY3RzLgoKRnJpIEphbiAxNiAxMTo0MDo1MCAxOTk4ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogRm9yIGVudW0gdGFncywgb3V0cHV0IHRoZSB0YWcsIG5vdCBpdHMgdmFsdWUuCgoxOTk4LTAxLTEzICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IE9ubHkgY2FsbCBpbml0X3J0dGlfcHJvY2Vzc2luZwoJRkxBR19SVFRJIGlzIHNldC4KCk1vbiBKYW4gMTIgMDE6MzU6MTggMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXdfMSk6IFNwbGl0IG91dCBmcm9tIGJ1aWxkX25ldy4KCShidWlsZF9uZXcpOiBKdXN0IHJldHVybiBhIE5FV19FWFBSLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogSGFuZGxlIE5FV19FWFBSLgoKCSogZGVjbDIuYyAoZ2V0X3RlbXBfcmVndmFyKTogVHdlYWsuCgoJKiBjcC10cmVlLmggKFRSRUVfQ0FMTFNfTkVXKTogQ29tbWVudCBvdXQuCgkqIGNsYXNzLmMgKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IFJlbW92ZSB1c2UuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IExpa2V3aXNlLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoKV2VkIEphbiAgNyAyMzo0NzoxMyAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fZWhfYWxsb2MsIF9fZWhfZnJlZSk6IE5ldyBmbnMuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbiwgX19jcF9wb3BfZXhjZXB0aW9uKTogVXNlIHRoZW0uCgkoX191bmNhdGNoX2V4Y2VwdGlvbik6IENhbGwgdGVybWluYXRlIGhlcmUgaWYgbm8gZXhjZXB0aW9uLgoJKiBleGNlcHQuYyAoYnVpbGRfdGVybWluYXRlX2hhbmRsZXIpOiBOZXcgZm4uCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogVXNlIGl0LgoJKGV4cGFuZF9leGNlcHRpb25fYmxvY2tzKTogTGlrZXdpc2UuCgkoYWxsb2NfZWhfb2JqZWN0KTogTmV3IGZuLgoJKGV4cGFuZF90aHJvdyk6IFVzZSBpdC4gIFByb3RlY3QgZXhjZXB0aW9uIGluaXQgd2l0aCB0ZXJtaW5hdGUuCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IFJlbW92ZSBjb2RlIHRoYXQgaWdub3JlcyB0cml2aWFsCgltZXRob2RzLgoKTW9uIERlYyAyMiAxMTozNjoyNyAxOTk3ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IEFkZCBkZWZhdWx0IGNhc2UgaW4gZW51bWVyYXRpb24KCXN3aXRjaC4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCShjb252ZXJ0X2xpa2UpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGJ1aWxkX2V4cHJfdHlwZV9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkqIHRyZWUuYyAocmVhbF9sdmFsdWVfcCk6IExpa2V3aXNlLgoJKGx2YWx1ZV9wKTogTGlrZXdpc2UuCgkoY3BfdHJlZV9lcXVhbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29tcHR5cGVzKTogTGlrZXdpc2UuCgkoYnVpbGRfY29tcG9uZW50X3JlZik6IExpa2V3aXNlLgoJKGJ1aWxkX2Z1bmN0aW9uX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGJ1aWxkX2JpbmFyeV9vcF9ub2RlZmF1bHQpOiBMaWtld2lzZS4KCShidWlsZF91bmFyeV9vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX21vZGlmeV9leHByKTogTGlrZXdpc2UuCgkqIHR5cGVjazIuYyAoaW5pdGlhbGl6ZXJfY29uc3RhbnRfdmFsaWRfcCk6IExpa2V3aXNlLgoKU3VuIERlYyAyMSAxNTo1OTowMCAxOTk3ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWRkIHN1cHBvcnQgZm9yIC1XdW5rbm93bi1wcmFnbWFzLgoKVGh1IERlYyAxOCAxNDo1MTo1MCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBNYWtlIHN1cmUgdG8gZGlnZXN0X2luaXQgaWYKCXBvc3NpYmxlLgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBNYWtlIHRoZSBuZXdkZWNsIHZpcnR1YWwgaWYgdGhlCglvbGRkZWNsIHdhcywganVzdCBhcyBpcyBkb25lIHdpdGggb3RoZXIgYXR0cmlidXRlcyBvZiBvbGRkZWNsLgoKVGh1IERlYyAxOCAxNDo0MzoxOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAodW5hcnlfY29tcGxleF9sdmFsdWUpOiBJZ25vcmUgb3AwIHdoZW4gdGFraW5nIHRoZQoJYWRkcmVzcyBvZiBhbiBPRkZTRVRfUkVGLgoKCSogY3AtdHJlZS5kZWY6IEFkZCBBR0dSX0lOSVRfRVhQUi4KCSogZXJyb3IuYywgdHJlZS5jLCB0eXBlY2suYzogUmVwbGFjZSB1c2VzIG9mIE5FV19FWFBSIHdpdGgKCUFHR1JfSU5JVF9FWFBSIHdoZXJlIGFwcHJvcHJpYXRlLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogTGlrZXdpc2UuICBTaW1wbGlmeS4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogUmVtb3ZlIGNhbGwgdG8gcmVnaXN0ZXJfZXhjZXB0aW9uX3RhYmxlLgoKV2VkIERlYyAxNyAxNzowODo1MiAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IERvbid0IGRvIGluamVjdGlvbiB3aGVuCglwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgaXMgdHJ1ZSwgYXMgcG9sbHV0ZXMgY3VycmVudF9iaW5kaW5nX2xldmVsCglmb3IgYmFzZSBjbGFzc2VzLgoKV2VkIERlYyAxNyAyMToxNzozOSAxOTk3ICBQZXRlciBTY2htaWQgIDxzY2htaWRAbHRvaS5pYXAucGh5c2lrLnR1LWRhcm1zdGFkdC5kZT4KCgkqIHB0LmMgKG1heWJlX2ZvbGRfbm9udHlwZV9hcmcpOiBBZGQgcHJvdG90eXBlLgoKVHVlIERlYyAxNiAxMDozMToyMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhcik6IEhhbmRsZSBUUllfQ0FUQ0hfRVhQUiBldCBhbC4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogTGlrZXdpc2UuCgpNb24gRGVjIDE1IDEyOjIyOjA0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBSZW1vdmUgImlubGluZSBjYWxsZWQgYmVmb3JlCglkZWZpbml0aW9uIiBwZWR3YXJuLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVXNlIG1heWJlX2ZvbGRfbm9udHlwZV9hcmcuCgpTdW4gRGVjIDE0IDIyOjM0OjIwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBGaXggYmFzZSBjb252ZXJzaW9uIG9mIHBtJ3MuCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uX3JlYWwpOiBDaGFuZ2UgX19udWxsIHRvIHR5cGUgdm9pZCogd2l0aAoJYSB3YXJuaW5nLgoKU3VuIERlYyAxNCAyMDozODozNSAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBjYWxsLmMgKGltcGxpY2l0X2NvbnZlcnNpb24pOiBEb24ndCBjYWxsCglidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xIHdpdGggYSBOVUxMIGV4cHIsIHNpbmNlIGl0IHdpbGwKCWNyYXNoLgoKCSogcHQuYyAodW5pZnkpOiBEb24ndCB0cnkgdG8gdW5pZnkgYXJyYXkgYm91bmRzIGlmIGVpdGhlciBhcnJheSBpcwoJdW5ib3VuZGVkLgoKRnJpIERlYyAxMiAxNjowOToxNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJmbi5jIChjcF9wZWR3YXJuLCBjcF9wZWR3YXJuX2F0LCBjcF9lcnJvcl9hdCwgY3Bfd2FybmluZ19hdCk6CglSZXBsYWNlIGV4dGVybiBkZWNscyB3aXRoIGNhc3RzLgoKCSogZGVjbC5jIChleHBhbmRfc3RhcnRfZWFybHlfdHJ5X3N0bXRzKTogRG9uJ3QgbWVzcyB3aXRoIGEgc2VxdWVuY2UuCglVcGRhdGUgbGFzdF9wYXJtX2NsZWFudXBfaW5zbi4KCShzdG9yZV9hZnRlcl9wYXJtcyk6IFJlbW92ZS4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgpUaHUgRGVjIDExIDIyOjE4OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogQWxzbyBzZXQgREVDTF9DT01EQVQuCgkoZmluaXNoX2ZpbGUpOiBDaGVjayBERUNMX0NPTURBVCBpbnN0ZWFkIG9mIHdlYWt8b25lX29ubHkuCgkoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBVc2UgbWFrZV9kZWNsX29uZV9vbmx5IGluc3RlYWQgb2YKCWNvbWRhdF9saW5rYWdlIGZvciB3aW4zMiB0d2Vhay4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogcHQuYyAobWFya19kZWNsX2luc3RhbnRpYXRlZCk6IExpa2V3aXNlLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBMb3NlIGhhbmRsaW5nIG9mIHRlbXBsYXRlcyBpbiBwZW5kaW5nX3N0YXRpY3MuCgpUaHUgRGVjIDExIDIxOjEyOjA5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTG9zZSBjYWxsIHRvIGV4cGFuZF9idWlsdGluX3Rocm93LgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBSZW1vdmUuCgkqIGNwLXRyZWUuaDogUmVtb3ZlIHB0cl9wdHJfdHlwZV9ub2RlLgoJKiBkZWNsLmM6IExpa2V3aXNlLgoKVGh1IERlYyAxMSAyMDo0MzozMyAxOTk3ICBUZWVtdSBUb3JtYSAgPHRvdEB0cmVtYS5jb20+CgoJKiBkZWNsLmMgKHB0cl9wdHJfdHlwZV9ub2RlKTogRGVmaW5lLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogSW5pdGlhbGl6ZSBpdC4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoJKiBleGNlcHRpb24uY2MgKF9fY3BfZXhjZXB0aW9uX2luZm8pOiBVc2UgX19nZXRfZWhfaW5mby4KCShfX2NwX3B1c2hfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgkoX19jcF9wb3BfZXhjZXB0aW9uKTogTGlrZXdpc2UuCgoJRnJvbSBTY290dCBTbnlkZXIgPHNueWRlckBkMHNnaWYuZm5hbC5nb3Y+OgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBVc2UgZ2V0X3NhdmVkX3BjX3JlZiBpbnN0ZWFkIG9mCglzYXZlZF9wYy4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogUmVtb3ZlZCBzYXZlZF9wYyBpbml0aWFsaXphdGlvbi4KCldlZCBEZWMgMTAgMTE6MDQ6NDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IERlZmVyIGFsbCB0ZW1wbGF0ZXMgYnV0IGlubGluZSBmdW5jdGlvbnMuCgpNb24gRGVjICA4IDIzOjE3OjEzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRG9uJ3QgZm9sZCBhIGxpc3Qgb2YgcGFyYW1ldGVycy4KCgkqIGRlY2wuYyAoY29weV9hcmdzX3ApOiBIYW5kbGUgY29weSBlbGlzaW9uIGZvciB0eXBlcyB3aXRoIHZpcnR1YWwKCWJhc2VzLgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoKU3VuIERlYyAgNyAyMjozODoxMiAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24pOiBDb3B5IHRoZSB0ZW1wbGF0ZSBhcmd1bWVudHMsCglub3QganVzdCB0aGUgbGlzdCBjb250YWluaW5nIHRoZW0sIHRvIHRoZSBwZXJtYW5lbnQgb2JzdGFjay4KClN1biBEZWMgIDcgMTU6NTM6MDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IHN1c3BlbmRfbW9tZW50YXJ5IGZvciB0aGUKCXRlcm1pbmF0ZSBoYW5kbGVyLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogSGFuZGxlIExPT0tVUF9FWFBSLgoKU3VuIERlYyAgNyAxNTo0NTowNyAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IENvcHkgdGhlIGNhc3QtdG8gdHlwZSB0byB0aGUKCXBlcm1hbmVudCBvYnN0YWNrIGlmIHdlIGFyZSBwcm9jZXNzaW5nIGEgdGVtcGxhdGUgZGVjbC4KCSogdHlwZWNrLmMgKGJ1aWxkX3N0YXRpY19jYXN0KTogTGlrZXdpc2UuCgkoYnVpbGRfY29uc3RfY2FzdCk6IExpa2V3aXNlLgoJKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBMaWtld2lzZS4KCgkqIHB0LmMgKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IENvZXJjZSBzb21lIGV4cHJlc3Npb25zLCBldmVuCgl3aGVuIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbC4KClN1biBEZWMgIDcgMDE6NDY6MzMgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0LCBwb2ludGVyX2RpZmYpOiBTeW1tZXRyaWMKCWhhbmRsaW5nIG9mIHBvaW50ZXIgZGlmZmVyZW5jZSBleHByZXNzaW9ucy4KCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IENvbXBhcmlzb24gb2YgZnVuY3Rpb24vbWV0aG9kIHR5cGVzCglpcyBpbmRlcGVuZGVudCBvZiBucHRycy4KClN1biBEZWMgIDcgMDE6NDA6MjcgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAodHN1YnN0KTogQXZvaWQgY3JlYXRpbmcgcG9pbnRlciB0byByZWZlcmVuY2UgYW5kCglyZWZlcmVuY2UgdG8gcmVmZXJlbmNlIHR5cGVzLgoKU2F0IERlYyAgNiAwMToyOTozNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChkb19pZCk6IE5ldyBub250ZXJtaW5hbC4KCSh0ZW1wbGF0ZV9pZCk6IFVzZSBpdC4KCkZyaSBEZWMgIDUgMDE6MTc6MzQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAodGVtcGxhdGVfaWQpOiBkb19pZGVudGlmaWVyIGZvciBQRlVOQ05BTUVzLCB0b28uCgkqIHNwZXcuYyAoeXlsZXgpOiBEb24ndCBkb19pZGVudGlmaWVyIGhlcmUuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBFeHBhbmQgdGhlIG5hbWUgZm9yIGEgbWV0aG9kIGNhbGwuCgkqIHBhcnNlLnkgKG9iamVjdF90ZW1wbGF0ZV9pZCk6IERvbid0IHRyeSB0byB0YWtlIHRoZSBERUNMX05BTUUuCgpXZWQgRGVjICAzIDIwOjAyOjM5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIGEgVEFSR0VUX0VYUFIgaW5zdGVhZCBvZiBTQVZFX0VYUFIgZm9yCglhbGxvY19leHByLgoJKiBjYWxsLmMgKGJ1aWxkX29wX2RlbGV0ZV9jYWxsKTogQWRqdXN0LgoKCSogZXhjZXB0LmMgKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMb3NlIHJldGhyb3cgcmVnaW9uLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IExpa2V3aXNlLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBEb24ndCBleHBhbmRfbGVmdG92ZXJfY2xlYW51cHMuCgpXZWQgRGVjICAzIDEzOjI0OjA0IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IFJlbW92ZSB0cmVlX2NvbnMgY2FsbCAocGxhY2VzIHJlZHVuZGFudCBpbmZvIGludG8KCURFQ0xfVEVNUExBVEVfSU5TVEFOVElBVElPTikuCgpXZWQgRGVjICAzIDExOjQ0OjUyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoaXNfb3ZlcmxvYWRlZF9mbik6IEhhbmRsZSBnZXR0aW5nIGEgZm4gdGVtcGxhdGUuCgkocmVhbGx5X292ZXJsb2FkZWRfZm4pOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFJzIGJldHRlci4KCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBUd2Vhay4KCShkZXRlcm1pbmVfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBUd2Vhay4KCgkqIHRyZWUuYywgY3AtdHJlZS5oIChnZXRfdGFyZ2V0X2V4cHIpOiBOZXcgZm4uCgpXZWQgRGVjICAzIDA4OjQ3OjI3IDE5OTcgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBGaXggbWlzc3BlbGxpbmcgaW4KCWRpYWdub3N0aWM6IGBwcmVjZWVkZWQnLgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBGaXggbWlzc3BlbGxpbmcgaW4gZGlhZ25vc3RpYzoKCWBjb252ZXJzaW9uYScuCgoxOTk3LTEyLTAyICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBwdC5jIChkZXRlcm1pbmVfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBBdm9pZCBhbiBpbnRlcm5hbAoJZXJyb3IgZm9yIGJhZCBzcGVjaWFsaXphdGlvbnMuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgU0NPUEVfUkVGLgoKVHVlIERlYyAgMiAxOToxODo1MCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBjbGFzcy5jIChwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IEVuYWJsZSBldmVuIG1vcmUgY29tcGxleCBNSQoJdnRhYmxlIG5hbWVzLgoKVHVlIERlYyAgMiAwMTozNzoxOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHRpb24uY2MgKF9fY2hlY2tfZWhfc3BlYyk6IE9wdGltaXplIGEgYml0LgoKCSogZXhjZXB0aW9uLmNjIChfX2NwX3BvcF9leGNlcHRpb24pOiBMb3NlIGhhbmRsZXIgYXJnLgoJKiBleGNlcHQuYyAoZG9fcG9wX2V4Y2VwdGlvbik6IExpa2V3aXNlLgoJKHB1c2hfZWhfY2xlYW51cCk6IExldCB0aGUgY2xlYW51cCBtZWNoYW5pc20gc3VwcGx5IHRoZSBoYW5kbGVyLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4KCkZyaSBOb3YgMjggMDE6NTg6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBDb21wbGFpbiBhYm91dCB1c2luZyBhCgl0ZW1wbGF0ZS1pZCBmb3IgYSBub24tc3BlY2lhbGl6YXRpb24uCgpGcmkgTm92IDI4IDEyOjM1OjE5IDE5OTcgIFNjb3R0IENocmlzdGxleSAgPHNjb3R0Y0BuZXQtY29tbXVuaXR5LmNvbT4KCgkqIHJlcG8uYzogUHJvdG90eXBlIHJpbmRleCBvbmx5IGlmIG5lZWRlZC4KCSogeHJlZi5jOiBMaWtld2lzZS4KCkZyaSBOb3YgMjggMDE6NTY6MzUgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoKVGh1IE5vdiAyNyAwMDo1OTo0NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29uc3RfY2FzdCk6IEhhbmRsZSByZWZlcmVuY2VzIGhlcmUgaW5zdGVhZCBvZgoJaGFuZGluZyBvZmYgdG8gY29udmVydF90b19yZWZlcmVuY2UuCgoJKiBleGNlcHQuYzogTG9zZSBVbmV4cGVjdGVkLCBTZXRUZXJtaW5hdGUsIFNldFVuZXhwZWN0ZWQsCglUZXJtaW5hdGVGdW5jdGlvbkNhbGwuCgkoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IExpa2V3aXNlLiAgVGVybWluYXRlIGV0IGFsIGFyZSBub3cKCXRoZSBmbnMsIG5vdCBBRERSX0VYUFJzLgoJKHZhcmlvdXMpOiBMb3NlIHJlZHVuZGFudCBhc3NlbWJsZV9leHRlcm5hbCBjYWxscy4KCShkb191bndpbmQpOiBzL0J1aWx0aW5SZXR1cm5BZGRyZXNzL2J1aWx0aW5fcmV0dXJuX2FkZHJlc3NfZm5kZWNsLy4KCgkqIGNwLXRyZWUuaCAoc3RydWN0IGxhbmdfZGVjbF9mbGFncyk6IEFkZCBjb21kYXQuCgkoREVDTF9DT01EQVQpOiBOZXcgbWFjcm8uCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogUHJvcGFnYXRlIGl0LgoJKGNwX2ZpbmlzaF9kZWNsKTogSGFuZGxlIGl0LgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X2RlY2wpOiBKdXN0IHNldCBERUNMX0NPTURBVCBvbiBWQVJfREVDTHMuCgoJKiBjbGFzcy5jOiBSZW1vdmUgc3RhdGljIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KCShhZGRfdmlydHVhbF9mdW5jdGlvbik6IFRha2UgcG9pbnRlcnMgdG8gcGVuZGluZ192aXJ0dWFscwoJYW5kIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KCShmaW5pc2hfc3RydWN0XzEpOiBQYXNzIHRoZW0uICBEZWNsYXJlIHBlbmRpbmdfaGFyZF92aXJ0dWFscy4KCldlZCBOb3YgMjYgMjA6Mjg6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBJZiB3ZSBzdXBwb3J0IG9uZV9vbmx5IGJ1dCBub3QKCXdlYWsgc3ltYm9scywgbWFyayBpbnN0YW50aWF0ZWQgdGVtcGxhdGUgdnRhYmxlcyBvbmVfb25seS4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZSBmb3IgdGluZm8gZnVuY3Rpb25zLgoJKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IEFsc28gd3JpdGUgb3V0IHZ0YWJsZXMgZnJvbSBleHBsaWNpdGx5CglpbnN0YW50aWF0ZWQgdGVtcGxhdGUgY2xhc3Nlcy4KCSogcHQuYyAobWFya19jbGFzc19pbnN0YW50aWF0ZWQpOiBSZXZlcnQgbGFzdCBjaGFuZ2UuCgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQ2FsbCBtYXJrX3VzZWQgb24gdGhlIGRlc3RydWN0b3IuCgpXZWQgTm92IDI2IDE1OjEzOjQ4IDE5OTcgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxleC5jIChsYW5nX2luaXQpOiBFbmFibGUgZmxhZ19leGNlcHRpb25zIGJ5IGRlZmF1bHQgaWYgbm8KCWNvbW1hbmQgbGluZSBzd2l0Y2ggd2FzIHNwZWNpZmllZC4KCjE5OTctMTEtMjYgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHVuaWZ5KTogSGFuZGxlIGB2b2lkJyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGluCglzcGVjaWFsaXphdGlvbnMuCgpXZWQgTm92IDI2IDAxOjExOjI0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogSGFuZGxlIHRlbXBsYXRlIGNhc2UgaGVyZS4KCShidWlsZF9keW5hbWljX2Nhc3RfMSk6IE5vdCBoZXJlLgoKCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IE1ha2UgY29waWVzIHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IHJlc29sdmVfb2Zmc2V0X3JlZi4KCgkqIGV4Y2VwdC5jOiBDYWxsIHRlcm1pbmF0ZSB3aXRob3V0IGNhY2hpbmcgc28gbWFueSBiaXRzLgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEZpeCBjYXRjaGluZyBhIHJlZmVyZW5jZQoJdG8gcG9pbnRlci4KClR1ZSBOb3YgMjUgMTE6Mjg6MjEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBDb3B5IHNpemUgdG8gdGhlIHNhdmVhYmxlIG9ic3RhY2suCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IFN0aWNrIGEgQ0xFQU5VUF9QT0lOVF9FWFBSIGluc2lkZSB0aGUKCVRSWV9DQVRDSF9FWFBSIGZvciBub3cuCgpNb24gTm92IDI0IDEyOjE1OjU1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogRG9uJ3QgYXNzdW1lIGEgRlVOQ1RJT05fREVDTAoJaGFzIERFQ0xfTEFOR19TUEVDSUZJQy4KCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBBZGQgaGFuZGxlcnMgZmllbGQuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbik6IEluaXRpYWxpemUgaXQuCgkoX19jcF9wb3BfZXhjZXB0aW9uKTogRGVjcmVtZW50IGl0LiAgRG9uJ3QgcG9wIHVubGVzcyBpdCdzIDAuCgkoX190aHJvd19iYWRfZXhjZXB0aW9uKTogUmVtb3ZlLgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogQWRkIGhhbmRsZXJzIGZpZWxkLgoJKGdldF9laF9oYW5kbGVycyk6IE5ldyBmbi4KCShwdXNoX2VoX2NsZWFudXApOiBJbmNyZW1lbnQgaGFuZGxlcnMuCgpGcmkgTm92IDIxIDEyOjIyOjA3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfZWhfc3BlYyk6IFVzZSB0aGUgdHJ5L2NhdGNoIGNvZGUuCgkoZXhwYW5kX2VuZF9laF9zcGVjKTogTGlrZXdpc2UuICBDYWxsIF9fY2hlY2tfZWhfc3BlYyBpbnN0ZWFkIG9mCglkb2luZyBldmVyeXRoaW5nIGlubGluZS4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogdGhyb3dfdHlwZV9tYXRjaCBub3cgdGFrZXMKCWNvbnN0IHZvaWQgcG9pbnRlcnMuCgkqIGV4Y2VwdGlvbi5jYyAoX19jaGVja19laF9zcGVjKTogTmV3IGZuLgoJKiBpbmMvZXhjZXB0aW9uOiBOZWl0aGVyIHRlcm1pbmF0ZSBub3IgdW5leHBlY3RlZCByZXR1cm4uCgkqIGRlY2wuYzogTWFrZSBjb25zdF9wdHJfdHlwZV9ub2RlIHB1YmxpYy4KCSogdGluZm8yLmNjIChfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IFRha2UgdGhlIHR5cGVpbmZvcyBjb25zdGx5LgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFdlIG9ubHkgbmVlZCB0aGUgcmV0aHJvdwoJcmVnaW9uIGZvciBub24tc2psaiBleGNlcHRpb25zLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4gIFVzZSBvdXRlcl9jb250ZXh0X2xhYmVsX3N0YWNrLgoKVGh1IE5vdiAyMCAxNDo0MDoxNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKENYWF9MSUIyRlVOQ1MpOiBBZGQgbmV3IG9wIG5ldyBhbmQgb3AgZGVsZXRlIG9ianMuCgkodmFyaW91cy5vKTogTGlrZXdpc2UuCgkqIGluYy9uZXc6IEFkZCBwbGFjZW1lbnQgZGVsZXRlcy4gIEFkZCB0aHJvdyBzcGVjcyBmb3IgZGVmYXVsdCBuZXcuCgkqIG5ldy5jYyAoc2V0X25ld19oYW5kbGVyKTogTW92ZSBoZXJlIGZyb20gbGliZ2NjMi4KCSogbmV3MS5jYyAobmV3IChub3Rocm93KSk6IENhdGNoIGEgYmFkX2FsbG9jIHRocm93biBmcm9tIHRoZSBoYW5kbGVyLgoJKG5ldyk6IE1vdmUgZnJvbSBsaWJnY2MyLiAgVGhyb3cgYmFkX2FsbG9jLgoJKiBuZXcyLmNjOiBNb3ZlIHRoZSByZXN0IG9mIHRoZSBvcCBuZXdzIGFuZCBvcCBkZWxldGVzIGZyb20gbGliZ2NjMi4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVwZGF0ZSBleGNlcHRpb24gc3BlY3Mgb24gbmV3IGFuZAoJZGVsZXRlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IERvbid0IG1lc3Mgd2l0aCBnbG9iYWwKCXBsYWNlbWVudCBkZWxldGUuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IENoZWNrIGZvciBudWxsIHRocm93IHNwZWMsIG5vdCBub3Rocm93X3QuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IERvbid0IGNvbXBsYWluIGFib3V0IGRpZmZlcmVudCBleGNlcHRpb25zCglmcm9tIGFuIGludGVybmFsIGRlY2xhcmF0aW9uLgoKCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IEZpeCBjaGVjayBmb3IgbWVtYmVyIGZucyBhZ2Fpbi4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IEludGVyZmFjZSBoYWNrZXJ5IGFmZmVjdHMKCXZpcnR1YWwgc3ludGhlc2l6ZWQgbWV0aG9kcy4KCldlZCBOb3YgMTkgMTg6MjQ6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogRG9uJ3QganVzdCBjb21wbGFpbiBhYm91dCBhIG1pc21hdGNoZWQKCXNjb3BlLCBmaXggaXQuCgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBIYW5kbGUgY2FzZSB3aGVyZSB0IGlzIG5vdAoJYWN0dWFsbHkgZnJvbSBjb250ZXh0LgoJKiB0cmVlLmMgKGdldF90eXBlX2RlY2wpOiBMb3NlIGlkZW50aWZpZXIgY2FzZS4KCSogc3Bldy5jICh5eWxleCk6IExvc2UgdXNlbGVzcyBjYWxsIHRvIGlkZW50aWZpZXJfdHlwZWRlY2xfdmFsdWUuCgkqIHBhcnNlLnkgKG5vbm5lc3RlZF90eXBlKTogSnVzdCB1c2UgbG9va3VwX25hbWUuCgkoY29tcGxleF90eXBlX25hbWUpOiBKdXN0IHVzZSBJREVOVElGSUVSX0dMT0JBTF9WQUxVRS4KCldlZCBOb3YgMTkgMTE6NDU6MDcgMTk5NyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2Z1bmN0aW9uX25hbWUpOiBUZXN0IERFQ0xfTEFOR19TUEVDSUZJQyBpbiBjYXNlCglUIHdhcyBidWlsdCBpbiBDIGxhbmd1YWdlIGNvbnRleHQgKGZvciBleGFtcGxlLCBieQoJb3V0cHV0X2Z1bmNfc3RhcnRfcHJvZmlsZXIpLgoKV2VkIE5vdiAxOSAxMDozOToyNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfaW1wbGljaXRfdHlwZW5hbWUpOiBOZXcgZm4uCgkobG9va3VwX25hbWVfcmVhbCk6IFVzZSBpdC4gIFVzZSBjdXJyZW50X2NsYXNzX3R5cGUgYXMgdGhlIGNvbnRleHQuCgpNb24gTm92IDE3IDIzOjQyOjAzIDE5OTcgIEJydW5vIEhhaWJsZSAgPGhhaWJsZUBpbG9nLmZyPgoKCSogcHQuYyAoZG9fcG9wbGV2ZWwpOiBEb24ndCBwcm9oaWJpdCBqdW1wcyBpbnRvIHRoaXMgY29udG91ci4KCk1vbiBOb3YgMTcgMDI6MDE6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IFdhcm4gYWJvdXQgbm9uLXRlbXBsYXRlIGZyaWVuZHMgaW4gdGVtcGxhdGVzLgoKCSogY2FsbC5jIChidWlsZF9vcF9kZWxldGVfY2FsbCk6IEZpeCBoYW5kbGluZyBvZiBpbmhlcml0ZWQgZGVsZXRlLgoKCSogc2VhcmNoLmMgKGRmc19yZWNvcmRfaW5oZXJpdGFuY2UpOiBJZ25vcmUgdGVtcGxhdGUgdHlwZSBwYXJtcy4KClNhdCBOb3YgMTUgMDA6MzA6NTEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9uZXdfb3ApOiBGaXggY29weSBlcnJvci4KCShidWlsZF9vcF9uZXdfY2FsbCk6IE5ldyBmbi4KCShidWlsZF9vcF9kZWxldGVfY2FsbCk6IE5ldyBmbi4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIHRoZW0uCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIHRoZW0uICBTdXBwb3J0IHBsYWNlbWVudCBkZWxldGUuCgkoYnVpbGRfeF9kZWxldGUpOiBVc2UgYnVpbGRfb3BfZGVsZXRlX2NhbGwuCgkoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBMaWtld2lzZS4KCShjb2VyY2VfZGVsZXRlX3R5cGUpOiBEb24ndCBjb21wbGFpbiBhYm91dCBwbGFjZW1lbnQgZGVsZXRlLgoKVGh1IE5vdiAxMyAwMTo1MjozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogUmVtb3ZlIHVudXNlZCAnb2JqJyBwYXJtLgoJKiBjcC10cmVlLmgsIHR5cGVjay5jOiBBZGp1c3QuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IE1ha2UgdGhlIGNsZWFudXAgbGFzdCBsb25nZXIuCgkoZXhwYW5kX3ZlY19pbml0KTogQ2FsbCBkb19wZW5kaW5nX3N0YWNrX2FkanVzdC4KCldlZCBOb3YgMTIgMTE6MDQ6MzMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogRml4IHR5cG8uCgkobWFya19jbGFzc19pbnN0YW50aWF0ZWQpOiBJZiB3ZSBzdXBwb3J0IG9uZV9vbmx5IGJ1dCBub3Qgd2VhawoJc3ltYm9scywgZG9uJ3QgbWFyayB0aGlzIGFzIGtub3duLgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBIYW5kbGUgdmVjIGRlbGV0ZSBpbiBFSCBjbGVhbnVwLgoKV2VkIE5vdiAxMiAwODoxMTo1NSAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQ2FsbCBjb21wbGV0ZV90eXBlIGJlZm9yZSBjaGVja2luZwoJZm9yIGRlc3RydWN0b3IuCgpTdW4gTm92ICA5IDAxOjI5OjU1IDE5OTcgIEppbSBXaWxzb24gICh3aWxzb25AY3lnbnVzLmNvbSkKCgkqIGRlY2wuYyAoYWRkX2Jsb2NrX2N1cnJlbnRfbGV2ZWwpOiBEZWxldGUuCgkqIGluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZV8xKTogRGVsZXRlIGJ1aWxkX2Jsb2NrIGFuZAoJYWRkX2Jsb2NrX2N1cnJlbnRfbGV2ZWwgY2FsbHMuCgpXZWQgTm92IDEyIDAwOjQ4OjE2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogSGFuZGxlIGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSB3aGVuIHRoZQoJY29uc3RydWN0b3IgdGhyb3dzLgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBGaXggZmxhZ3MgYXJnLgoKCSogcHQuYyAoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogRG9uJ3QgdHJ5IHRvIGluc3RhbnRpYXRlCgltZW1iZXIgdGVtcGxhdGVzLgoJKG1hcmtfZGVjbF9pbnN0YW50aWF0ZWQpOiBJZiB3ZSBzdXBwb3J0IG9uZV9vbmx5IGJ1dCBub3QKCXdlYWsgc3ltYm9scywgbWFyayB0aGlzIG9uZV9vbmx5LgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IERvbid0IGRlZmVyIGhhbmRsaW5nIG9mIHZ0YWJsZXMKCWlmIE1VTFRJUExFX1NZTUJPTF9TUEFDRVMuCgpUdWUgTm92IDExIDEyOjAyOjEyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTG9zZSBjYWxsIHRvIF9fc2pwb3BudGhyb3cuCgpUdWUgTm92IDExIDAyOjUzOjQ0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBsYXNoZXIuY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChkb19wb3BfZXhjZXB0aW9uKTogUmV0dXJuIGEgdmFsdWUuCgpNb24gTm92IDEwIDIwOjI1OjMxIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSGFuZGxlIGdldHRpbmcgYQoJVEVNUExBVEVfSURfRVhQUiBhcm91bmQgYSBURU1QTEFURV9ERUNMLiAgRG9uJ3QgbG9vayBmb3IgYSBmaWVsZAoJaWYgd2UgZ290IHRlbXBsYXRlIHBhcm1zLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogUmVtZW1iZXIgdGhlIFRFTVBMQVRFX0lEX0VYUFIsCglub3QganVzdCB0aGUgYXJncy4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBUd2VhayBsYXN0IGNoYW5nZS4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBVc2UgZ2V0X2ZpcnN0X2ZuIGluc3RlYWQgb2YgVFJFRV9WQUxVRS4KCShtYXliZV9mb2xkX25vbnR5cGVfYXJnKTogU3BsaXQgb3V0IGZyb20gdHN1YnN0X2NvcHkuCgkqIHRyZWUuYyAoZ2V0X2ZpcnN0X2ZuKTogSnVzdCByZXR1cm4gYSBURU1QTEFURV9JRF9FWFBSLgoKTW9uIE5vdiAxMCAyMDowODozOCAxOTk3ICBLcmlhbmcgTGVyZHN1d2FuYWtpaiAgPGxlcmRzdXdhQHNjZi1mcy51c2MuZWR1PgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBIYW5kbGUgZXhwbGljaXQgdGVtcGxhdGUgYXJndW1lbnRzIGluCglmdW5jdGlvbiBjYWxscy4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExvb2t1cCBmdW5jdGlvbiBuYW1lIGlmIGl0CgloYXNuJ3QgYmVlbiBkb25lLgoKCSogcHQuYyAodHN1YnN0KTogSW5zdGFudGlhdGUgdGVtcGxhdGUgZnVuY3Rpb25zIHByb3Blcmx5IHdoZW4KCXRlbXBsYXRlIHBhcmFtZXRlciBkb2VzIG5vdCBhcHBlYXIgaW4gZnVuY3Rpb24gYXJndW1lbnRzIGFuZCByZXR1cm4KCXR5cGUuCgkoY29tcF90ZW1wbGF0ZV9hcmdzKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZXMgcmVxdWlyZWQgYnkgdHN1YnN0LgoKTW9uIE5vdiAxMCAyMDowODozOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVHdlYWsgY29uZGl0aW9ucyBmb3IgcGVkd2FybiBpbgoJcHJldmlvdXMgY2hhbmdlLgoKTW9uIE5vdiAxMCAyMDowODoyOSAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVHdlYWsgZXJyb3IgbWVzc2FnZS4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBJZiAtV3JldHVybi10eXBlLCB3YXJuIGV2ZXJ5dGltZSBhCglyZXR1cm4gdHlwZSBkZWZhdWx0cyB0byBgaW50JywgZXZlbiBpZiB0aGVyZSBhcmUgc3RvcmFnZS1jbGFzcwoJc3BlY2lmaWVycy4KCk1vbiBOb3YgMTAgMDM6MDQ6MjAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUNvbXBsZXRlIG5lc3RlZCBleGNlcHRpb24gc3VwcG9ydC4KCSogZXhjZXB0LmMgKGRvX3BvcF9leGNlcHRpb24pOiBTcGxpdCBvdXQuLi4KCShwdXNoX2VoX2NsZWFudXApOiBGcm9tIGhlcmUuICBIYW5kbGUgdGhlIEVIIHJlZ2lvbiBieSBoYW5kLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEFkZCBhIG5ldyBsZXZlbCBmb3IgdGhlIGNhdGNoIHBhcm0uCglNb3ZlIHRoZSByZXRocm93IHJlZ2lvbiBvdXRzaWRlIHRoZSB0d28gY2xlYW51cCByZWdpb25zLgoJUHJvdGVjdCB0aGUgaW5pdGlhbGl6ZXIgZm9yIHRoZSBjYXRjaCBwYXJtIHdpdGggdGVybWluYXRlLgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4gIEVuZCB0aGUgcmVnaW9uIGZvciB0aGUgZWhfY2xlYW51cC4KCSogZXhjZXB0aW9uLmNjIChfX2NwX3BvcF9leGNlcHRpb24pOiBOb3cgdGFrZXMgdHdvIHBhcm1zLiAgSGFuZGxlCglwb3BwaW5nIG9mZiB0aGUgbWlkZGxlIG9mIHRoZSBzdGFjay4KCSogdHJlZS5jIChsdmFsdWVfcCwgcmVhbF9sdmFsdWVfcCk6IEhhbmRsZSBUUllfQ0FUQ0hfRVhQUiwKCVdJVEhfQ0xFQU5VUF9FWFBSLCBhbmQgVU5TQVZFX0VYUFIuCgkoYnVpbGRfY3BsdXNfbmV3KTogT25seSB3cmFwIENBTExfRVhQUnMuCgkqIGluaXQuYyAoZXhwYW5kX2RlZmF1bHRfaW5pdCk6IEhhbmRsZSBhIFRSWV9DQVRDSF9FWFBSIGFyb3VuZAoJdGhlIGNvbnN0cnVjdG9yIGNhbGwuCgpTdW4gTm92ICA5IDE4OjAwOjI2IDE5OTcgIFJpY2hhcmQgS2VubmVyICA8a2VubmVyQHZsc2kxLnVsdHJhLm55dS5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGMrKy5kaXN0ZGlyKTogTWFrZSBpbmMgc3ViZGlyZWN0b3J5LgoKRnJpIE5vdiAgNyAxMTo1NzoyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFB1dCBiYWNrIHNvbWUgY29kZS4KClRodSBOb3YgIDYgMTE6Mjg6MTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBSZW1vdmUgcmVkdW5kYW50IGNvZGUuCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogRG9uJ3QgbGV0IHRoZSBiYWNrZW5kIGRlZmVyIGdlbmVyaWMgdGh1bmtzLgoKV2VkIE5vdiAgNSAyMzo1Mjo1MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoY2FsbF9laF9pbmZvKTogU3BsaXQgb3V0Li4uCgkocHVzaF9laF9pbmZvKTogRnJvbSBoZXJlLgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIGl0LgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IE1vdmUgcmVnaW9uIHN0YXJ0IGJhY2suCgpUdWUgTm92ICA0IDEzOjQ1OjEwIDE5OTcgIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoTVVMVElCWVRFX0NIQVJTKTogI3VuZGVmIGlmIGNyb3NzIGNvbXBpbGluZy4KCShyZWFsX3l5bGV4KTogUmVjb3JkIHdpZGUgc3RyaW5ncyB1c2luZyB0YXJnZXQgZW5kaWFubmVzcywgbm90IGhvc3QuCgoxOTk3LTExLTAzICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiByZXBvLmMgKHJpbmRleCk6IEFkZCBkZWNsIHVuY29uZGl0aW9uYWxseS4KCShnZXRfYmFzZV9maWxlbmFtZSwgb3Blbl9yZXBvX2ZpbGUpOiBEb24ndCBjYXN0IHJpbmRleC4KCSogeHJlZi5jIChyaW5kZXgpOiBBZGQgZGVjbCB1bmNvbmRpdGlvbmFsbHkuCgkoaW5kZXgpOiBSZW1vdmUgdW51c2VkIGRlY2wuCgkob3Blbl94cmVmX2ZpbGUpOiBEb24ndCBjYXN0IHJpbmRleC4KClN1biBOb3YgIDIgMTU6MDQ6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IFByb3BhZ2F0ZSB0aGUgcmVzdWx0IHR5cGUgcHJvcGVybHkuCgoxOTk3LTExLTAxICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpIFshRFdBUkYyX1VOV0lORF9JTkZPXTogUmVwbGFjZQoJcmVtYWluaW5nIHVzZSBvZiBzYXZlZF90aHJvd190eXBlIHdpdGggYSBjYWxsIHRvIGdldF9laF90eXBlLgoKMTk5Ny0xMC0zMSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogbGV4LmMgKEZJTEVfTkFNRV9OT05ESVJFQ1RPUlkpOiBEZWxldGUgbWFjcm8uCgkoZmlsZV9uYW1lX25vbmRpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbiwgZG9pbmcgdGhlIHNhbWUgYXMgdGhlIG1hY3JvLgoJKHNldF90eXBlZGVjbF9pbnRlcmZhY2VfaW5mbyk6IFVzZSBpdCBpbnN0ZWFkIG9mIHRoZSBtYWNyby4KCShjaGVja19uZXdsaW5lKTogTGlrZXdpc2UuCgkoaGFuZGxlX2NwX3ByYWdtYSk6IExpa2V3aXNlLgoKCSogcmVwby5jIChnZXRfYmFzZV9maWxlbmFtZSk6IENhc3QgcmVzdWx0IG9mIHJpbmRleCB0byBjaGFyKi4KCShvcGVuX3JlcG9fZmlsZSk6IExpa2V3aXNlLgoJKiB4cmVmLmMgKG9wZW5feHJlZl9maWxlKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfY2hhcik6IE1ha2UgaXRzIGFyZyBpbnQsIG5vdCBjaGFyLgoKCSogZXhjZXB0LmMgKHB1c2hfZWhfaW5mbyk6IFBhc3MgdGhlIG51bWJlciBvZiBmaWVsZHMgLSAxIGRvd24sIG5vdAoJdGhlIGV4YWN0IG51bWJlciBvZiBmaWVsZHMuCgpGcmkgT2N0IDMxIDAxOjQ3OjU3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCglTdXBwb3J0IGZvciBuZXN0ZWQgZXhjZXB0aW9ucy4KCSogdGluZm8yLmNjIChfX2lzX3BvaW50ZXIpOiBOZXcgZm4uCgkqIGV4Y2VwdGlvbi5jYyAoc3RydWN0IGNwX2VoX2luZm8pOiBEZWZpbmUuCgkoX19jcF9leGNlcHRpb25faW5mbywgX191bmNhdGNoX2V4Y2VwdGlvbik6IE5ldyBmbnMuCgkoX19jcF9wdXNoX2V4Y2VwdGlvbiwgX19jcF9wb3BfZXhjZXB0aW9uKTogTmV3IGZucy4KCSogZXhjZXB0LmM6IExvc2Ugc2F2ZWRfdGhyb3dfe3R5cGUsdmFsdWUsY2xlYW51cCxpbl9jYXRjaH0uCglMb3NlIGVtcHR5X2ZuZGVjbC4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogTGlrZXdpc2UuICBfX2VoX3BjIGlzIG5vdyBleHRlcm5hbC4KCShwdXNoX2VoX2luZm8pOiBOZXcgZm4uCgkoZ2V0X2VoX3tpbmZvLHZhbHVlLHR5cGUsY2F1Z2h0fSk6IE5ldyBmbnMuCgkocHVzaF9laF9jbGVhbnVwKTogSnVzdCBjYWxsIF9fY3BfcG9wX2V4Y2VwdGlvbi4KCShleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBVc2UgcHVzaF9laF9pbmZvLiAgU3RhcnQgdGhlIGVoIHJlZ2lvbgoJc29vbmVyLgoJKGV4cGFuZF9lbmRfZWhfc3BlYyk6IFVzZSBwdXNoX2VoX2luZm8uCgkoZXhwYW5kX3Rocm93KTogQ2FsbCBfX2NwX3B1c2hfZXhjZXB0aW9uIHRvIHNldCB1cCB0aGUgZXhjZXB0aW9uIGluZm8uCglKdXN0IHBhc3MgdGhlIGRlc3RydWN0b3Igb3IgMCBhcyB0aGUgY2xlYW51cC4gIENhbGwgX191bmNhdGNoX2V4Y2VwdGlvbgoJd2hlbiB3ZSByZXRocm93LgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogRG9uJ3QgcmVmZXIgdG8gZW1wdHlfZm5kZWNsLgoKVGh1IE9jdCAyMyAwMjowMTozMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogU0VUX0RFQ0xfSU1QTElDSVRfSU5TVEFOVElBVElPTiBvbiBuZXcgZGVjbC4KCjE5OTctMTAtMjIgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcywgYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKToKCUFkZCBzdGF0aWMgdG8gZGVmaW5pdGlvbnMuCgkqIHB0LmMgKGFkZF90b190ZW1wbGF0ZV9hcmdzLCBub3RlX3RlbXBsYXRlX2hlYWRlciwKCXByb2Nlc3NpbmdfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24sIHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IExpa2V3aXNlLgoJKHtkZXRlcm1pbmUsY2hlY2t9X2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogVXNlIGEgc2luZ2xlIHN0cmluZyBmb3IKCWVycm9yIG1lc3NhZ2VzLgoKTW9uIE9jdCAyMCAxMjowNjozNCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBDYWxsIGRvX3BlbmRpbmdfc3RhY2tfYWRqdXN0LgoJKGV4cGFuZF9lbmRfY2F0Y2hfYmxvY2spOiBMaWtld2lzZS4KCShleHBhbmRfZW5kX2VoX3NwZWMpOiBMaWtld2lzZS4KCk1vbiBPY3QgMjAgMTE6NDQ6MjAgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBIYW5kbGUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zCgljb3JyZWN0bHkuCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fbmFtZSk6IEZpeCBwcmludGluZyBvZiBzcGVjaWFsaXphdGlvbnMgb2YKCW1lbWJlciBmdW5jdGlvbnMgdGhhdCBhcmUgbm90IG1lbWJlciB0ZW1wbGF0ZXMuCgkqIGNwLXRyZWUuaCAocHJvY2Vzc2luZ19zcGVjaWFsaXphdGlvbik6IE1ha2UgZ2xvYmFsLgoJKiBwdC5jIChwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBTYXZlIGFuZCByZXN0b3JlCglwcm9jZXNzaW5nX3NwZWNpYWxpemF0aW9uIHRvIGF2b2lkIGNvbmZ1c2lvbi4KCk1vbiBPY3QgMjAgMTA6NTI6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEdpdmUgbnVsbF9ub2RlIHVua25vd24qIHR5cGUuCgkqIHR5cGVjay5jIChjb21wX3RhcmdldF90eXBlcyk6IEhhbmRsZSBVTktOT1dOX1RZUEUuCgkoY29tbW9uX3R5cGUpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoYXJnc19hc19zdHJpbmcpOiBSZWNvZ25pemUgbnVsbF9ub2RlLgoKU3VuIE9jdCAxOSAwOToxMzowMSAxOTk3ICBSaWNoYXJkIEtlbm5lciAgPGtlbm5lckB2bHNpMS51bHRyYS5ueXUuZWR1PgoKCSogdHlwZWNrLmMgKHJhdGlvbmFsaXplX2NvbmRpdGlvbmFsX2V4cHIpOiBIYW5kbGUge01JTixNQVh9X0VYUFIuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBDYWxsIGl0IGZvciB7TUlOLE1BWH1fRVhQUi4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIHVzaW5nX2VoX2Zvcl9jbGVhbnVwcy4KCgkqIE1ha2UtbGFuZy5pbiAoZysrKTogSW5jbHVkZSBwcmVmaXguby4KClRodSBPY3QgMTYgMTU6MzE6MDkgMTk5NyAgSnVkeSBHb2xkYmVyZyAgPGp1ZHlnb2xkQHNhbndhZnAuY29tPgoKCSogcHQuYyAoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogSW5pdGlhbGl6ZSAiZHVtbXkiCgl0byBrZWVwIFB1cmlmeSBxdWlldC4KClRodSBPY3QgMTYgMDA6MTQ6NDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSGFuZGxlIFRFTVBMQVRFX0NPTlNUX1BBUk1zIGhlcmUuCgkoYnVpbGRfb3ZlcmxvYWRfaW50KTogTm90IGhlcmUuCgpXZWQgT2N0IDE1IDAwOjM1OjI4IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNsYXNzLmMgKGJ1aWxkX3R5cGVfcGF0aG5hbWUpOiBSZW1vdmUuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBGaXggcHJvYmxlbSB3aXRoIGNvbXBsZXggTUkgdnRhYmxlIG5hbWVzLgoKMTk5Ny0xMC0xNCAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcGFyc2UueSAodW5hcnlfZXhwcik6IEdpdmUgYSBwZWR3YXJuIGlmIHNvbWVvbmUgdHJpZXMgdG8gdXNlIHRoZQoJJiZsYWJlbCBHTlUgZXh0ZW5zaW9uLgoKVHVlIE9jdCAxNCAxMjowMTowMCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBVbnNldCBERUNMX0FTU0VNQkxFUl9OQU1FIGJlZm9yZSBzZXR0aW5nIGl0LAoJc28gYXMgdG8gYXZvaWQgaW5jb3JyZWN0IG1hbmdsaW5ncy4KCSogbWV0aG9kLmMgKGJ1aWxkX2RlY2xfb3ZlcmxvYWRfcmVhbCk6IERvbid0IG1hbmdsZSByZXR1cm4gdHlwZXMKCWZvciBjb25zdHJ1Y3RvcnMuCgpUdWUgT2N0IDE0IDExOjQ2OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoc2NyYXRjaGFsbG9jLCBidWlsZF9zY3JhdGNoX2xpc3QsIG1ha2Vfc2NyYXRjaF92ZWMsCglzY3JhdGNoX3RyZWVfY29ucyk6IERlZmluZSBhcyBtYWNyb3MgZm9yIG5vdy4KCSogY2FsbC5jLCBjbGFzcy5jLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLCBleGNlcHQuYywgZXhwci5jLCBpbml0LmMsCglsZXguYywgbWV0aG9kLmMsIHBhcnNlLnksIHB0LmMsIHJ0dGkuYywgc2VhcmNoLmMsIHRyZWUuYywgdHlwZWNrLmMsCgl0eXBlY2syLmM6IFVzZSB0aGVtIGFuZCB0aGUgZXhwcmVzc2lvbl9vYnN0YWNrIHZhcmlhbnRzLgoKTW9uIE9jdCAxMyAxNzo0MToyNiAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX3JldHVybl9pbml0KTogQWxsb3cgY2xhc3NlcyB3aXRoIGV4cGxpY2l0IGN0b3JzIHRvCgliZSB1c2VkIHdpdGggdGhlIG5hbWVkIHJldHVybiB2YWx1ZXMgZXh0ZW5zaW9uLgoKRnJpIE9jdCAxMCAxMjoyMToxMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRml4IHByZXZpb3VzIGNoYW5nZS4KClRodSBPY3QgIDkgMTI6MDg6MjEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRml4IHRoaW5rby4KCShpbnN0YW50aWF0ZV9kZWNsKTogUmVhbGx5IHVzZSB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuCgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IFVzZSBzaW1wbGUgY29uc3RydWN0b3JfbmFtZSBmb3IKCWVycm9yIG1lc3NhZ2VzLgoKV2VkIE9jdCAgOCAyMjo0NDo0MiAxOTk3ICBKZWZmcmV5IEEgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfdW5kZXJzY29yZV9pbnQpOiBEb24ndCB1c2UgQU5TSSBzcGVjaWZpYwoJZmVhdHVyZXMuCgpXZWQgT2N0ICA4IDAwOjE4OjIyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IENoZWNrIERFQ0xfUkVBTExZX0VYVEVSTgoJZm9yIG91ciBrZXkgbWV0aG9kOyBpdCBtaWdodCBoYXZlIGJlZW4gaW5saW5lZCBieSAtTzMuCgpUdWUgT2N0ICA3IDIzOjAwOjEyIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogRG8gbm90IHRyeSB0byBjYWxsIGxvb2t1cF9maWVsZCBmb3IKCW5vbi1hZ2dyZWdhdGUgdHlwZXMuCgpUdWUgT2N0ICA3IDIyOjUyOjEwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9yZWludGVycHJldF9jYXN0KTogVHdlYWsuCgpUdWUgT2N0ICA3IDIyOjQ1OjMxIDE5OTcgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3JlaW50ZXJwcmV0X2Nhc3QpOiBDb252ZXJ0aW5nIGEgdm9pZCBwb2ludGVyCgl0byBmdW5jdGlvbiBwb2ludGVyIHdpdGggYSByZWludGVycHJldF9jYXN0IHByb2R1Y2VzIGEgd2FybmluZwoJaWYgLXBlZGFudGljIGlzIGlzc3VlZC4KClR1ZSBPY3QgIDcgMjI6NDM6NDMgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCB3YXJuIGFib3V0IHJldHVybmluZyBhCglyZWZlcmVuY2UtdHlwZSB2YXJpYWJsZSBhcyBhIHJlZmVyZW5jZS4KClR1ZSBPY3QgIDcgMjE6MTE6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX3N0YXRpY19uYW1lKTogRml4IHR5cG8uCgoxOTk3LTEwLTA3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1ha2Ugc3VyZSBERUNMX0xBTkdfU1BFQ0lGSUMgaXMgc2V0IG9uCglPTERERUNMIGJlZm9yZSB3ZSB0cnkgdG8gZG8gREVDTF9VU0VfVEVNUExBVEUuCgpUdWUgT2N0ICA3IDAwOjQ4OjM2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3Qgd2FybiBhYm91dCB0ZW1wbGF0ZSBpbnN0YW5jZXMuCgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IExvc2UgYW5jaWVudCBjb2RlIHRoYXQgdW5zZXRzCglERUNMX0VYVEVSTkFMLgoKCSogcHQuYyAoZG9fZGVjbF9pbnN0YW50aWF0aW9uKTogTG9zZSBzdXBwb3J0IGZvciBpbnN0YW50aWF0aW5nCglub24tdGVtcGxhdGVzLgoKCSogY2FsbC5jIChidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEZpeCBoYW5kbGluZyBvZiBudWxsIGV4cGxpY2l0Cgl0ZW1wbGF0ZSBhcmdzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKTW9uIE9jdCAgNiAyMzo0NDozNCAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBtZXRob2QuYyAoYnVpbGRfdW5kZXJzY29yZV9pbnQpOiBGaXggdHlwby4KCjE5OTctMTAtMDYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAocHJpbnRfbGFuZ19zdGF0aXN0aWNzKTogI2lmIDAgY2FsbCB0bwoJcHJpbnRfaW5saW5lX29ic3RhY2tfc3RhdGlzdGljcyB1bnRpbCBpdHMgZGVmaW5pdGlvbiBpcyBjaGVja2VkIGluLgoKTW9uIE9jdCAgNiAwOToyNzoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE1vdmUgZHVtcF90cmVlX3N0YXRpc3RpY3MgdG8gZW5kLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IExvb2sgZm9yIHRoZSBvcmlnaW5hbCB0ZW1wbGF0ZS4KCSh0c3Vic3QpOiBTZXQgREVDTF9JTVBMSUNJVF9JTlNUQU5USUFUSU9OIG9uIHBhcnRpYWwgaW5zdGFudGlhdGlvbnMKCW9mIG1lbWJlciB0ZW1wbGF0ZXMuCgpXZWQgT2N0ICAxIDA4OjQxOjM4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChnKytGQVEuKik6IE5ldyBydWxlcy4KCShDT05GTElDVFMpOiBVcGRhdGUuCgkqIGcrK0ZBUS50ZXhpOiBNb3ZlZCBmcm9tIGxpYmcrKy4KCgkqIHBhcnNlLnkgKFBGVU5DTkFNRSk6IE9ubHkgc3BlY2lmeSB0aGUgdHlwZSBvbmNlLgoKMTk5Ny0xMC0wMSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGFzaGVyLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IENsZWFuIHVwIHRoZSBjb2RlIHRvIGZ1bGx5IGJlaGF2ZSB0aGUgd2F5Cgl0aGUgYy1sZXguYyBwYXJzZXIgZG9lcyBmb3IgY29tcGxleCBhbmQgcmVhbCBudW1iZXJzLgoKVHVlIFNlcCAzMCAwODo1MTozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoYnVpbGRfZGVjbF9vdmVybG9hZF9yZWFsKTogUmVmb3JtYXQuCgpUdWUgU2VwIDMwIDAwOjE4OjI2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IElmIGF0X2VvZiwgZGV0ZXJtaW5lIG91ciBsaW5rYWdlLgoKMTk5Ny0wOS0yOSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IFRyZWF0IGAkJyBqdXN0IGxpa2UgYF8nLCBleGNlcHQgaXNzdWUgYQoJZGlhZ25vc3RpYyBpZiAhZG9sbGFyc19pbl9pZGVudCBvciBpZiBwZWRhbnRpYy4KCgkqIGxhbmctc3BlY3MuaCAoQGMrKyk6IC1hbnNpIG5vIGxvbmdlciBpbXBsaWVzIC0kLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKToKCS10cmFkaXRpb25hbCBhbmQgLWFuc2kgbm93IGRvIG5vdCBtZXNzIHdpdGgKCWRvbGxhcnNfaW5faWRlbnQuCgpNb24gU2VwIDI5IDE5OjU3OjUxIDE5OTcgIEguSi4gTHUgIDxoamxAZ251LmFpLm1pdC5lZHU+CgoJKiBNYWtlZmlsZS5pbiAocGFyc2UubywgZGVjbC5vKTogQWxzbyBkZXBlbmQgb24KCSQoc3JjZGlyKS8uLi9leGNlcHQuaCAkKHNyY2RpcikvLi4vb3V0cHV0LmguCgkoZGVjbDIubyk6IEFsc28gZGVwZW5kIG9uICQoc3JjZGlyKS8uLi9leHByLmggLi4vaW5zbi1jb2Rlcy5oCgkkKHNyY2RpcikvLi4vZXhjZXB0LmggJChzcmNkaXIpLy4uL291dHB1dC5oLgoJKHR5cGVjay5vLCBpbml0Lm8pOiBBbHNvIGRlcGVuZCBvbiAkKHNyY2RpcikvLi4vZXhwci5oCgkuLi9pbnNuLWNvZGVzLmguCgoJKiBjYWxsLmMsIGNwLXRyZWUuaCwgZGVjbC5jLCB0cmVlLmM6IEZpbmlzaCBwcm90b3R5cGluZy4KCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBNYWtlIGl0IHN0YXRpYy4KCgkqIGRlY2wyLmMsIGluaXQuYywgdHlwZWNrLmM6IEluY2x1ZGUgImV4cHIuaCIuCgkoZXhwYW5kX2V4cHIpOiBVc2UgcHJvcGVyIHZhbHVlcyB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgoKTW9uIFNlcCAyOSAxMTowNTo1NCAxOTk3ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGxhbmctb3B0aW9ucy5oOiBOZXcgLVdvbGQtc3R5bGUtY2FzdCBmbGFnLgoJKiBjcC10cmVlLmggKHdhcm5fb2xkX3N0eWxlX2Nhc3QpOiBOZXcgdmFyaWFibGUuCgkqIGRlY2wyLmMgKHdhcm5fb2xkX3N0eWxlX2Nhc3QpOiBMaWtld2lzZS4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBTdXBwb3J0IC1Xb2xkLXN0eWxlLWNhc3QuCgkocmVwYXJzZV9hYnNkY2xfYXNfY2FzdHMpOiBQcm9kdWNlIG9sZC1zdHlsZS1jYXN0IHdhcm5pbmcuCgpNb24gU2VwIDI5IDA5OjIwOjUzIDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBBbGxvdyBleHBhbmRfYWdncl9pbml0IHRvIHNldAoJVFJFRV9VU0VELCByZXNldCB2YWx1ZSBiYXNlZCBvbiBhbHJlYWR5X3VzZWQuCgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IFJldmVydCBjaGFuZ2UuCgpNb24gU2VwIDI5IDA4OjU3OjUzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCwgZGVjbC5jLCBkZWNsMi5jLCBwdC5jOgoJTG9zZSBERUNMX0NfU1RBVElDIGFuZCBERUNMX1BVQkxJQy4gIERvbid0IHByZXRlbmQgc3RhdGljcyBhcmUgcHVibGljLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogQWRkIG1pc3NpbmcgOy4KClNhdCBTZXAgMjcgMTY6MjI6NDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZnJpZW5kLmMgKGRvX2ZyaWVuZCk6IERpc2FibGUgaW5qZWN0aW9uIGZvciBhbGwgdGVtcGxhdGUtZGVyaXZlZAoJZGVjbHMuCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEhhbmRsZSAtZmd1aWRpbmctZGVjbHMuCgkqIHBhcnNlLnkgKG5vdHlwZV90ZW1wbGF0ZV9kZWNsYXJhdG9yKTogTmV3IG5vbnRlcm1pbmFsLgoJKGRpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IFVzZSBpdC4KCShjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKG9iamVjdF90ZW1wbGF0ZV9pZCk6IEFjY2VwdCBhbnkga2luZCBvZiBpZGVudGlmaWVyIGFmdGVyIFRFTVBMQVRFLgoJKG5vdHlwZV9xdWFsaWZpZWRfaWQpOiBEb24ndCBhZGQgdGVtcGxhdGUgZGVjbGFyYXRvcnMgaGVyZS4KClNhdCBTZXAgMjcgMTY6MjE6NTggMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogQWRkIGV4cGxpY2l0X3RhcmdzIHBhcmFtZXRlci4KCShidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogQWRkIHNwZWNpYWxpemF0aW9uIHBhc3MgdG8KCWRldGVybWluZSB3aGljaCBtZXRob2RzIHdlcmUgc3BlY2lhbGl6aW5nIHdoaWNoIG90aGVyIG1ldGhvZHMuCgkoaW5zdGFudGlhdGVfdHlwZSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoKCSogY3AtdHJlZS5kZWYgKFRFTVBMQVRFX0lEX0VYUFIpOiBOZXcgdHJlZSBjb2RlLgoKCSogY3AtdHJlZS5oIChuYW1lX21hbmdsaW5nX3ZlcnNpb24pOiBOZXcgdmFyaWFibGUuCgkoZmxhZ19ndWlkaW5nX2RlY2xzKTogTGlrZXdpc2UuCgkoYnVpbGRfdGVtcGxhdGVfZGVjbF9vdmVybG9hZCk6IE5ldyBmdW5jdGlvbi4KCShiZWdpbl9zcGVjaWFsaXphdGlvbik6IExpa2V3aXNlLgoJKHJlc2V0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoZW5kX3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoZGV0ZXJtaW5lX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkoY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24pOiBMaWtld2lzZS4KCShsb29rdXBfdGVtcGxhdGVfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShmbl90eXBlX3VuaWZpY2F0aW9uKTogQWRkIGV4cGxpY2l0X3RhcmdzIHBhcmFtZXRlci4KCSh0eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEFkZCBzbWFydHMgZm9yIGV4cGxpY2l0CglzcGVjaWFsaXphdGlvbnMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUiwgYW5kIGZ1bmN0aW9uCglzcGVjaWFsaXphdGlvbnMuCgkoZ3Jva2ZuZGVjbCk6IENhbGwgY2hlY2tfZXhwbGljaXRfc3BlY2lhbGl6YXRpb24uCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgLWZuYW1lLW1hbmdsaW5nLXZlcnNpb24uCgkoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KCShjaGVja19jbGFzc2ZuKTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucy4KCgkqIGVycm9yLmMgKGR1bXBfZnVuY3Rpb25fbmFtZSk6IFByaW50IHNwZWNpYWxpemF0aW9uIGFyZ3VtZW50cy4KCgkqIGZyaWVuZC5jIChkb19mcmllbmQpOiBEb24ndCBjYWxsIHB1c2hkZWNsIGZvciB0ZW1wbGF0ZQoJaW5zdGFudGlhdGlvbnMuCgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCgoJKiBsYW5nLW9wdGlvbnMuaDogQWRkIC1mbmFtZS1tYW5nbGluZy12ZXJzaW9uLCAtZmd1aWRpbmctZGVjbHMsCglhbmQgLWZuby1ndWlkaW5nLWRlY2xzLgoKCSogbGV4LmMgKGlkZW50aWZpZXJfdHlwZSk6IFJldHVybiBQRlVOQ05BTUUgZm9yIHRlbXBsYXRlIGZ1bmN0aW9uCgluYW1lcy4KCgkqIG1ldGhvZC5jIChidWlsZF9kZWNsX292ZXJsb2FkX3JlYWwpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfdGVtcGxhdGVfcGFybV9uYW1lcyk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogVXNlIGl0LgoJKGJ1aWxkX3VuZGVyc2NvcmVfaW50KTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX292ZXJsb2FkX2ludCk6IFVzZSBpdC4gIEFkZCBsZXZlbHMgZm9yIHRlbXBsYXRlCglwYXJhbWV0ZXJzLgoJKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBMaWtld2lzZS4gIEFsc28sIGhhbmRsZSBUWVBFTkFNRV9UWVBFcy4KCShidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZXMpOiBIYW5kbGUgdGVtcGxhdGUgdHlwZSBwYXJhbWV0ZXJzLgoJKGJ1aWxkX3RlbXBsYXRlX2RlY2xfb3ZlcmxvYWQpOiBOZXcgZnVuY3Rpb24uCgoJKiBwYXJzZS55IChZWVNUWVBFKTogTmV3IG50eXBlIG1lbWJlci4KCShuZXN0ZWRfbmFtZV9zcGVjaWZpZXIpOiBVc2UgaXQuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyXzEpOiBMaWtld2lzZS4KCShQRlVOQ05BTUUpOiBOZXcgdG9rZW4uCgkodGVtcGxhdGVfaWQsIG9iamVjdF90ZW1wbGF0ZV9pZCk6IE5ldyBub24tdGVybWluYWxzLgoJKHRlbXBsYXRlX3Bhcm1fbGlzdCk6IE5vdGUgc3BlY2lhbGl6YXRpb25zLgoJKHRlbXBsYXRlX2RlZik6IExpa2V3aXNlLgoJKHN0cnVjdHNwKTogTGlrZXdpc2UuCgkoZm4uZGVmMik6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KCShkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBIYW5kbGUgdGVtcGxhdGUtaWRzLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KCShkaXJlY3Rfbm90eXBlX2RlY2xhcmF0b3IpOiBIYW5kbGUgdGVtcGxhdGUtaWRzLgoJKHByaW1hcnkpOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUiwgYW5kIHRlbXBsYXRlLWlkcy4KCgkqIHB0LmMgKHByb2Nlc3Npbmdfc3BlY2lhbGl6YXRpb25zKTogTmV3IHZhcmlhYmxlLgoJKHRlbXBsYXRlX2hlYWRlcl9jb3VudCk6IExpa2V3aXNlLgoJKHR5cGVfdW5pZmljYXRpb25fcmVhbCk6IE5ldyBmdW5jdGlvbi4KCShwcm9jZXNzaW5nX2V4cGxpY2l0X3NwZWNpYWxpemF0aW9uKTogTGlrZXdpc2UuCgkobm90ZV90ZW1wbGF0ZV9oZWFkZXIpOiBMaWtld2lzZS4KCShpc19tZW1iZXJfdGVtcGxhdGUpOiBIYW5kbGUgc3BlY2lhbGl6YXRpb25zLgoJKGVuZF90ZW1wbGF0ZV9kZWNsKTogQ2FsbCByZXNldF9zcGVjaWFsaXphdGlvbi4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9ucy4KCSh0c3Vic3QpOiBMaWtld2lzZS4KCSh0c3Vic3RfY29weSk6IEhhbmRsZSBURU1QTEFURV9JRF9FWFBSLgoJKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogSGFuZGxlIHNwZWNpYWxpemF0aW9ucy4KCShpbnN0YW50aWF0ZV9kZWNsKTogTGlrZXdpc2UuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IEhhbmRsZSBleHBsaWNpdF90YXJncy4KCSh0eXBlX3VuaWZpY2F0aW9uKTogTGlrZXdpc2UuICBBbGxvdyBpbmNvbXBsZXRlIHVuaWZpY2F0aW9uCgl3aXRob3V0IGFuIGVycm9yIG1lc3NhZ2UsIGlmIGFsbG93X2luY29tcGxldGUuCgkoZ2V0X2JpbmRpbmdzKTogVXNlIG5ldyBjYWxsaW5nIHNlcXVlbmNlIGZvciBmbl90eXBlX3VuaWZpY2F0aW9uLgoKCSogc3Bldy5jICh5eWxleCk6IEhhbmRsZSBQRlVOQ05BTUUuCgoJKiB0cmVlLmMgKGlzX292ZXJsb2FkZWRfZm4pOiBIYW5kbGUgVEVNUExBVEVfSURfRVhQUi4KCShyZWFsbHlfb3ZlcmxvYWRlZF9mbik6IExpa2V3aXNlLgoJKGdldF9maXJzdF9mbik6IEhhbmRsZSBmdW5jdGlvbiB0ZW1wbGF0ZXMuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVXNlIHJlYWxseV9vdmVybG9hZGVkX2ZuLgoJSGFuZGxlIFRFTVBMQVRFX0lEX0VYUFIuCgkoYnVpbGRfeF91bmFyeV9vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkobWFya19hZGRyZXNzYWJsZSk6IFRlbXBsYXRlcyB3aG9zZSBhZGRyZXNzIGlzIHRha2VuIGFyZSBtYXJrZWQKCWFzIHVzZWQuCgoxOTk3LTA5LTI1ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWNsYXJlIF9fYnVpbHRpbl9jb25zdGFudF9wIGFzCglhY2NlcHRpbmcgYW55IGtpbmQgb2YgdHlwZSwgbm90IG9ubHkgaW50LgoKRnJpIFNlcCAyNiAwMDoyMjo1NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBOb3RpY2UgdmlydHVhbCBiYXNlcyB3aGVuIHNvcnJ5aW5nCglhYm91dCBjb3ZhcmlhbnQgcmV0dXJucy4KCgkqIHBhcnNlLnkgKG1lbWJlcl9pbml0KTogQWxzbyBpbXBseSB0eXBlbmFtZSBoZXJlLiAgUmVtb3ZlIGFuY2llbnQKCWV4dGVuc2lvbiBmb3IgaW5pdGlhbGl6aW5nIGJhc2UgbWVtYmVycy4KClRodSBTZXAgMjUgMTE6MTE6MTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCUhhbmRsZSBtdWx0aS1sZXZlbCB0eXBlbmFtZXMgYW5kIGltcGxpY2l0IHR5cGVuYW1lIGluIGJhc2UgbGlzdC4KCSogcGFyc2UueSAodHlwZW5hbWVfc3VieyxbMC0yXX0pOiBOZXcgcnVsZXMuCgkoc3RydWN0c3AsIHJ1bGUgVFlQRU5BTUVfS0VZV09SRCk6IFVzZSB0eXBlbmFtZV9zdWIuCgkobm9ubmVzdGVkX3R5cGUpOiBOZXcgcnVsZS4KCShjb21wbGV0ZV90eXBlX25hbWUpOiBVc2UgaXQuCgkoYmFzZV9jbGFzcy4xKTogVXNlIHR5cGVuYW1lX3N1YiBhbmQgbm9ubmVzdGVkX3R5cGUuCgkobmVzdGVkX25hbWVfc3BlY2lmaWVyKTogRG9uJ3QgZWxpZGUgc3RkOjogaGVyZS4KCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBIYW5kbGUgZ2V0dGluZyBhIHR5cGUgZm9yIE5BTUUuCgkobG9va3VwX25hbWVfcmVhbCk6IFR1cm4gc3RkOjogaW50byA6OiBoZXJlLgoKCVJ2YWx1ZSBjb252ZXJzaW9ucyB3ZXJlIHJlbW92ZWQgaW4gTG9uZG9uLgoJKiBjYWxsLmMgKGlzX3N1YnNlcSk6IERvbid0IGNvbnNpZGVyIGx2YWx1ZSB0cmFuc2Zvcm1hdGlvbnMuCgkoYnVpbGRfY29udik6IExWQUxVRV9DT05WIGFuZCBSVkFMVUVfQ09OViBnZXQgSURFTlRJVFlfUkFOSy4KCShqb3VzdCk6IFJlLWVuYWJsZSA/OiBrbHVkZ2UuCgoxOTk3LTA5LTIyICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogVXAgd2FybmluZyBvZiBubyByZXR1cm4gdHlwZSB0byBiZSBhCglwZWR3YXJuLgoKTW9uIFNlcCAyMiAxNDoxNTozNCAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IERvbid0IHNldCBUUkVFX1VTRUQuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBNYXJrIGRlY2xzIHVzZWQgaWYgdHlwZSBoYXMgVFJFRV9VU0VECglzZXQsZG9uJ3QgY2xlYXIgVFJFRV9VU0VEIHdob2xlc2FsZS4KClNhdCBTZXAgMjAgMTU6MzE6MDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBEbyByZXF1aXJlX2NvbXBsZXRlX3R5cGUgYmVmb3JlCglidWlsZF9jcGx1c19uZXcuCgpUaHUgU2VwIDE4IDE2OjQ3OjUyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBDYWxsIGNvbXBsZXRlX3R5cGUgaW4gYWxsIGNhc2VzLgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBKdXN0IHdhcm4gYWJvdXQgZmxvd2luZyBvZmYgdGhlIGVuZC4KCldlZCBTZXAgMTcgMTA6MzE6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rcGFybXMpOiBEb24ndCBiYXNoIGEgcGVybWFuZW50IGxpc3Qgbm9kZSBpZiB3ZSdyZQoJaW4gYSBmdW5jdGlvbi4KCjE5OTctMDktMTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBGaXggcy9yIGNvbmZsaWN0IGNvdW50IHRvIDE4LgoKVHVlIFNlcCAxNiAxNDowNjo1NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEdpdmUgYmV0dGVyIGVycm9yIGZvciBzeW50YWN0aWNhbGx5Cgljb3JyZWN0LCBidXQgc2VtYW50aWNhbGx5IGludmFsaWQsIHVzZSBvZiB1bmRlY2xhcmVkIHRlbXBsYXRlLgoKCSogY2FsbC5jIChjb21wYXJlX3F1YWwpOiBIYW5kbGUgcG1mcy4KCgkqIGRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IGxhc3RfcGFybV9jbGVhbnVwX2luc24gaXMgdGhlIGluc24KCWFmdGVyIHRoZSBleGNlcHRpb24gc3BlYy4KCk1vbiBTZXAgMTUgMTE6NTI6MTMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChudWxsX3B0cl9jc3RfcCk6IEludGVnZXIgdHlwZSwgbm90IGludGVncmFsIHR5cGUuCgoJKiBjYWxsLmMgKGpvdXN0KTogRGlzYWJsZSB3YXJuaW5ncyB1bnRpbCB0aGV5IGNhbiBiZSBtb3ZlZCB0byB0aGUKCXJpZ2h0IHBsYWNlLgoKRnJpIFNlcCAxMiAxNjoxMToxMyAxOTk3ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluLCBjb25maWctbGFuZy5pbjogIENvbnZlcnQgdG8gYXV0b2NvbmYuCgpUaHUgU2VwIDExIDE3OjE0OjU1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IEFkZCBpbXBsaWNpdCAndHlwZW5hbWUnIHRvIHR5cGVzIGZyb20KCWJhc2UgY2xhc3Nlcy4KCgkqIHB0LmMgKG1vc3Rfc3BlY2lhbGl6ZWRfY2xhc3MpOiBGaXggdHlwby4KCSh0c3Vic3QpOiBNb3ZlIGNvbnN0YW50IGZvbGRpbmcgdG8gVFJFRV9WRUMgY2FzZS4KClRodSBTZXAgMTEgMTA6MDg6NDUgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoZG9fcG9wbGV2ZWwpOiBEb24ndCB3YXJuIGFib3V0IHVudXNlZCBsb2NhbCB2YXJpYWJsZXMKCXdoaWxlIHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCBzaW5jZSB3ZSBkb24ndCBhbHdheXMga25vdyB3aGV0aGVyCglvciBub3QgdGhleSB3aWxsIG5lZWQgY29uc3RydWN0aW5nL2Rlc3RydWN0aW5nLgoKCSogcHQuYyAodXNlc190ZW1wbGF0ZV9wYXJtcyk6IENoZWNrIHRoZSB2YWx1ZXMgb2YgYW4gZW51bWVyYXRpb24KCXR5cGUgdG8gbWFrZSBzdXJlIHRoZXkgZG9uJ3QgZGVwZW5kIG9uIHRlbXBsYXRlIHBhcm1zLgoKCSogZGVjbC5jIChtYWtlX3R5cGVuYW1lX3R5cGUpOiBEb24ndCBsb29rdXAgdGhlIGZpZWxkIGlmIHRoZQoJY29udGV4dCB1c2VzIHRlbXBsYXRlIHBhcm1zLCBldmVuIGlmIHdlJ3JlIG5vdAoJcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGF0IHRoZSBtb21lbnQuCgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBBdm9pZCBsb29raW5nIGF0IHRoZQoJVFlQRV9MQU5HX0RFQ0wgcG9ydGlvbiBvZiBhIHR5cGVuYW1lIHR5cGUsIHNpbmNlIHRoZXJlIHdvbid0IGJlCglvbmUuCgkodHN1YnN0KTogRG8gY29uc3RhbnQgZm9sZGluZyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHRoYXQKCWFyZ3VtZW50cyBwYXNzZWQgdG8gbG9va3VwX3RlbXBsYXRlX2NsYXNzIHJlYWxseSBhcmUgY29uc3RhbnRzLgoKV2VkIFNlcCAxMCAxMToyMTo1NSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiAjaWZuZGVmIERXQVJGMl9VTldJTkRfSU5GTy4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBPbmx5IHJlZ2lzdGVyIGV4Y2VwdGlvbiB0YWJsZXMgaWYgd2UKCW5lZWQgdG8uCgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIF9fYnVpbHRpbl9bZnNdcC4KClR1ZSBTZXAgIDkgMTk6NDk6MzggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodW5pZnkpOiBKdXN0IHJldHVybiAwIGZvciBhIFRZUEVOQU1FX1RZUEUuCgpUdWUgU2VwICA5IDE3OjU3OjI1IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IEF2b2lkIGNyYXNoaW5nIHdoZW4gcHJlc2VudGVkIHdpdGggYQoJdW5pbml0aWFsaXplZCBjb25zdGFudCwgYXMgY2FuIG9jY3VyIHdpdGggYSB0ZW1wbGF0ZSBwYXJhbWV0ZXIuCgkoZHVtcF9leHByKTogTWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIGVub3VnaCBsZXZlbHMgb2YKCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMgYmVmb3JlIHdlIHN0YXJ0IGRpdmluZyB0aHJvdWdoIHRoZW0uCgoxOTk3LTA5LTA5ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfaW5kaXJlY3RfcmVmKTogSGVlZCBGTEFHX1ZPTEFUSUxFIHNpbWlsYXIgdG8KCWMtdHlwZWNrLmMuCgpUdWUgU2VwICA5IDA5OjM2OjM5IDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAcmhpbm8uY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBDYWxsIGJ1aWxkX2RlbGV0ZSBmb3IgYWxsCglleGNlcHRpb24gdHlwZXMsIG5vdCBqdXN0IG9iamVjdHMgd2l0aCBkZXN0cnVjdG9ycy4KCk1vbiBTZXAgIDggMDI6MzM6MjAgMTk5NyAgSm9keSBHb2xkYmVyZyAgPGpvZHlnQGlkdC5uZXQ+CgoJKiBkZWNsLmMgKGN1cnJlbnRfbG9jYWxfZW51bSk6IFJlbW92ZSBzdGF0aWMuCgkqIHB0LmMgKHRzdWJzdF9lbnVtKTogU2F2ZSBhbmQgcmVzdG9yZSB2YWx1ZSBvZiBjdXJyZW50X2xvY2FsX2VudW0KCWluIGNhc2UgdGVtcGxhdGUgaXMgZXhwYW5kZWQgaW4gZW51bSBkZWNsLgoJKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogVXNlIG5ldyB0c3Vic3RfZW51bSBzaWduYXR1cmUuCgkodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCk1vbiBTZXAgIDggMDE6MjE6NDMgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogcHQuYyAoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBUYWtlIGEgZnVuY3Rpb24gYXMKCWFyZ3VtZW50LCBub3QgYSBzZXQgb2YgdGVtcGxhdGUgYXJndW1lbnRzLiAgVXNlIHRoZSB0ZW1wbGF0ZQoJcGFyYW1ldGVycywgcmF0aGVyIHRoYW4gdGhlIGFyZ3VtZW50cy4gIEhhbmRsZSBub24tdHlwZSBwYXJhbWV0ZXJzCgljb3JyZWN0bHkuICBQdXNoIGEgYmluZGluZyBsZXZlbCBmb3IgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCBtdWx0aXBsZQoJbWVtYmVyIHRlbXBsYXRlcyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXIgbmFtZXMgY2FuIGJlIGRlY2xhcmVkLgoJKGVuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IFBvcCB0aGUgYmluZGluZyBsZXZlbC4KCShwdXNoX3RlbXBsYXRlX2RlY2wpOiBNYXJrIG1lbWJlciB0ZW1wbGF0ZXMgYXMgc3RhdGljIHdoZW4KCWFwcHJvcHJpYXRlLgoKCSogbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IFBhc3MgdGhlIGZ1bmN0aW9uLCBub3QgaXRzIHRlbXBsYXRlCglhcmd1bWVudHMsIHRvIGJlZ2luX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nLgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4KCShkb19wZW5kaW5nX2RlZmFyZ3MpOiBMaWtld2lzZS4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IE9idGFpbiB0aGUgY29ycmVjdCBkZWNsYXJhdGlvbiBmb3IgYQoJVEVNUExBVEVfQ09OU1RfUEFSTS4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NvbnZfY2FuZGlkYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogSGFuZGxlIG1lbWJlciB0ZW1wbGF0ZXMsIGFzIGRvbmUgaW4gdGhlIG90aGVyCglidWlsZF8gZnVuY3Rpb25zLgoKU2F0IFNlcCAgNiAxMDoyMDoyNyAxOTk3ICBNYXJrIE1pdGNoZWxsICA8bW1pdGNoZWxsQHVzYS5uZXQ+CgoJKiBkZWNsLmMgKHJlcGxhY2VfZGVmYWcpOiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KCSogbGV4LmMgKGRvX3BlbmRpbmdfZGVmYXJncyk6IERlYWwgd2l0aCBtZW1iZXIgdGVtcGxhdGVzLgoKCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlKTogQXZvaWQgY3Jhc2hpbmcgd2hlbiBwYXNzZWQgYQoJbm9uLWZ1bmN0aW9uIGFyZ3VtZW50LgoKRnJpIFNlcCAgNSAxNzoyNzozOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChncm93X21ldGhvZCk6IFJlbW92ZSBjaGVjayBmb3IgcmVkZWNsYXJhdGlvbi4KCkZyaSBTZXAgIDUgMDE6Mzc6MTcgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3AtdHJlZS5oIChJTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMpOiBOZXcgbWFjcm8uCgkoREVDTF9JTk5FUk1PU1RfVEVNUExBVEVfUEFSTVMpOiBMaWtld2lzZS4KCShQUklNQVJZX1RFTVBMQVRFX1ApOiBVc2UgaXQuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZGVjbHNfbWF0Y2gpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogTGlrZXdpc2UuCgkoY2xhc3N0eXBlX21hbmdsZWRfbmFtZSk6IExpa2V3aXNlLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChERUNMX05UUEFSTVMpOiBDaGFuZ2UgbmFtZSBmcm9tIERFQ0xfTlRfUEFSTVMgdG8KCURFQ0xfTlRQQVJNUyB0byBjb25mb3JtIHRvIHVzYWdlIGVsc2V3aGVyZS4KCSogY2FsbC5jIChhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShnZXRfYmluZGluZ3MpOiBMaWtld2lzZS4KCgkqIGNsYXNzLmMgKGdyb3dfbWV0aG9kKTogVXNlIERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUCBpbnN0ZWFkIG9mCglpc19tZW1iZXJfdGVtcGxhdGUuCgoJKiBwdC5jICh1bmlmeSk6IFVuZG8gY2hhbmdlcyB0byBhbGxvdyBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUKCXBhcmFtZXRlcnMuCgkodHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCShnZXRfY2xhc3NfYmluZGluZ3MpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChMaWtld2lzZSkuCgoJKiBkZWNsLmMgKHJlcGxhY2VfZGVmYXJnKTogQ2hlY2sgdGhhdCB0aGUgdHlwZSBvZiB0aGUgZGVmYXVsdAoJcGFyYW1ldGVyIGRvZXMgbm90IGludmxvdmUgYSB0ZW1wbGF0ZSB0eXBlIGJlZm9yZSBjb21wbGFpbmluZwoJYWJvdXQgdGhlIGluaXRpYWxpemF0aW9uLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogRGVhbCB3aXRoIHRlbXBsYXRlIGNvbnN0YW50IHBhcmFtZXRlcnMgaW4KCW1lbWJlciB0ZW1wbGF0ZXMgY29ycmVjdGx5LgoKCSogcHQuYyAoaXNfbWVtYmVyX3RlbXBsYXRlKTogRGVhbCB3aXRoIGNsYXNzIHNwZWNpYWxpemF0aW9ucwoJY29ycmVjdGx5LgoJKHRzdWJzdCk6IEhhbmRsZSAicGFydGlhbCBpbnN0YW50aWF0aW9uIiBvZiBtZW1iZXIgdGVtcGxhdGVzCgljb3JyZWN0bHkuCgpXZWQgU2VwICAzIDEyOjMwOjI0IDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIHB0LmMgKHR5cGVfdW5pZmljYXRpb24pOiBDaGFuZ2UgY2FsbGluZyBzZXF1ZW5jZSB0byBhbGxvdyBmb3IKCW11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgoJKHRzdWJzdF9leHByKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTGlrZXdpc2UuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKHVuaWZ5KTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFVzZSBpdC4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBVc2UgaXQuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBVc2UgaXQuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogVXNlIGl0LgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IFVzZSBpdC4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6ICBBZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXIgZm9yCgl0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUuICBDYWxsIGZuX3R5cGVfdW5pZmljYXRpb24gaXN0ZWFkIG9mCgl0eXBlX3VuaWZpY2F0aW9uLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlcy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19vcCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKCSogY2xhc3MuYyAoZ3Jvd19tZXRob2QpOiBEb24ndCBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGluZwoJdGhhdCB0d28gbWVtYmVyIHRlbXBsYXRlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGFtYmlndW91cy4KCShmaW5pc2hfc3RydWN0KTogVHJlYXQgbWVtYmVyIHRlbXBsYXRlIGZ1bmN0aW9ucyBqdXN0IGxpa2UgbWVtYmVyCglmdW5jdGlvbnMuCgoJKiBjcC10cmVlLmggKGNoZWNrX21lbWJlcl90ZW1wbGF0ZSk6IEFkZCBkZWNsYXJhdGlvbi4KCShiZWdpbl9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGVuZF9tZW1iZXJfdGVtcGxhdGVfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKGZuX3R5cGVfdW5pZmljYXRpb24pOiBMaWtld2lzZS4KCShpc19tZW1iZXJfdGVtcGxhdGUpOiBMaWtld2lzZS4KCSh0c3Vic3QpOiBDaGFuZ2UgcHJvdG90eXBlLgoJKHRzdWJzdF9leHByKTogTGlrZXdpc2UuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IExpa2V3aXNlLgoJKGdldF9iaW5kaW5ncyk6IExpa2V3aXNlLgoKCSogZGVjbC5jIChkZWNsc19tYXRjaCk6IEhhbmRsZSBtdWx0aXBsZSBsZXZlbHMgb2YgdGVtcGxhdGUKCXBhcmFtZXRlcnMuCgkocHVzaGRlY2wpOiBIYW5kbGUgdGVtcGxhdGUgdHlwZSBwYXJhbXMganVzdCBsaWtlIG90aGVyIHR5cGUKCWRlY2xhcmF0aW9ucy4KCShwdXNoX2NsYXNzX2xldmVsX2JpbmRpbmcpOiBSZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlCgljbGFzc19iaW5kaW5nX2xldmVsIGlzIE5VTEwuCgkoZ3Jva2ZuZGVjbCk6IElmIGNoZWNrX2NsYXNzZm4oKSByZXR1cm5zIGEgbWVtYmVyX3RlbXBsYXRlLCB1c2UKCXRoZSByZXN1bHQgb2YgdGhlIHRlbXBsYXRlLCBub3QgdGhlIHRlbXBsYXRlIGl0c2VsZi4KCgkqIGRlY2wyLmMgKGNoZWNrX21lbWJlcl90ZW1wbGF0ZSk6IE5ldyBmdW5jdGlvbi4gIENoZWNrIHRvIHNlZQoJdGhhdCB0aGUgZW50aXR5IGRlY2xhcmVkIHRvIGJlIGEgbWVtYmVyIHRlbXBsYXRlIGNhbiBiZSBvbmUuCgkoY2hlY2tfY2xhc3Nmbik6IEFsbG93IHJlZGVjbGFyYXRpb24gb2YgbWVtYmVyIHRlbXBsYXRlIGZ1bmN0aW9ucwoJd2l0aCBkaWZmZXJlbnQgdHlwZXM7IHRoZSBuZXcgZnVuY3Rpb25zIGNhbiBiZSBzcGVjaWFsaXphdGlvbnMgb3IKCWV4cGxpY2l0IGluc3RhbnRpYXRpb25zLgoKCSogZXJyb3IuYyAoZHVtcF9kZWNsKTogSGFuZGxlIG11bHRpcGxlIGxldmVscyBvZiB0ZW1wbGF0ZQoJcGFyYW1ldGVycy4KCShkdW1wX2Z1bmN0aW9uX2RlY2wpOiBVcGRhdGUgdG8gaGFuZGxlIGZ1bmN0aW9uIHRlbXBsYXRlcy4KCgkqIGxleC5jIChkb19wZW5kaW5nX2lubGluZXMpOiBTZXQgdXAgdGVtcGxhdGUgcGFyYW1ldGVyIGNvbnRleHQKCWZvciBtZW1iZXIgdGVtcGxhdGVzLgoJKHByb2Nlc3NfbmV4dF9pbmxpbmUpOiBMaWtld2lzZS4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pZGVudGlmaWVyKTogQWRqdXN0IGZvciBtdWx0aXBsZSBsZXZlbHMKCW9mIHRlbXBsYXRlIHBhcmFtZXRlcnMuCgoJKiBwYXJzZS55IChmbi5kZWYyKTogQWRkIG1lbWJlciB0ZW1wbGF0ZXMuCgkoY29tcG9uZW50X2RlY2xfMSk6IExpa2V3aXNlLgoKCSogcHQuYyAoYmVnaW5fbWVtYmVyX3RlbXBsYXRlX3Byb2Nlc3NpbmcpOiBOZXcgZnVuY3Rpb24uCgkoZW5kX21lbWJlcl90ZW1wbGF0ZV9wcm9jZXNzaW5nKTogTGlrZXdpc2UuCgkoaXNfbWVtYmVyX3RlbXBsYXRlKTogTGlrZXdpc2UuCgkoZm5fdHlwZV91bmlmaWNhdGlvbik6IExpa2V3aXNlLgoJKGN1cnJlbnRfdGVtcGxhdGVfcGFybXMpOiBSZXR1cm4gYSB2ZWN0b3Igb2YgYWxsIHRoZSB0ZW1wbGF0ZQoJcGFybXMsIG5vdCBqdXN0IHRoZSBpbm5lcm1vc3QgbGV2ZWwgb2YgcGFybXMuCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogRGVhbCB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBtZW1iZXIKCXRlbXBsYXRlcy4KCShsb29rdXBfdGVtcGxhdGVfY2xhc3MpOiBMaWtld2lzZS4KCSh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgkodHN1YnN0KTogTW9kaWZ5IHByb2Nlc3NpbmcgdG8gVEVNUExBVEVfVFlQRV9QQVJNIGFuZAoJVEVNUExBVEVfQ09OU1RfUEFSTSB0byBkZWFsIHdpdGggbXVsdGlwbGUgbGV2ZWxzIG9mIHRlbXBsYXRlCglhcmd1bWVudHMuICAgQWRkIHByb2Nlc3Npbmcgb2YgVEVNUExBVEVfREVDTCB0byBwcm9kdWNlIG5ldwoJVEVNUExBVEVfREVDTHMgZnJvbSBvbGQgb25lcy4KCShkb19kZWNsX2luc3RhbnRpYXRpb24pOiBIYW5kbGUgbWVtYmVyIHRlbXBsYXRlcy4KCgkqIHNlYXJjaC5jIChsb29rdXBfZm5maWVsZHNfMSk6IEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgY29udmVyc2lvbgoJb3BlcmF0b3JzLgoKCSogdHJlZS5jIChjcF90cmVlX2VxdWFsKTogQ2hlY2sgdGhlIGxldmVscywgYXMgd2VsbCBhcyB0aGUKCWluZGljZXMsIG9mIFRFTVBMQVRFX0NPTlNUX1BBUk1zLgoKCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IENoZWNrIHRoZSBsZXZlbHMsIGFzIHdlbGwgYXMgdGhlIGluZGljZXMsCglmbyBURU1QTEFURV9UWVBFX1BBUk1zLgoJKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IFRyZWF0IG1lbWJlciB0ZW1wbGF0ZXMgbGlrZSBtZW1iZXIKCWZ1bmN0aW9ucy4KCldlZCBTZXAgIDMgMTE6MDk6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEFsd2F5cyBjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbgoJYmVmb3JlIGNoZWNraW5nIGZvciByZXR1cm5pbmcgYSBwb2ludGVyIHRvIGxvY2FsLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IElmIHN0cmljdCBhbmQgdGhlIGZ1bmN0aW9uIHBhcm0gZG9lc24ndAoJdXNlIHRlbXBsYXRlIHBhcm1zLCBqdXN0IGNvbXBhcmUgdHlwZXMuCgpXZWQgU2VwICAzIDEwOjM1OjQ5IDE5OTcgIEtsYXVzIEVzcGVubGF1YiAgPGtlc3BlbmxhQHN0dWRlbnQuaW5mb3JtYXRpay51bmktdWxtLmRlPgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkZWRfdmFsdWUpOiBSZXBsYWNlIGRpcmVjdCBjYWxsCgl0byB0aGUgZmxvYXRpbmcgcG9pbnQgZW11bGF0b3Igd2l0aCBSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwgbWFjcm8uCgpXZWQgU2VwICAzIDAwOjAyOjUzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IERvbid0IGFyYml0cmFyaWx5IGNob29zZSB0aGUgZmlyc3QKCW9mIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLgoKVHVlIFNlcCAgMiAxMjowOToxMyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IERvbid0IGVsaWRlIF9fRlVOQ1RJT05fXy4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IEFkZCBpbl90ZW1wbGF0ZSBwYXJtLgoJKGJ1aWxkX292ZXJsb2FkX2ludCk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJsb2FkX2lkZW50aWZpZXIpOiBQYXNzIGl0LgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb24ndCBiYXNoIGEgcHJldmlvdXMgdGVtcGxhdGUKCWRlZmluaXRpb24gd2l0aCBhIHJlZGVjbGFyYXRpb24uCgoJKiBwdC5jICh1bmlmeSk6IGZsb2F0IGRvZXNuJ3QgbWF0Y2ggZG91YmxlLgoKCSogcHQuYyAoZG9fdHlwZV9pbnN0YW50aWF0aW9uKTogSGFuZGxlIGdldHRpbmcgYSBfVFlQRSBvciBhCglUWVBFX0RFQ0wuICBIYW5kbGUgZ2V0dGluZyBub24tdGVtcGxhdGUgdHlwZXMuCgkqIHBhcnNlLnkgKGV4cGxpY2l0X2luc3RhbnRpYXRpb24pOiBVc2UgdHlwZXNwZWMgaW5zdGVhZCBvZgoJYWdnciB0ZW1wbGF0ZV90eXBlLgoKVHVlIFNlcCAgMiAxMDoyNzowOCAxOTk3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMxKTogQ2xlYW4gdXAgcHRyLT5pbnQgY2FzdCB3YXJuaW5ncy4KCk1vbiBTZXAgIDEgMTM6MTk6MDQgMTk5NyAgRXVnZW5lIE1hbWNoaXRzICA8ZXVnaW5AaXBzLnJhcy5ydT4KCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogQWRkIG1pc3NpbmcgVFJFRV9UWVBFLgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgpNb24gU2VwICAxIDEzOjE5OjA0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoam91c3QpOiBXYXJuIGFib3V0IGNob29zaW5nIG9uZSBjb252ZXJzaW9uIG9wIG92ZXIKCWFub3RoZXIgYmVjYXVzZSBvZiAndGhpcycgYXJndW1lbnQgd2hlbiB0aGUgb3RoZXIgcmV0dXJuIHR5cGUgaXMKCWJldHRlci4KCShzb3VyY2VfdHlwZSk6IE5ldyBmbi4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogU3RyaXAgbGVhZGluZyBSRUZfQklORCBmcm9tIGZpcnN0IG9wZXJhbmQKCXRvIGJ1aWx0aW4gb3BlcmF0b3IuCgoJKiBkZWNsMi5jIChtYXJrX3Z0YWJsZV9lbnRyaWVzKTogTWFyayBhYm9ydF9mbmRlY2wgYXMgdXNlZCB3aGVuIHdlCgl1c2UgaXRzIFJUTC4KClRodSBBdWcgMjggMDk6NDU6MjMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChudWxsX3B0cl9jc3RfcCk6IFJlbW92ZSBzdXBwb3J0IGZvciAodm9pZCopMC4KCldlZCBBdWcgMjcgMDI6MDM6MzQgMTk5NyAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGV4cGFuZF90YXJnZXRfZXhwcik6IE1ha2UgZGVmaW5pdGlvbiBtYXRjaCBkZWNsYXJhdGlvbi4KCgkqIGNsYXNzLmMgKGdldF9iYXNlZm5kZWNscyk6IE1ha2UgZGVmaW5pdGlvbiBtYXRjaCBkZWNsYXJhdGlvbi4KCk1vbiBBdWcgMjUgMTQ6MzA6MDIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5wdXQuYyAoc3ViX2dldGNoKTogRXZlbnR1YWxseSBnaXZlIHVwIGFuZCByZWxlYXNlIHRoZSBpbnB1dCBmaWxlLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IElmICNwIGkvaSwgcHV0IGlubGluZSBzdGF0aWNzIGluIHRoZQoJcmlnaHQgcGxhY2UuCgoJKiBjYWxsLmMgKGpvdXN0KTogVHdlYWsgbWVzc2FnZS4KClNhdCBBdWcgMjMgMTg6MDI6NTkgMTk5NyAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogZXJyb3IuYyAodHlwZV9hc19zdHJpbmcpOiBQdXQgY29uc3Qvdm9sYXRpbGUgb24gdGVtcGxhdGUgdHlwZQoJcGFyYW1ldGVycyB3aGVyZSBhcHByb3ByaWF0ZS4KClNhdCBBdWcgMjMgMTc6NDc6MjIgMTk5NyAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogY2FsbC5jIChzdHJpY3RseV9iZXR0ZXIpOiBNYWtlIGFyZ3VtZW50cyB1bnNpZ25lZCBpbnRzLgoKVGh1IEF1ZyAyMSAxODo0ODo0NCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IFJlZmVyIHRvIF9fY29tcGxleCBpbnN0ZWFkIG9mIGNvbXBsZXguCgpUaHUgQXVnIDIxIDIyOjI1OjQ2IDE5OTcgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsZXguYyAocmVhbF95eWxleCk6IERvbid0IHVzZSBnZXRjIGRpcmVjdGx5LgoKV2VkIEF1ZyAyMCAxNzoyNTowOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGlzX3N1YnNlcSk6IERvbid0IHRyeSB0byBiZSBjbGV2ZXIuCgpXZWQgQXVnIDIwIDAzOjEzOjM2IDE5OTcgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCgoJKiBwYXJzZS55LCBwdC5jOiBJbmNsdWRlICJleGNlcHQuaCIuCgkqIGNhbGwuYywgY2xhc3MuYywgY2xhc3MuaCwgY3AtdHJlZS5oLCBjdnQuYywgZGVjbC5jLCBkZWNsMi5jLAoJZXJyb3IuYywgZXhjZXB0LmMsIGV4cHIuYywgZnJpZW5kLmMsIGcrK3NwZWMuYywgaW5pdC5jLCBpbnB1dC5jLAoJbGV4LmMsIGxleC5oLCBtZXRob2QuYywgcGFyc2UueSwgcHQuYywgcmVwby5jLCBydHRpLmMsIHNlYXJjaC5jLAoJc2lnLmMsIHNwZXcuYywgdHJlZS5jLCB0eXBlY2suYywgdHlwZWNrMi5jLCB4cmVmLmM6IEZpbmlzaAoJcHJvdG90eXBpbmcuCgpXZWQgQXVnIDIwIDAxOjM0OjQwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBJbnN0ZWFkIG9mIHJlcGxhY2luZyBwdXJlCgl2aXJ0dWFscyB3aXRoIGEgcmVmZXJlbmNlIHRvIF9fcHVyZV92aXJ0dWFsLCBjb3B5IHRoZSBkZWNsIGFuZAoJY2hhbmdlIHRoZSBSVEwuCgpUdWUgQXVnIDE5IDAyOjI2OjA3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGxvb2t1cF9uZXN0ZWRfdHlwZV9ieV9uYW1lKTogSGFuZGxlIHR5cGVkZWYgd2llcmRuZXNzLgoKCSogdHlwZWNrMi5jIChteV9mcmllbmRseV9hYm9ydCk6IFJlcG9ydCBidWdzIHRvIGVnY3MtYnVnc0BjeWdudXMuY29tLgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIHJlcG9fdGVtcGxhdGVfdXNlZAoJYmVmb3JlIGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbC4KCgkqIGNhbGwuYyAoaXNfc3Vic2VxKTogTmV3IGZuLgoJKGNvbXBhcmVfaWNzKTogVXNlIGl0LgoKCSogcmVwby5jIChmaW5pc2hfcmVwbyk6IERvbid0IGNyYXNoIG9uIG5vIGFyZ3MuCgoJKiBwYXJzZS55IChuYW1lZF9jb21wbGV4X2NsYXNzX2hlYWRfc2Fuc19iYXNldHlwZSk6IEhhbmRsZQoJZXhwbGljaXQgZ2xvYmFsIHNjb3BlLgoJKiBkZWNsMi5jIChoYW5kbGVfY2xhc3NfaGVhZCk6IE5ldyBmbi4KCgkqIHB0LmMgKHVuaWZ5KTogQWRkIENPTlNUX0RFQ0wgY2FzZS4KClRodSBBdWcgMTQgMTA6MDU6MTMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcnR0aS5jIChwZXJtYW5lbnRfb2JzdGFjayk6IEZpeCBkZWNsIHRvIG5vdCBiZSBhIHBvaW50ZXIuCgoJKiBjcC10cmVlLmggKHJlcG9ydF90eXBlX21pc21hdGNoKTogQWRkIHByb3RvdHlwZS4KCSogY2FsbC5jIChidWlsZF9vdmVybG9hZF9jYWxsX3JlYWwpOiBSZW1vdmUgZXJyb25lb3VzIGZvdXJ0aAoJYXJndW1lbnQgdG8gcmVwb3J0X3R5cGVfbWlzbWF0Y2guCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFJlbW92ZSBlcnJvbmVvdXMgc2Vjb25kIGFyZyB0bwoJdG91cm5leS4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgpXZWQgQXVnIDEzIDE5OjE5OjI1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGVycm9yLmMgKGR1bXBfZGVjbCk6IERvbid0IGJvdGhlciBwcm9jZXNzaW5nIGEgZnVuY3Rpb24gd2l0aCBubwoJREVDTF9MQU5HX1NQRUNJRklDLgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBDYWxsIGluaXRfZnVuY3Rpb25fc3RhcnQgaW4gdGhlIG1hY3JvIGNhc2UuCgpXZWQgQXVnIDEzIDEwOjQ2OjE5IDE5OTcgIEguSi4gTHUgIChoamxAZ251LmFpLm1pdC5lZHUpCgoJKiBkZWNsMi5jIChERUZBVUxUX1ZUQUJMRV9USFVOS1MpOiBEZWZpbmUgdG8gYmUgMCBpZiBub3QKCWRlZmluZWQgYW5kIHVzZWQgdG8gc2V0IGZsYWdfdnRhYmxlX3RodW5rcy4KClR1ZSBBdWcgMTIgMjA6MTM6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueTogRG9uJ3QgY2xlYXIgdGhlIGlubGluZXMgZnJvbSB0aGVpciBvYnN0YWNrIHVudGlsIHRoZXkndmUKCWFsbCBiZWVuIHByb2Nlc3NlZC4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgZXhjZXB0aW9uCglzcGVjaWZpY2F0aW9uIG1pc21hdGNoIGlmIGZsYWdfZXhjZXB0aW9ucyBpcyBvZmYuCgpNb24gQXVnIDExIDE1OjAxOjU2IDE5OTcgIE1hcmMgTGVobWFubiAgPHBjZ0Bnb29mLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoYysrLmRpc3RjbGVhbik6IFJlbW92ZSBnKysuYyBvbiBtYWtlIGRpc3RjbGVhbi4KClN1biBBdWcgMTAgMTI6MDY6MDkgMTk5NyAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBjcC10cmVlLmg6IFJlcGxhY2UgU1RESU9fUFJPVE8gd2l0aCBQUk9UTyBpbiBpbmNsdWRlIGZpbGVzLgoJKiBjdnQuYywgZXJyb3IuYywgZXhjZXB0LmMsIGV4cHIuYywgZnJpZW5kLmMsIGluaXQuYywgcnR0aS5jOgoJSW5jbHVkZSA8c3RkaW8uaD4gYmVmb3JlIGluY2x1ZGUgZmlsZXMgdGhhdCBmb3JtZXJseSB1c2VkIFNURElPX1BST1RPLgoKCSogZGVjbC5jLCBnKytzcGVjLmMsIGxleC5jLCBtZXRob2QuYywgcmVwby5jOgoJSW5jbHVkZSAiY29uZmlnLmgiIGZpcnN0LCBhcyBwZXIgYXV0b2NvbmYgbWFudWFsLgoKRnJpIEF1ZyAgOCAxMTo0Nzo0OCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFR3ZWFrIHdvcmRpbmcuCgkqIGxleC5jIChkb19wZW5kaW5nX2RlZmFyZ3MpOiBEb24ndCBkaWUgaWYgd2Ugc2VlIGEgZGVmYXVsdCBhcmcKCXRoYXQgaXNuJ3QgYSBERUZBVUxUX0FSRy4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogSGFuZGxlIERFRkFVTFRfQVJHLgoKCSogZGVjbDIuYyAobGFuZ19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1maGFuZGxlLWV4Y2VwdGlvbnMuCgkqIGxhbmctb3B0aW9ucy5oOiBBZGQgLWZoYW5kbGUtZXhjZXB0aW9ucy4KCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZSk6IFZ0YWJsZXMgYXJlIGFydGlmaWNpYWwuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBMaWtld2lzZS4KCldlZCBBdWcgIDYgMTE6MDI6MzYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKG9jcF9jb252ZXJ0KTogQWZ0ZXIgY29udmVydGluZyB0byB0aGUgdGFyZ2V0IHR5cGUsIHNldAoJTE9PS1VQX05PX0NPTlZFUlNJT04uCgoJKiBjYWxsLmMgKGpvdXN0KTogV2FybiBhYm91dCBwb3RlbnRpYWxseSBjb25mdXNpbmcgcHJvbW90aW9uIHJ1bGVzCgl3aXRoIC1Xc2lnbi1wcm9tby4KCSogY3AtdHJlZS5oLCBsYW5nLW9wdGlvbnMuaCwgZGVjbDIuYzogU3VwcG9ydCAtV3NpZ24tcHJvbW8uCgpUdWUgQXVnICA1IDE1OjE1OjA3IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjOiBEZWNsYXJlIF9fdGVybWluYXRlX2Z1bmMgd2l0aCBub3JldHVybiBhdHRyaWJ1dGUuCgpGcmkgQXVnICAxIDAzOjE4OjE1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6IEJyZWFrIG91dCBlYXRfc2F2ZWRfaW5wdXQsIGhhbmRsZSBlcnJvcnMuCgkoZnVuY3Rpb25fdHJ5X2Jsb2NrKTogVXNlIGNvbXBzdG10IGluc3RlYWQgb2YgY29tcHN0bXRfb3JfZXJyb3IuCgpUaHUgSnVsIDMxIDE3OjE0OjA0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfbmV3KTogRG9uJ3Qgc2V0IFRSRUVfQUREUkVTU0FCTEUuCgpGcmkgSnVsICA0IDAxOjQ1OjE2IDE5OTcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIudHh0LCBjcGxpYjIucmVhZHkpOiBJbnN0ZWFkIG9mIGNoZWNraW5nIGZvcgoJZXhpc3RlbmNlIG9mIGNjMXBsdXMgY2hlY2sgd2hldGhlciAkKExBTkdVQUdFUykgY29udGFpbnMgQysrLgoKV2VkIEp1bCAzMCAxMzowNDoyMSAxOTk3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5pbmZvcm1hdGlrLnVuaS1kb3J0bXVuZC5kZT4KCgkqIG1ldGhvZC5jIChkb19idWlsZF9jb3B5X2NvbnN0cnVjdG9yKTogV2hlbiBjb3B5aW5nIGFuIGFub255bW91cwoJdW5pb24gbWVtYmVyIGxvb3AgYXJvdW5kIHRvIGhhbmRsZSBuZXN0ZWQgYW5vbnltb3VzIHVuaW9ucy4gIFVzZQoJdGhlIG9mZnNldCBvZiB0aGUgbWVtYmVyIHJlbGF0aXZlIHRvIHRoZSBvdXRlciBzdHJ1Y3R1cmUsIG5vdCB0aGUKCXVuaW9uLgoKVHVlIEp1bCAyOSAyMToxNzoyOSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKHJlc29sdmVfYXJncyk6IE5ldyBmbi4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IFVzZSBpdC4KCShidWlsZF9vYmplY3RfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoKTW9uIEp1bCAyOCAxNjowMjozNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IHRzdWJzdCBhbGwgZGVmYXVsdCBwYXJtcyBmcm9tIHRlbXBsYXRlcy4KCldlZCBKdWwgMjMgMTM6MzY6MjUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdHJ1Y3QgY3BfZnVuY3Rpb24pOiBBZGQgc3RhdGljX2xhYmVsbm8uCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IFJlc3RvcmUgaXQuCgpUdWUgSnVsIDIyIDE0OjQzOjI5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmXzEpOiBDb252ZXJ0IGZyb20gcmVmZXJlbmNlLgoKVHVlIEp1bCAyMiAxMTowNjoyMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChjdXJyZW50X2RlY2xzcGVjcywgcHJlZml4X2F0dHJpYnV0ZXMpOiBJbml0aWFsaXplIHRvCglOVUxMX1RSRUUuCgoJKiBwYXJzZS55IChpbml0ZGNsMCk6IE1ha2Ugc3VyZSBDVVJSRU5UX0RFQ0xTUEVDUyBpcyBub24tbmlsCgliZWZvcmUgd2UgdHJ5IHRvIGZvcmNlIGl0IHRvIGJlIGEgVFJFRV9MSVNULgoJKGRlY2wpOiBNYWtlIHN1cmUgJDEudCBpcyBub24tbmlsLgoKU3VuIEp1bCAyMCAxMTo1MzowNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIHRlbXBsYXRlIGZpcnN0LXBhcnNlIGNvZGVzLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IE9ubHkgd2FybiBhYm91dCB1c2VyLWRlZmluZWQgc3RhdGljcy4KCkZyaSBKdWwgMTggMTc6NTY6MDggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodW5pZnkpOiBIYW5kbGUgQk9PTEVBTl9UWVBFLgoKCSogY3AtdHJlZS5oOiBMb3NlIFBBUk1fREVGQVVMVF9GUk9NX1RFTVBMQVRFLgoJKiBwdC5jICh0c3Vic3QpOiBEb24ndCBzZXQgaXQuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogVXNlIHVzZXNfdGVtcGxhdGVfcGFybXMuCgpUaHUgSnVsIDE3IDE4OjA2OjMwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uZXN0ZWRfbmFtZSk6IFVzZSBzdGF0aWNfbGFiZWxubwoJaW5zdGVhZCBvZiB2YXJfbGFiZWxuby4KCShidWlsZF9xdWFsaWZpZWRfbmFtZSk6IE5ldyBmbi4KCShidWlsZF9vdmVybG9hZF9uYW1lKTogU3BsaXQgb3V0IGZyb20gaGVyZS4KCShidWlsZF9zdGF0aWNfbmFtZSk6IFVzZSBidWlsZF9xdWFsaWZpZWRfbmFtZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFN0YXRpY3MgaW4gZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMKCWhhdmUgY29tZGF0IGxpbmthZ2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBJbml0aWFsaXplIHN0YXRpY19sYWJlbG5vLgoKVGh1IEp1bCAxNyAxMToyMDoxNyAxOTk3ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QHJoaW5vLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBBZGQgY2hlY2sgb2Ygd2Fybl9jdG9yX2R0b3JfcHJpdmFjeQoJYmVmb3JlICJhbGwgbWVtYmVyIGZ1bmN0aW9ucyBpbiBjbGFzcyBbXSBhcmUgcHJpdmF0ZSIuCgpXZWQgSnVsIDE2IDIzOjQ3OjA4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19zY29wZWRfaWQpOiBjb252ZXJ0X2Zyb21fcmVmZXJlbmNlLgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBMaWtld2lzZS4KCldlZCBKdWwgMTYgMTI6MzQ6MjkgMTk5NyAgQmVuamFtaW4gS29zbmlrICA8YmtvekBsaXNhLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBDaGVjayBUUkVFX09QRVJBTkQgYmVmb3JlIGR1bXBfZXhwcl9saXN0LgoKTW9uIEp1bCAxNCAwMzoyMzo0NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBQcm9tb3RlIGluZGV4CgliZWZvcmUgc2F2aW5nIGl0LgoKU3VuIEp1bCAxMyAwMDoxMTo1MiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGxheW91dF9iYXNldHlwZXMpOiBNb3ZlIG5vbi12aXJ0dWFsIGRlc3RydWN0b3Igd2FybmluZy4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IFJlbW92ZSBub24tdmlydHVhbCBkZXN0cnVjdG9yIHdhcm5pbmcuCgpTYXQgSnVsIDEyIDEyOjQ3OjEyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDYWxsIGFkZF9kZWZhcmdfZm4gZm9yIHRoZSBmdW5jdGlvbgoJdHlwZSwgdG9vLgoJKiBsZXguYyAoYWRkX2RlZmFyZ19mbik6IEFkanVzdC4KCShkb19wZW5kaW5nX2RlZmFyZ3MpOiBBZGp1c3QuICBEb24ndCBza2lwIHRoZSBmaXJzdCBwYXJtLgoKRnJpIEp1bCAxMSAwMTozOTo1MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBHbG9iYWwgZW51bWVyYXRvcnMgYXJlIGFsc28gcmVhZG9ubHkuCgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdF8xKTogUmVuYW1lZCBmcm9tIGJ1aWxkX2R5bmFtaWNfY2FzdC4KCShidWlsZF9keW5hbWljX2Nhc3QpOiBDYWxsIGl0IGFuZCBjb252ZXJ0X2Zyb21fcmVmZXJlbmNlLgoKCSogbGV4LmMgKGFkZF9kZWZhcmdfZm4pOiBOZXcgZm4uCgkoc25hcmZfZGVmYXJnKTogRG9uJ3QgYWRkIHRvIGRlZmFyZ190eXBlcy4KCShkb19wZW5kaW5nX2RlZmFyZ3MpOiBMb3NlIGRlZmFyZ190eXBlcy4gIEFsbCBmbnMgd2UgcHJvY2VzcyBub3cKCWhhdmUgZGVmYXJncy4KCSogZGVjbC5jIChncm9rZm5kZWNsKTogQ2FsbCBhZGRfZGVmYXJnX2ZuLgoKCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IEV4cGVjdCAxOCBzL3IgY29uZmxpY3RzLgoJKiBjcC10cmVlLmRlZjogQWRkIERFRkFVTFRfQVJHLgoJKiBzcGV3LmMgKHl5bGV4KTogQ2FsbCBzbmFyZl9kZWZhcmcgYXMgYXBwcm9wcmlhdGUuCgkqIHBhcnNlLnk6IE5ldyB0b2tlbnMgREVGQVJHIGFuZCBERUZBUkdfTUFSS0VSLgoJKGRlZmFyZ19hZ2FpbiwgcGVuZGluZ19kZWZhcmdzLCBkZWZhcmcsIGRlZmFyZzEpOiBOZXcgcnVsZXMuCgkoc3RydWN0c3ApOiBVc2UgcGVuZGluZ19kZWZhcmdzLgoJKHBhcm1zLCBmdWxsX3Bhcm0pOiBVc2UgZGVmYXJnLgoJKiBsZXguYyAoaW5pdF9sZXgpOiBJbml0aWFsaXplIGlubGluZV90ZXh0X2ZpcnN0b2JqLgoJKGRvX3BlbmRpbmdfaW5saW5lcyk6IE5ldmVyIHBhc3MgdGhlIG9ic3RhY2sgdG8gZmVlZF9pbnB1dC4KCShwcm9jZXNzX25leHRfaW5saW5lKTogQ2FsbCBlbmRfaW5wdXQgaW5zdGVhZCBvZiByZXN0b3JlX3BlbmRpbmdfaW5wdXQuCgkoY2xlYXJfaW5saW5lX3RleHRfb2JzdGFjaywgcmVpbml0X3BhcnNlX2Zvcl9leHByLCBkb19wZW5kaW5nX2RlZmFyZ3MsCglmaW5pc2hfZGVmYXJnLCBmZWVkX2RlZmFyZywgc25hcmZfZGVmYXJnLCBtYXliZV9zbmFyZl9kZWZhcmcpOiBOZXcgZm5zLgoJKiBpbnB1dC5jIChlbmRfaW5wdXQpOiBOZXcgZm4uCgkoc3ViX2dldGNoKTogQXQgdGhlIGVuZCBvZiBzb21lIGZlZCBpbnB1dCwganVzdCBrZWVwIHJldHVybmluZyBFT0YKCXVudGlsIHNvbWVvbmUgY2FsbHMgZW5kX2lucHV0LgoJUmVtb3ZlICdvYnN0YWNrJyBmaWVsZCBmcm9tIHN0cnVjdCBpbnB1dF9zb3VyY2UuCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogSGFuZGxlIERFRkFVTFRfQVJHLgoJKHJlcGxhY2VfZGVmYXJnKTogTmV3IGZuLgoJKiBjcC10cmVlLmggKERFRkFSR19MRU5HVEgsIERFRkFSR19QT0lOVEVSKTogTmV3IG1hY3Jvcy4KCldlZCBKdWwgIDkgMTM6NDQ6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogSWYgbm90aGluZyBlbHNlIHdvcmtzLCB0cnkgYmluZGluZwoJYW4gcnZhbHVlIHRvIGEgcmVmZXJlbmNlLgoKV2VkIEp1bCAgOSAxMzowNDozOCAxOTk3ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEZpeCBKdW4gMzAgcGF0Y2ggLS0gbW92ZQoJaWZuZGVmIGZvciBDeWd3aW4zMiB0byBpbmNsdWRlIFNJR1NFR1YuCgpUaHUgSnVsICAzIDAxOjQ0OjA1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IE9ubHkgY29tcGxhaW4gYWJvdXQgcG9pbnRlcnMgd2l0aG91dAoJY29weSBzdHVmZiBpZiB0aGVyZSBhcmUgYW55IGNvbnN0cnVjdG9ycy4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogQ2FsbCBjb21wbGV0ZV90eXBlIG9uIHRoZSB0eXBlcy4KCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IElmIHRoZSBmdW5jdGlvbiB3ZSBjaG9zZSBkb2Vzbid0IGFjdHVhbGx5CgltYXRjaCwgZGllLgoKCSogZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBEb24ndCBzcGVjaWZ5ICdjb25zdCBpbnQnIGZvciB0aGUKCWFydGlmaWNpYWwgZGVzdHJ1Y3RvciBwYXJtLgoKCSogcHQuYyAodHlwZV91bmlmaWNhdGlvbik6IElmIHdlIGFyZSBjYWxsZWQgcmVjdXJzaXZlbHksIG5vdGhpbmcKCWRlY2F5cy4KCk1vbiBKdW4gMzAgMTc6NTM6MjEgMTk5NyAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBTdG9wIHRyeWluZyB0byBjYXRjaCBzaWduYWxzCglvdGhlciB0aGFuIFNJR0FCUlQgc2luY2UgdGhlIEN5Z3dpbjMyIGxpYnJhcnkgZG9lc24ndCBzdXBwb3J0Cgl0aGVtIGNvcnJlY3RseSB5ZXQuICBUaGlzIGZpeGVzIGEgc2l0dWF0aW9uIGluIHdoaWNoIGcrKyBjYXVzZXMKCWEgaGFuZyBvbiBTSUdTRUdWcyBhbmQgb3RoZXIgc3VjaCBzaWduYWxzIGluIG91ciBXaW4zMi1ob3N0ZWQKCXRvb2xzLgoKTW9uIEp1biAzMCAxNDo1MDowMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhciwgY2FzZSBDQUxMX0VYUFIpOiBIYW5kbGUgYWxsIHRoZSBwYXJzZSBub2RlIGRhdGEuCgpGcmkgSnVuIDI3IDE1OjE4OjQ5IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IEFsd2F5cyByZXR1cm4gdGhlIHZhbHVlIGlmIG91cgoJdHlwZSBuZWVkcyBjb25zdHJ1Y3RpbmcuCgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogQ29udmVydCBjbGFzcyBzdGF0aWNzIGZyb20KCXJlZmVyZW5jZSwgdG9vLgoKVGh1IEp1biAyNiAxMTo0NDo0NiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlLWxhbmcuaW4gKGNwbGliMi5yZWFkeSk6IEFkZCAkKExBTkdVQUdFUykgZGVwZW5kZW5jeS4KClRodSBKdW4gMTkgMTY6NDk6MjggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IE1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCB0ZW1wb3JhcmllcyBhdAoJdGhlIGVuZCBvZiByZXR1cm4geDsKClRodSBKdW4gMTkgMTI6Mjg6NDMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogbGV4LmMgKGNoZWNrX2Zvcl9taXNzaW5nX3NlbWljb2xvbik6IEFsc28gY2hlY2sgZm9yIENWX1FVQUxJRklFUi4KClR1ZSBKdW4gMTcgMTg6MzU6NTcgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KTogQWRkIHN1cHBvcnQKCS1mbm8tc2psai1leGNlcHRpb25zIC1mUElDIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiB0aGUgU1BBUkMuCgpNb24gSnVuIDE2IDAxOjI0OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJlcG8uYyAoZXh0cmFjdF9zdHJpbmcpOiBOdWxsLXRlcm1pbmF0ZS4KCgkqIGNwLXRyZWUuaCAoVElfU1BFQ19JTkZPKTogTmV3IG1hY3JvLgoJKENMQVNTVFlQRV9USV9TUEVDX0lORk8pOiBOZXcgbWFjcm8uCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvcnJlY3RseSBkZXRlcm1pbmUgIyBvZiB0ZW1wbGF0ZSBwYXJtcwoJZm9yIHBhcnRpYWwgc3BlY3MuCgoJKiBjYWxsLmMgKGNvbXBhcmVfaWNzKTogUmVhbGx5IGZpeCAndGhpcycgY29udmVyc2lvbnMuCgoJKiBwdC5jIChkb19kZWNsX2luc3RhbnRpYXRpb24pOiBEb24ndCBjcmFzaCBvbiBleHBsaWNpdCBpbnN0IG9mCglub24tdGVtcGxhdGUgZm4uCgoJKiBwdC5jIChwdXNoX3RlbXBsYXRlX2RlY2wpOiBDb21wbGFpbiBhYm91dCBtaXNtYXRjaCBpbiAjIG9mCgl0ZW1wbGF0ZSBwYXJtcyBiZXR3ZWVuIGEgY2xhc3MgdGVtcGxhdGUgYW5kIGEgbWVtYmVyIHRlbXBsYXRlLgoKU3VuIEp1biAxNSAwMjozODoyMCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBZb3UgY2FuJ3QgY2FsbAoJZnVuY3Rpb25fY2Fubm90X2lubGluZV9wIGFmdGVyIGZpbmlzaF9mdW5jdGlvbi4KCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBUdXJuIG9uIGZsYWdfaW5saW5lX2Z1bmN0aW9ucyBhbmQgdHVybgoJb2ZmIERFQ0xfSU5MSU5FIGJlZm9yZSBoYW5kaW5nIGEgc3ludGhlc2l6ZWQgbWV0aG9kIHRvIHRoZQoJYmFja2VuZC4KClRodSBKdW4gMTIgMTc6MzU6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogUmVtb3ZlIEp1bHkgMzAgY2hhbmdlIHRvIG5ldmVyIHNldAoJREVDTF9JTkxJTkUgaWYgYXRfZW9mLgoKVGh1IEp1biAxMiAxNToyNTowOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB4cmVmLmMgKEdOVV94cmVmX21lbWJlcik6IEVuc3VyZSB0aGF0IHRoZSBub2RlIGhhcyBhCglkZWNsX2xhbmdfc3BlY2lmaWMgcGFydCBiZWZvcmUgY2hlY2tpbmcgREVDTF9GUklFTkRfUC4KClRodSBKdW4gMTIgMTI6MzY6MDUgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBEaWFnbm9zZSBub24tY2xhc3MgdHlwZXMgdXNlZAoJYXMgYmFzZXMuCgpXZWQgSnVuIDExIDE3OjMzOjQwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogVXNlIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uCglpbnN0ZWFkIG9mIGNvbnZlcnRfYW5kX2NoZWNrLgoKV2VkIEp1biAxMSAxMjozMTozMyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55ICh0eXBlc3BlYyk6IERvbid0IHBlZHdhcm4gZm9yIHR5cGVvZi4KClR1ZSBKdW4gMTAgMDA6MjI6MDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcmVwby5jIChmaW5pc2hfcmVwbyk6IE9ubHkgY2hlY2sgY2hhbmdlcyBpZiB3ZSB3b3VsZCB3cml0ZSBhCglyZXBvIGZpbGUuCgoJKiBjYWxsLmMgKGNvbXBhcmVfaWNzKTogRml4IGhhbmRsaW5nIG9mICd0aGlzJyBjb252ZXJzaW9ucy4KCgkqIHB0LmMgKGRvX2RlY2xfaW5zdGFudGlhdGlvbik6IFN1cHBvcnQgc3RhdGljIGRhdGEgdG9vLiAgUmVuYW1lCglmcm9tIGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24uCgkqIGNwLXRyZWUuaDogQWRqdXN0LgoJKiBwYXJzZS55OiBBZGp1c3QuCgoJKiByZXBvLmMgKGV4dHJhY3Rfc3RyaW5nKTogTmV3IGZuLgoJKGdldF9iYXNlX2ZpbGVuYW1lKTogVXNlIGl0LgoJKGluaXRfcmVwbyk6IENvbXBhcmUgb2xkIGFyZ3Mgd2l0aCBjdXJyZW50IGFyZ3MuCgpNb24gSnVuICA5IDE0OjI1OjMwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluLCBNYWtlLWxhbmcuaW46IFByb3RlY3QgQy1scyB3aXRoIGEgY29tbWVudAoJY2hhcmFjdGVyLCBpZGVhIGZyb20gUGF1bCBFZ2dlcnQgPGVnZ2VydEB0d2luc3VuLmNvbT4uCgpNb24gSnVuICA5IDAxOjUyOjAzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBCZSBtb3JlIHBlcnNpc3RlbnQgaW4gbG9va2luZyBmb3IKCXJldHVybmVkIHRlbXBzLgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFVzZSBOT1BfRVhQUiBmb3Igc3dpdGNoaW5nIGZyb20KCXBvaW50ZXIgdG8gcmVmZXJlbmNlLgoKCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IERvbid0IGRvIGFueXRoaW5nIGlmIFBBVEggaGFzIG5vIHN0ZXBzLgoKU3VuIEp1biAgOCAwMzowNzowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsLCBidWlsZF9vZmZzZXRfcmVmKToKCVVzZSBkb19zY29wZWRfaWQgaW5zdGVhZCBvZiBkb19pZGVudGlmaWVyLgoKCSogY3Z0LmMgKGNvbnZlcnQpOiBSZW1vdmUgYm9nb3NpdHkuCgpTYXQgSnVuICA3IDIwOjUwOjE3IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEbyBjaGVja3Mgb2YgQVJHVFlQRSBhbmQKCVRBUkdFVF9UWVBFIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGdldF9iaW5mby4KCkZyaSBKdW4gIDYgMTc6MzY6MzkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IENhbGwgZ2V0X2JpbmZvIHRvIGdldCBhY2Nlc3MgY29udHJvbC4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IElmIHdlIGRvbid0IHN1cHBvcnQgd2Vha3MsIGxlYXZlCglzdGF0aWNzIHVuZGVmaW5lZC4KCkZyaSBKdW4gIDYgMTU6NTU6NDkgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9idWlsdGluX3Rocm93KTogQWRkIHN1cHBvcnQgZm9yIG1hY2hpbmVzIHRoYXQKCWNhbm5vdCBhY2Nlc3MgZ2xvYmFscyBhZnRlciB0aHJvdydzIGVwaWxvZ3VlIHdoZW4KCS1mbm8tc2psai1leGNlcHRpb25zIGlzIHVzZWQuCgpUaHUgSnVuICA1IDE2OjI4OjQzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6ICdzdGQ6OicgYmVjb21lcyAnOjonLgoJKiBsZXguYyAocmVhbF95eWxleCk6IFJlbW92ZSAnbmFtZXNwYWNlJyB3YXJuaW5nLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogSWdub3JlICdzdGQ6OicuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChkb191c2luZ19kaXJlY3RpdmUpOiBJZ25vcmUgJ3VzaW5nIG5hbWVzcGFjZSBzdGQ7Jy4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogSWdub3JlICd1c2luZyBzdGQ6OndoYXRldmVyJy4KCSogZGVjbC5jIChwdXNoX25hbWVzcGFjZSk6IEp1c3Qgc29ycnkuCgkocG9wX25hbWVzcGFjZSk6IE5vcC4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERlY2xhcmUgc3RkIG5hbWVzcGFjZS4KClR1ZSBKdW4gIDMgMTg6MDg6MjMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKHB1c2hfY2xhc3NfZGVjbHMpOiBBIG5hbWUgd2hpY2ggYW1iaWd1b3VzbHkgcmVmZXJzIHRvCglzZXZlcmFsIGluc3RhbnRpYXRpb25zIG9mIHRoZSBzYW1lIHRlbXBsYXRlIGp1c3QgcmVmZXJzIHRvIHRoZQoJdGVtcGxhdGUuCgpUdWUgSnVuICAzIDEyOjMwOjQwIDE5OTcgIEJlbmphbWluIEtvc25payAgPGJrb3pAY2lyZGFuLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGJ1aWxkX2VudW1lcmF0b3IpOiBGaXggcHJvYmxlbSB3aXRoIHVuc2lnbmVkIGxvbmcKCWVudW1lcmF0ZWQgdmFsdWVzIGJlaW5nIHNtYXNoZWQgdG8gaW50cywgY2F1c2luZyBvdmVyZmxvdwoJd2hlbiBjb21wdXRpbmcgbmV4dCBlbnVtZXJhdGVkIHZhbHVlIChmb3IgZW51bSB2YWx1ZXMgYXJvdW5kCglNQVhfVkFMKS4KCk1vbiBKdW4gIDIgMTc6NDA6NTYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBPbmx5IGNhbGwgbWFya191c2VkIG9uIGEgZGVjbC4KClRodSBNYXkgMjkgMTU6NTQ6MTcgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IE1ha2UgdGhlIGNoZWNrIGZvciBhIHB0ciB0byBmdW5jdGlvbgoJbW9yZSBzcGVjaWZpYyBiZWZvcmUgcG9zc2libGUgZGVmYXVsdF9jb252ZXJzaW9uIGNhbGwuCgpUaHUgTWF5IDI5IDEzOjAyOjA2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZXhjZXB0aW9uX2Jsb2Nrcyk6IFNpbXBsaWZ5IGFuZCBmaXggYW5kIG1ha2UKCXN1cmUgd2UgZG9uJ3QgZW5kIGEgcmVnaW9uIGluIGEgc2VxdWVuY2UsIGFzIGV4cGFuZF9lbmRfYmluZGluZ3MKCWRvZXNuJ3QgbGlrZSBpdC4KCldlZCBNYXkgMjggMTc6MDg6MDMgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBNYXJrIHRlcm1pbmF0ZSBhcyBub3QKCXJldHVybmluZyBzbyB0aGF0IHRoZSBvcHRpbWl6ZXIgY2FuIG9wdGltaXplIGJldHRlci4KClR1ZSBNYXkgMjcgMTk6NDk6MTkgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnQpOiBEb24ndCBkbyBhbnkgZXh0cmEgd29yaywgaWYgd2UgY2FuIGF2b2lkIGl0CgllYXNpbHkuCgpUdWUgTWF5IDI3IDE4OjIxOjQ3IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqICouW2NoeV06IENoYW5nZSBjcF9jb252ZXJ0IHRvIG9jcF9jb252ZXJ0LCBjaGFuZ2UgY29udmVydCB0bwoJY3BfY29udmVydC4gIGNvbnZlcnQgaXMgbm93IHJlc2VydmVkIGZvciB0aGUgYmFja2VuZCwgYW5kIGRvZXNuJ3QKCWhhdmUgdGhlIHNlbWFudGljcyBhIGZyb250ZW5kIHBlcnNvbiBzaG91bGQgZXZlciB3YW50LgoKRnJpIE1heSAyMyAxMDo1ODozMSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IERlZmluZSBfX0VYQ0VQVElPTlMgaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZC4KCUxvc2UgLXRyYWRpdGlvbmFsIHN1cHBvcnQuCgpUaHUgTWF5IDIyIDE1OjQxOjI4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoZ2V0X3RpbmZvX3Zhcik6IFVzZSBUWVBFX1BSRUNJU0lPTiAoc2l6ZXR5cGUpLgoKCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBEbyBpdCBmb3IgdGVtcGxhdGVzLCB0b28uCgkqIGNsYXNzLmMgKHB1c2hjbGFzcyk6IERvbid0IG92ZXJsb2FkX3RlbXBsYXRlX25hbWU7IHRoZSBhbGlhcwoJZ2VuZXJhdGVkIGJ5IGJ1aWxkX3NlbGZfcmVmZXJlbmNlIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlLgoKCSogdHJlZS5jIChsaXN0X2hhc2gpOiBNYWtlIHN0YXRpYywgdGFrZSBtb3JlIGFyZ3MuCgkobGlzdF9oYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGxpc3RfaGFzaF9hZGQpOiBNYWtlIHN0YXRpYy4KCShsaXN0X2hhc2hfY2Fub24pOiBMb3NlLgoJKGhhc2hfdHJlZV9jb25zKTogT25seSBidWlsZCBhIG5ldyBub2RlIGlmIG9uZSBpc24ndCBhbHJlYWR5IGluIHRoZQoJaGFzaHRhYmxlLgoJKGhhc2hfdHJlZV9jaGFpbik6IFVzZSBoYXNoX3RyZWVfY29ucy4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgkqIGRlY2wuYyAoZ3Jva2ZuZGVjbCk6IEp1c3QgY2hlY2sgSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgaW5zdGVhZAoJb2YgY2FsbGluZyBsb29rdXBfbmFtZS4KCldlZCBNYXkgMjEgMTg6MjQ6MTkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBUWVBFX1ZBTFVFUyBmb3IgYW4gZW51bQoJZG9lc24ndCByZWZlciB0byB0aGUgQ09OU1RfREVDTHMuCgpUdWUgTWF5IDIwIDIxOjA5OjMyIDE5OTcgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcnR0aS5jIChnZXRfdGluZm9fdmFyKTogRWl0aGVyIElOVF9UWVBFX1NJWkUgb3IgMzIsIHdoaWNoZXZlcgoJaXMgYmlnZ2VyLgoJKGV4cGFuZF9jbGFzc19kZXNjKTogQ29udmVydCB0aGUgbGFzdCBhcmd1bWVudCB0byBhIHNpemV0eXBlLgoKVHVlIE1heSAyMCAxMzo1NTo1NyAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBneHguZ3BlcmYgKF9fY29tcGxleCwgX19jb21wbGV4X18sIF9faW1hZywgX19pbWFnX18sIF9fcmVhbCwKCV9fcmVhbF9fKTogQWRkIHJlc3dvcmRzLgoJKiBoYXNoLmg6IFJlZ2VuZXJhdGUuCgkqIGxleC5oIChyaWQpOiBBZGQgUklEX0NPTVBMRVguCgkoUklEX0xBU1RfTU9ESUZJRVIpOiBTZXQgdG8gUklEX0NPTVBMRVguCgkqIGxleC5jIChpbml0X2xleCk6IEFkZCBidWlsZGluZyBvZiBSSURfQ09NUExFWC4KCShyZWFsX3l5bGV4KTogR2VuZXJhbCBjbGVhbnVwIGluIGxpbmUgd2l0aCB3aGF0IGMtbGV4LmMgYWxzbyBoYXMsCglzYW5zIHRoZSBjcnVmdCBmb3IgdHJhZGl0aW9uYWw7IGFkZCBoYW5kbGluZyBvZiBTUEVDX0lNQUcsIGNvbXBsZXgKCXR5cGVzLCBhbmQgaW1hZ2luYXJ5IG51bWVyaWMgY29uc3RhbnRzLgoJKiBwYXJzZS55IChSRUFMUEFSVCwgSU1BR1BBUlQpOiBBZGQgdG9rZW5zLgoJKHVuYXJ5X2V4cHIpOiBBZGQgUkVBTFBBUlQgYW5kIElNQUdQQVJUIHJ1bGVzLgoJKiBjcC10cmVlLmggKGNvbXBsZXhfe2ludGVnZXIsZmxvYXQsZG91YmxlLGxvbmd9X3R5cGVfbm9kZSk6IERlY2xhcmUuCgkqIGRlY2wuYyAoY29tcGxleF97aW50ZWdlcixmbG9hdCxkb3VibGUsbG9uZ31fdHlwZV9ub2RlKTogRGVmaW5lCgl0eXBlcy4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFNldCB1cCB0aGUgdHlwZXMuCgkoZ3Jva2RlY2xhcmF0b3IpOiBBZGQgaGFuZGxpbmcgb2YgUklEX0NPTVBMRVguICBTZXQgYW5kIHVzZQoJREVGQVVMVEVEX0lOVCBpbnN0ZWFkIG9mIEVYUExJQ0lUX0lOVCB3aGVuIHdlIGRlZmF1bHQgdG8gaW50IHR5cGUuCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogSGFuZGxlIENPTVBMRVhfVFlQRS4KCSogZXJyb3IuYyAoZHVtcF90eXBlX3ByZWZpeCwgZHVtcF90eXBlLCBkdW1wX3R5cGVfc3VmZml4KTogQWRkCglDT01QTEVYX1RZUEUgY2FzZS4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX25hbWUpOiBBZGQgaGFuZGxpbmcgb2YgdGhlIGRpZmZlcmVudAoJQ09NUExFWF9UWVBFcywgcHJlZml4aW5nIHRoZW0gd2l0aCBgSicuCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IERvbid0IGxldCB0aGVtIHVzZSBhIENPTVBMRVhfVFlQRQoJYXMgYSB0ZW1wbGF0ZSBwYXJtLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMsIHRzdWJzdCwgdW5pZnkpOiBBZGQgQ09NUExFWF9UWVBFIGNhc2UuCgkqIHRyZWUuYyAobHZhbHVlX3ApOiBBZGQgUkVBTFBBUlRfRVhQUiBhbmQgSU1BR1BBUlRfRVhQUiBjYXNlcy4KCShtYXBjYXIpOiBIYW5kbGUgQ09NUExFWF9DU1QuCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogSGFuZGxlIENPTVBMRVhfVFlQRS4KCShjb21tb25fdHlwZSk6IEFkZCBjb2RlIGZvciBjb21wbGV4IHR5cGVzLgoJKGJ1aWxkX3VuYXJ5X29wKTogQWRkIFJFQUxQQVJUX0VYUFIgYW5kIElNQUdQQVJUX0VYUFIgY2FzZXMuCgkoY29udmVydF9mb3JfYXNzaWdubWVudCk6IExpa2V3aXNlLgoJKG1hcmtfYWRkcmVzc2FibGUpOiBBZGQgUkVBTFBBUlRfRVhQUiBhbmQgSU1BR1BBUlRfRVhQUiBjYXNlcy4KCk1vbiBNYXkgMTkgMTI6MjY6MjcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogRG9uJ3QgcGFzcyB0aGUgTUlOVVNfRVhQUiBmb3IgYW4gYXJyYXkgZG9tYWluIHRvCgl0c3Vic3RfZXhwciwgYXMgaXQgbWlnaHQgdHJ5IHRvIGRvIG92ZXJsb2FkIHJlc29sdXRpb24uCgpTYXQgTWF5IDE3IDEwOjQ4OjMxIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogT29wcy4KCkZyaSBNYXkgMTYgMTQ6MjM6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBUQUdfREVGTi4KCSogcHQuYyAodHN1YnN0X2VudW0pOiBOZXcgZm4uCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgaXQuCgkodHN1YnN0X2V4cHIpOiBTdXBwb3J0IFRBR19ERUZOLgoJKHRzdWJzdCk6IFN1cHBvcnQgbG9jYWwgZW51bXMuCgkodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IExpa2V3aXNlLgoJKHN0YXJ0X2VudW0pOiBJZiB0aGlzIGlzIGEgbG9jYWwgZW51bSwgc3dpdGNoIHRvIHBlcm1hbmVudF9vYnN0YWNrLgoKV2VkIE1heSAxNCAxOTowODoyOCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX3Bhcm1fZGVjbHMpOiBTZXQgbGFzdF9wYXJtX2NsZWFudXBfaW5zbiBoZXJlLgoJKGZpbmlzaF9mdW5jdGlvbik6IFB1dCB0aGUgYmFzZSBpbml0IGNvZGUgZm9yIGNvbnN0cnVjdG9ycyBqdXN0CglhZnRlciB0aGUgcGFybSBjbGVhbnVwIGluc25zLgoJKHN0cnVjdCBjcF9mdW5jdGlvbik6IEFkZCBsYXN0X3Bhcm1fY2xlYW51cF9pbnNuLgoJKHB1c2hfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoJKHBvcF9jcF9mdW5jdGlvbl9jb250ZXh0KTogTGlrZXdpc2UuCgpUdWUgTWF5IDEzIDE1OjUxOjIwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSGFuZGxlIEJJVF9OT1RfRVhQUi4KCldlZCBNYXkgIDcgMTE6MTc6NTkgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspIFtBU01fT1VUUFVUX01JX1RIVU5LXTogQnVpbGQgdXAgdGhlIFJUTAoJZm9yIFRIVU5LX0ZOREVDTCBiZWZvcmUgd2Ugc3dpdGNoIHRvIHRlbXBvcmFyeSBhbGxvY2F0aW9uLgoKTW9uIE1heSAgNSAxNDo0Njo1MyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEhhbmRsZSBudWxsIGFyZzIgZm9yID86LgoKVGh1IE1heSAgMSAxODoyNjozNyAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBFbnN1cmUgdGhhdCB3ZSBmbG93IHRocm91Z2gKCXRoZSBlbmQgb2YgdGhlIGV4Y2VwdGlvbiByZWdpb24gZm9yIHRoZSBleGNlcHRpb24gc3BlY2lmaWNhdGlvbi4KCU1vdmUgZXhjZXB0aW9uIHJlZ2lvbiBmb3IgdGhlIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIGluLCBzbyB0aGF0CglpdCBkb2Vzbid0IHByb3RlY3QgdGhlIHBhcm0gY2xlYW51cC4gIFJlbW92ZSBzb21lIG9ic29sZXRlIGNvZGUuCgkqIGRlY2wuYyAoc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgoJKGZpbmlzaF9mdW5jdGlvbik6IExpa2V3aXNlLgoKVHVlIEFwciAyOSAxNTozODo1NCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IEZpeCBub3Rocm93IGhhbmRsaW5nLgoKVHVlIEFwciAyOSAxNDoyOTo1MCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGVtaXRfYmFzZV9pbml0KTogRG9uJ3Qgd2FybiBhYm91dCB0aGUgaW5pdGlhbGl6YXRpb24KCWxpc3QgZm9yIGFuIGFydGlmaWNpYWwgbWVtYmVyLgoKRnJpIEFwciAyNSAxNzo0Nzo1OSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGRvX2Nhc2UpOiBIYW5kbGUgIVNUQVJUIGNhc2UgZm9yIHRoZSBlcnJvciBtc2cuCgpGcmkgQXByIDI1IDExOjU1OjIzIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMsIGxhbmctb3B0aW9ucy5oOiBOZXcgb3B0aW9uIC1XZWZmYysrLgoJKiBjbGFzcy5jLCBkZWNsLmMsIGluaXQuYywgdHlwZWNrLmM6IE1vdmUgRWZmZWN0aXZlIEMrKyB3YXJuaW5ncwoJdG8gLVdlZmZjKysuCgoJKiBkZWNsMi5jIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBDaGFuZ2UgTk9fTElOS0FHRV9IRVVSSVNUSUNTCgl0byBNVUxUSVBMRV9TWU1CT0xfU1BBQ0VTLgoKV2VkIEFwciAyMyAxODowNjo1MCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuaywgZ2VuZXJpYyBjYXNlKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25faXNfdGh1bmsuCgoJKiBtZXRob2QuYyAoZW1pdF90aHVuaywgbWFjcm8gY2FzZSk6IFNldCB1cCBERUNMX1JFU1VMVC4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBEb24ndCBjb21wbGFpbiBhYm91dCByZXR1cm5pbmcgdm9pZAoJdG8gdm9pZCBpbiBhbiBhcnRpZmljaWFsIGZ1bmN0aW9uLgoJKiBtZXRob2QuYyAobWFrZV90aHVuayk6IENoYW5nZSBzZXR0aW5ncyBvZiBSRUFET05MWS9WT0xBVElMRSwKCWRvbid0IHNldCBERUNMX1JFU1VMVCwgc2V0IERFQ0xfQVJUSUZJQ0lBTC4KCShlbWl0X3RodW5rLCBnZW5lcmljIGNvZGUpOiBBbHNvIHNldCB1cCBERUNMX0xBTkdfU1BFQ0lGSUMuCgpXZWQgQXByIDIzIDE0OjQzOjA2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgc3VwcG9ydCBmb3Igc2V0am1wL2xvbmdqbXAgYmFzZWQKCWV4Y2VwdGlvbiBoYW5kbGluZy4KCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogTGlrZXdpc2UuCgkoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBMaWtld2lzZS4KCShleHBhbmRfdGhyb3cpOiBMaWtld2lzZS4KCSogZXhjZXB0aW9uLmNjIChfX2RlZmF1bHRfdGVybWluYXRlKTogTGlrZXdpc2UuCgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBVc2UgbmV3IG1ldGhvZCBvZiBleHByIGxldmVsCgljbGVhbnVwcywgaW5zdGVhZCBvZiBjbGVhbnVwc190aGlzX2NhbGwgYW5kIGZyaWVuZHMuCgkoZW1pdF9iYXNlX2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl92YmFzZV9pbml0XzEpOiBMaWtld2lzZS4KCShleHBhbmRfdmVjX2luaXQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKGV4cGFuZF9zdGF0aWNfaW5pdCk6IExpa2V3aXNlLgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgoJKiBNYWtlLWxhbmcuaW4gKGV4Y2VwdGlvbi5vKTogT2sgdG8gY29tcGlsZSB3aXRoIC1PIG5vdy4KCgkqIGRlY2wuYyAobWF5YmVfYnVpbGRfY2xlYW51cF8xKTogV2Ugbm8gbG9uZ2VyIGhhdmUgdG8gdW5zYXZlLCBhcwoJd2Uga25vdyBpdCB3aWxsIGJlIGRvbmUgbGF0ZXIgYnkgdGhlIGJhY2tlbmQuCgoJKiBkZWNsMi5jIChsYW5nX2Zfb3B0aW9ucyk6IFJlbW92ZSBzdXBwb3J0IGZvciBzaG9ydCB0ZW1wcy4KCSogbGFuZy1vcHRpb25zLmg6IExpa2V3aXNlLgoKV2VkIEFwciAyMyAwNDoxMjowNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHZhcmFyZ3NfZnVuY3Rpb25fcCk6IE5ldyBmbi4KCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBSZXBsYWNlIGJyb2tlbiBnZW5lcmljIGNvZGUgd2l0aCBjb2RlIHRvCglnZW5lcmF0ZSBhIGhlYXZ5d2VpZ2h0IHRodW5rIGZ1bmN0aW9uLgoKVHVlIEFwciAyMiAwMjo0NToxOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBwZWR3YXJuIGFib3V0IGZsb2F0aW5nLXBvaW50IHBhcm1zLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IGlubGluZSBubyBsb25nZXIgaW1wbGllcyBzdGF0aWMuCgoJKiBzcGV3LmMgKHl5bGV4KTogQWx3YXlzIHJldHVybiB0aGUgVFlQRV9ERUNMIGlmIHdlIGdvdCBhIHNjb3BlLgoKTW9uIEFwciAyMSAxNTo0MjoyNyAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChjaGVja19mb3Jfb3ZlcnJpZGUpOiBUaGUgc2lnbmF0dXJlIG9mIGFuIG92ZXJyaWRpbmcKCWZ1bmN0aW9uIGlzIG5vdCBjaGFuZ2VkLgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBNb3ZlIHNldHRpbmcgb2YgY29udiBpbnRvIHRoZSBsb29wLgoJTm90ZTogdGhpcyBjaGFuZ2UsIGFsb25nIHdpdGggdGhlIHJlbGF0ZWQgY2hhbmdlcyBvZiB0aGUgMTh0aCB0aHJ1Cgl0aGUgMjB0aCBvZiBBcHJpbCwgZml4IGFuIGluZmluaXRlIGxvb3AgcHJvYmxlbSBpbiBjb252ZXJzaW9ucy4KClN1biBBcHIgMjAgMTY6MjQ6MjkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogUmVhbGx5IGlnbm9yZSBydmFsdWUKCWNvbnZlcnNpb25zIHdoZW4gbG9va2luZyBmb3IgYSBSRUZFUkVOQ0VfVFlQRS4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBFdmlzY2VyYXRlLCB1c2UgYnVpbGRfdW5hcnlfb3AuCgkqIGNwLXRyZWUuaCAoVFJFRV9SRUZFUkVOQ0VfRVhQUik6ICNpZiAwLgoJKiB0eXBlY2suYyAoZGVjYXlfY29udmVyc2lvbik6IERvbid0IHNldCBUUkVFX1JFRkVSRU5DRV9FWFBSLgoJKGJ1aWxkX3VuYXJ5X29wKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogU2VlIHRocm91Z2ggYSBDT05WRVJUX0VYUFIgYXJvdW5kIHRoZQoJQUREUl9FWFBSIGZvciBvbiBhIHRlbXBvcmFyeS4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IFNlZSB0aHJvdWdoIGEgQ09OVkVSVF9FWFBSIGFyb3VuZAoJdGhlIEFERFJfRVhQUiBmb3IgYSBsb2NhbCB2YXJpYWJsZS4KCkZyaSBBcHIgMTggMTI6MTE6MzMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSWYgd2UncmUgdHJ5aW5nIHRvCgljb252ZXJ0IHRvIGEgUkVGRVJFTkNFX1RZUEUsIG9ubHkgY29uc2lkZXIgbHZhbHVlIGNvbnZlcnNpb25zLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogUHJpbnQgY2FuZGlkYXRlcy4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogVHJ5IGEgdGVtcCBiaW5kaW5nIGlmIHRoZSBsdmFsdWUgY29udiBpcyBCQUQuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBCaW5kaW5nIGEgdGVtcG9yYXJ5IG9mIGEgcmVmZXJlbmNlLXJlbGF0ZWQgdHlwZQoJaXMgQkFELgoKVGh1IEFwciAxNyAxNDozNzoyMiAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBpbmMvdHlwZWluZm8gKHR5cGVfaW5mbzo6YmVmb3JlKTogQWRkIGN2LXF1YWxpZmllci1zZXEuCgkqIHRpbmZvMi5jYyAodHlwZV9pbmZvOjpiZWZvcmUpOiBMaWtld2lzZS4KCk1vbiBBcHIgMTQgMTI6Mzg6MTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogT29wcy4KCkZyaSBBcHIgMTEgMDI6MTg6MzAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChpbXBsaWNpdF9jb252ZXJzaW9uKTogVHJ5IHRvIGZpbmQgYSByZWZlcmVuY2UgY29udmVyc2lvbgoJYmVmb3JlIGJpbmRpbmcgYSBjb25zdCByZWZlcmVuY2UgdG8gYSB0ZW1wb3JhcnkuCgpXZWQgQXByICAyIDEyOjUxOjM2IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdGlvbi5jYyAoX19kZWZhdWx0X3VuZXhwZWN0ZWQpOiBDYWxsIHRlcm1pbmF0ZSBieSBkZWZhdWx0LAoJc28gdGhhdCBpZiB0aGUgdXNlciBvdmVycmlkZXMgdGVybWluYXRlLCB0aGUgY29ycmVjdCBmdW5jdGlvbiB3aWxsCgliZSBjYWxsZWQuCgpXZWQgTWFyIDE5IDE0OjE0OjQ1IDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGxlZnRfY3VybHkpOiBBdm9pZCB0cnlpbmcgdG8gdXNlIGFueSBmaWVsZHMgb2YKCWVycm9yX21hcmtfbm9kZSwgYXMgdGhlcmUgYXJlbid0IGFueS4KClRodSBNYXIgMTMgMTY6MzM6MjIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiBBdm9pZCBicmVha2luZyBvbiBvdmVybG9hZGVkIG1ldGhvZHMKCWFzIGRlZmF1bHQgYXJndW1lbnRzLgoKV2VkIE1hciAxMiAxMzo1NToxMCAxOTk3ICBIYW5zLVBldGVyIE5pbHNzb24gIDxIYW5zLVBldGVyLk5pbHNzb25AYXhpcy5zZT4KCgkqIGNhbGwuYyAoYWRkX3RlbXBsYXRlX2NhbmRpZGF0ZSk6IEluaXRpYWxpemUgdGhlIHZhcmlhYmxlICJkdW1teSIuCgpNb24gTWFyIDEwIDE1OjEzOjE0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGNhbnVjay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzdGFydF9kZWNsKTogTWFrZSBzdXJlIFRZUEUgaXNuJ3QgYW4gZXJyb3JfbWFya19ub2RlCgliZWZvcmUgd2UgdHJ5IHRvIHVzZSBUWVBFX1NJWkUgYW5kIFRSRUVfQ09OU1RBTlQgb24gaXQuCgpGcmkgTWFyICA3IDEzOjE5OjM2IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoY29tcF9wdHJfdHR5cGVzLCBtb3JlX3NwZWNpYWxpemVkKTogQWRkIGRlY2wuCgkoZGVidWdfYmluZm8pOiBEZWxldGUgZGVjbCwgbm90IG5lZWRlZC4KCgkqIHRyZWUuYyAoZm5hZGRyX2Zyb21fdnRhYmxlX2VudHJ5LCBmdW5jdGlvbl9hcmdfY2hhaW4sCglwcm9tb3Rlc190b19hZ2dyX3R5cGUpOiBEZWxldGUgZm5zLgoJKiBjcC10cmVlLmggKEZOQUREUl9GUk9NX1ZUQUJMRV9FTlRSWSwKCVNFVF9GTkFERFJfRlJPTV9WVEFCTEVfRU5UUlksIEZVTkNUSU9OX0FSR19DSEFJTiwKCVBST01PVEVTX1RPX0FHR1JfVFlQRSk6IERlbGV0ZSBhbHRlcm5hdGVzIHRvICNpZiAxLgoKCSogZGVjbC5jIChwZW5kaW5nX2ludmFsaWRfeHJlZnssX2ZpbGUsX2xpbmV9KTogRGVsZXRlIHVudXNlZCB2YXJzLgoKCSogZnJpZW5kLmMgKGlzX2ZyaWVuZF90eXBlKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGlzX2ZyaWVuZF90eXBlKTogRGVsZXRlIGRlY2wuCgoJKiBkZWNsLmMgKG9yaWdpbmFsX3Jlc3VsdF9ydHgsIGRvdWJsZV9mdHlwZV9kb3VibGUsCglkb3VibGVfZnR5cGVfZG91YmxlX2RvdWJsZSwgaW50X2Z0eXBlX2ludCwgbG9uZ19mdHlwZV9sb25nLAoJZmxvYXRfZnR5cGVfZmxvYXQsIGxkb3VibGVfZnR5cGVfbGRvdWJsZSwgbGFzdF9kdG9yX2luc24pOiBNYWtlIHN0YXRpYy4KCSogdHlwZWNrLmMgKG9yaWdpbmFsX3Jlc3VsdF9ydHgsIHdhcm5fc3ludGgpOiBEZWxldGUgZXh0ZXJuIGRlY2xzLgoKCSogZGVjbC5jIChwdXNoX292ZXJsb2FkZWRfZGVjbHssX3RvcF9sZXZlbH0pOiBNYWtlIHN0YXRpYywgYWRkaW5nCglmd2QgZGVjbHMuCgkqIGNwLXRyZWUuaCAocHVzaF9vdmVybG9hZGVkX2RlY2x7LF90b3BfbGV2ZWx9KTogRGVsZXRlIGRlY2xzLgoKCSogZGVjbC5jIChwdXNoZGVjbF9ub25jbGFzc19sZXZlbCk6ICNpZiAwLCB1bnVzZWQuCgkqIGNwLXRyZWUuaCAocHVzaGRlY2xfbm9uY2xhc3NfbGV2ZWwpOiAjaWYgMCBkZWNsLgoKCSogbGV4LmMgKHJlaW5pdF9sYW5nX3NwZWNpZmljKTogI2lmIDAsIHVudXNlZC4KCSogY3AtdHJlZS5oIChyZWluaXRfbGFuZ19zcGVjaWZpYyk6ICNpZiAwIGRlY2wuCgoJKiBkZWNsLmMgKHJldmVydF9zdGF0aWNfbWVtYmVyX2ZuKTogTWFrZSBzdGF0aWMsIGFkZGluZyBmd2QgZGVjbC4KCSogY3AtdHJlZS5oIChyZXZlcnRfc3RhdGljX21lbWJlcl9mbik6IERlbGV0ZSBkZWNsLgoKCSogY2xhc3MuYyAocm9vdF9sYW5nX2NvbnRleHRfcCk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChyb290X2xhbmdfY29udGV4dF9wKTogRGVsZXRlIGRlY2wuCgoJKiBkZWNsLmMgKHNldF9jdXJyZW50X2xldmVsX3RhZ3NfdHJhbnNwYXJlbmN5KTogI2lmIDAsIHVudXNlZC4KCSogY3AtdHJlZS5oIChzZXRfY3VycmVudF9sZXZlbF90YWdzX3RyYW5zcGFyZW5jeSk6ICNpZiAwIGRlY2wuCgoJKiBsZXguYyAoc2V0X3ZhcmRlY2xfaW50ZXJmYWNlX2luZm8pOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChzZXRfdmFyZGVjbF9pbnRlcmZhY2VfaW5mbyk6IERlbGV0ZSBkZWNsLgoKCSogY2FsbC5jIChmaW5kX3Njb3BlZF90eXBlKTogTWFrZSBzdGF0aWMuCgkqIGNwLXRyZWUuaCAoZmluZF9zY29wZWRfdHlwZSk6IERlbGV0ZSBkZWNsLgoKCSogc2VhcmNoLmMgKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IE1ha2Ugc3RhdGljLgoJKiBjcC10cmVlLmggKGNvbnZlcnRfcG9pbnRlcl90b192YmFzZSk6IERlbGV0ZSBkZWNsLgoKCSogZGVjbC5jIChjb25zdF9wdHJfdHlwZV9ub2RlKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoY29uc3RfcHRyX3R5cGVfbm9kZSk6IERlbGV0ZSBkZWNsLgoKCSogdHlwZWNrLmMgKGNvbW1vbl9iYXNlX3R5cGUpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjb21tb25fYmFzZV90eXBlcyk6IERlbGV0ZSBlcnJvbmVvdXMgZGVjbC4KCgkqIHB0LmMgKGNsYXNzdHlwZV9tYW5nbGVkX25hbWUpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChjbGFzc3R5cGVfbWFuZ2xlZF9uYW1lKTogRGVsZXRlIGRlY2wuCgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IE1ha2Ugc3RhdGljLgoJKiBjcC10cmVlLmggKGNoZWNrX25ld2xpbmUpOiBEZWxldGUgZGVjbC4KCgkqIHR5cGVjay5jIChidWlsZF94X2FycmF5X3JlZik6IERlbGV0ZSBmbiwgc2FtZSBpZGVhIGFzCglncm9rX2FycmF5X2RlY2wuCgkqIGNwLXRyZWUuaCAoYnVpbGRfeF9hcnJheV9yZWYpOiBEZWxldGUgZGVjbC4KCgkqIGxleC5jIChjb3B5X2RlY2xfbGFuZ19zcGVjaWZpYyk6IERlbGV0ZSBmbiwgc2FtZSBpZGVhIGFzCgljb3B5X2xhbmdfZGVjbC4KCSogY3AtdHJlZS5oIChjb3B5X2RlY2xfbGFuZ19zcGVjaWZpYyk6ICNpZiAwIGRlY2wuCgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF92dGFibGVfZW50cnkpOiBEZWxldGUgZGVjbC4KCgkqIGNsYXNzLmMgKGJ1aWxkX3ZiYXNlX3BvaW50ZXIpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF92YmFzZV9wb2ludGVyKTogRGVsZXRlIGRlY2wuCgoJKiBzaWcuYyAoYnVpbGRfc3B0cl9yZWYpOiBBZGQgZm9yd2FyZCBkZWNsIGFuZCBtYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9zcHRyX3JlZik6IERlbGV0ZSBkZWNsLgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgZm9yd2FyZCBkZWNsIGFuZCBtYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBEZWxldGUgZGVjbC4KCgkqIGNhbGwuYyAoYnVpbGRfb2JqZWN0X2NhbGwpOiBNYWtlIHN0YXRpYy4KCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlLCBjb21wbGV0ZV90eXBlX3AsIG1hcmtfb3ZlcnJpZGVycyk6CglMaWtld2lzZS4KCSogZGVjbC5jIChjcF9mdW5jdGlvbl9jaGFpbik6IExpa2V3aXNlLgoJKiBsZXguYyAoc2V0X3R5cGVkZWNsX2ludGVyZmFjZV9pbmZvLCByZWluaXRfcGFyc2VfZm9yX2Jsb2NrKToKCUxpa2V3aXNlLgoJKiBwdC5jIChjb21wX3RlbXBsYXRlX2FyZ3MsIGdldF9jbGFzc19iaW5kaW5ncywgcHVzaF90aW5zdF9sZXZlbCk6CglMaWtld2lzZS4KCSogdHJlZS5jIChidWlsZF9jcGx1c19hcnJheV90eXBlXzEpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGNvbXBfcHRyX3R0eXBlc197Y29uc3QscmVhbCxyZWludGVycHJldH0pOiBMaWtld2lzZS4KCShjb21wX3RhcmdldF9wYXJtcyk6IExpa2V3aXNlLgoKCSogaW5pdC5jIChidWlsZF9idWlsdGluX2NhbGwpOiBNYWtlIHN0YXRpYy4KCSogY3AtdHJlZS5oIChidWlsZF9idWlsdGluX2NhbGwpOiBEZWxldGUgZGVjbC4KCgkqIHR5cGVjay5jIChiaW5hcnlfb3BfZXJyb3IpOiBEZWxldGUgZGVjbC4KCSogY3AtdHJlZS5oIChiaW5hcnlfb3BfZXJyb3IpOiBMaWtld2lzZS4KClRodSBNYXIgIDYgMTY6MTM6NTIgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENvbXBhcmUgYWdhaW5zdCBlcnJvcl9tYXJrX25vZGUKCWRpcmVjdGx5LCByYXRoZXIgdGhhbiB0aGUgRVJST1JfTUFSSyB0cmVlIGNvZGUuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAocHJpbnRfYmluZGluZ19sZXZlbCk6IExpa2V3aXNlLgoJKGR1cGxpY2F0ZV9kZWNscyk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZ3Jva2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfYWdncl9pbml0XzEpOiBMaWtld2lzZS4KCShkZWNsX2NvbnN0YW50X3ZhbHVlKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IExpa2V3aXNlLgoJKGhhY2tfaWRlbnRpZmllcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBkZWNsIFRZUEUgYXMgcmVnaXN0ZXIgdHJlZS4KClN1biBNYXIgIDIgMDI6NTQ6MzYgMTk5NyAgQnJ1bm8gSGFpYmxlICA8YnJ1bm9AbGludWl4Lm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KCgkqIHB0LmMgKHVuaWZ5KTogU3RyaXAgTk9QX0VYUFIgd3JhcHBlcnMgYmVmb3JlIHVuaWZ5aW5nIGludGVnZXIgdmFsdWVzLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogQWRkIG5ldyBlcnJvciBtZXNzYWdlLgoKCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX3ZhbHVlKTogSW1wbGVtZW50IG5hbWUgbWFuZ2xpbmcgZm9yCglmbG9hdGluZy1wb2ludCB0ZW1wbGF0ZSBhcmd1bWVudHMuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaW50LCBpY2F0LCBkaWNhdCk6IEZpeCBtYW5nbGluZyBvZiB0ZW1wbGF0ZQoJYXJndW1lbnRzIHdob3NlIGFic29sdXRlIHZhbHVlIGRvZXNuJ3QgZml0IGluIGEgc2lnbmVkIHdvcmQuCgpNb24gTWFyICAzIDEyOjE0OjU0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGZyaWVuZC5jOiBOZXcgZmlsZTsgcHV0IGFsbCBvZiB0aGUgZnJpZW5kIHN0dWZmIGluIGhlcmUuCgkqIGluaXQuYzogSW5zdGVhZCBvZiBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoQ1hYX09CSlMpOiBBZGQgZnJpZW5kLm8uCgkoZnJpZW5kLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoJKiBNYWtlLWxhbmcuaW4gKENYWF9TUkNTKTogQWRkICQoc3JjZGlyKS9jcC9mcmllbmQuYy4KClN1biBNYXIgIDIgMTE6MDQ6NDMgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBDb21wbGFpbiBpZiB0aGUgc2NvcGUgaXNuJ3QgYQoJYmFzZS4KCldlZCBGZWIgMjYgMTE6MzE6MDYgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAobGVmdF9jdXJseSk6IERvbid0IGNyYXNoIG9uIGVycm9uZW91cyB0eXBlLgoKCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBGaXggdHlwZSBvZiByZWYuCgpUdWUgRmViIDI1IDEyOjQxOjQ4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfdmJhc2VfMSk6IFJlbmFtZWQgZnJvbSBnZXRfdmJhc2UuCgkoZ2V0X3ZiYXNlKTogV3JhcHBlciwgbm93IG5vbi1zdGF0aWMuCgkoY29udmVydF9wb2ludGVyX3RvX3ZiYXNlKTogTm93IHN0YXRpYy4KCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogQWNjZXB0IGEgYmluZm8gZm9yIEJBU0VUWVBFLgoJKiBpbml0LmMgKGJ1aWxkX2RlbGV0ZSk6IFBhc3Mgb25lLgoJKGJ1aWxkX3BhcnRpYWxfY2xlYW51cF9mb3IpOiBVc2UgYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsLgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFBhc3MgYSBiaW5mby4KCk1vbiBGZWIgMjQgMTU6MDA6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBPbmx5IHN5bnRoZXNpemUgbm9uLXRyaXZpYWwgY29weSBjdG9ycy4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBMb3NlIG90aGVyIHJlZmVyZW5jZSB0byBmbGFnLgoKCSogY2FsbC5jIChidWlsZF9maWVsZF9jYWxsKTogRG9uJ3QgbG9vayBmb3IgW2NkXXRvcl9pZGVudGlmaWVyLgoJKiBkZWNsMi5jIChkZWxldGVfc2FuaXR5KTogUmVtb3ZlIG1lYW5pbmdsZXNzIHVzZSBvZgoJTE9PS1VQX0hBU19JTl9DSEFSR0UuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogVXNlIGJ1aWxkX3Njb3BlZF9tZXRob2RfY2FsbCBpbnN0ZWFkCglvZiBidWlsZF9kZWxldGUgZm9yIHJ1bm5pbmcgdmJhc2UgZHRvcnMuCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogQ2FsbCBvdmVybG9hZCByZXNvbHV0aW9uIGNvZGUgaW5zdGVhZCBvZgoJZHVwbGljYXRpbmcgaXQgYmFkbHkuCgpUaHUgRmViIDIwIDE1OjEyOjE1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogQ2FsbCBtYXJrX3VzZWQgYmVmb3JlIHRyeWluZyB0byBlbGlkZQoJdGhlIGNhbGwuCgoJKiBkZWNsLmMgKGltcGxpY2l0bHlfZGVjbGFyZSk6IERvbid0IHNldCBERUNMX0FSVElGSUNJQUwuCgpXZWQgRmViIDE5IDExOjE4OjUzIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IEFsd2F5cyBwZWR3YXJuIGZvciBhIGNhc3QgdG8KCW5vbi1yZWZlcmVuY2UgdXNlZCBhcyBhbiBsdmFsdWUuCgpXZWQgRmViIDE5IDEwOjM1OjM3IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBDb252ZXJ0IGZyb20gMCB0byBhIHBtZiBwcm9wZXJseS4KClR1ZSBGZWIgMTggMTU6NDA6NTcgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoaGFuZGxlcik6IEZpeCB0ZW1wbGF0ZSB0eXBvLgoKU3VuIEZlYiAxNiAwMjoxMjoyOCAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChsYW5nX2RlY2xfbmFtZSk6IE5ldyBmbi4KCSogdHJlZS5jIChsYW5nX3ByaW50YWJsZV9uYW1lKTogVXNlIGl0LgoKRnJpIEZlYiAxNCAxNjo1NzowNSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnKytzcGVjLmM6IEluY2x1ZGUgY29uZmlnLmggc28gdGhhdCB3ZSBjYW4gY2F0Y2ggYnplcm8gI2RlZmluZXMKCWZyb20gdGhlIGNvbmZpZyBmaWxlLgoKVHVlIEZlYiAxMSAxMzo1MDo0OCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBuZXcxLmNjOiBJbmNsdWRlIGEgZGVjbGFyYXRpb24gZm9yIG1hbGxvYywgdG8gYXZvaWQgd2FybmluZywgYW5kCglhdm9pZCBsb3NzaW5nIG9uIHN5c3RlbXMgdGhhdCByZXF1aXJlIG9uZSAob25lcyB0aGF0IGRlZmluZSBtYWxsb2MKCWluIHhtLmgpLgoKTW9uIEZlYiAxMCAyMjo1MToxMyAxOTk3ICBCcnVubyBIYWlibGUgIDxicnVub0BsaW51aXgubWF0aGVtYXRpay51bmkta2FybHNydWhlLmRlPgoKCSogZGVjbDIuYyAobWF4X3RpbnN0X2RlcHRoKTogTmV3IHZhcmlhYmxlLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IFBhcnNlICItZnRlbXBsYXRlLWRlcHRoLU5OIiBjb21tYW5kIGxpbmUKCW9wdGlvbi4KCSogcHQuYyAobWF4X3RpbnN0X2RlcHRoKTogVmFyaWFibGUgbW92ZWQuCgkqIGxhbmctb3B0aW9ucy5oOiBEZWNsYXJlICItZnRlbXBsYXRlLWRlcHRoLU5OIiBjb21tYW5kIGxpbmUgb3B0aW9uCglhcyBsZWdhbC4KCkZyaSBGZWIgIDcgMTU6NDM6MzQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IEFsbG93IGEgYmFzZSBjbGFzcyB0aGF0IGRlcGVuZHMgb24KCXRlbXBsYXRlIHBhcm1zIHRvIGJlIGluY29tcGxldGUuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IFN1cHBvcnQgdHlwZWlkKHR5cGUpLgoJKiBydHRpLmMgKGdldF90eXBlaWQpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCShleHBhbmRfc2lfZGVzYywgZXhwYW5kX2NsYXNzX2Rlc2MpOiBGaXggc3RyaW5nIGxlbmd0aC4KCShleHBhbmRfcHRyX2Rlc2MsIGV4cGFuZF9hdHRyX2Rlc2MsIGV4cGFuZF9nZW5lcmljX2Rlc2MpOiBMaWtld2lzZS4KClR1ZSBGZWIgIDQgMTE6Mjg6MjQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodW5pZnksIGNhc2UgVEVNUExBVEVfQ09OU1RfUEFSTSk6IFVzZSBjcF90cmVlX2VxdWFsLgoKCSogcHQuYyAodHN1YnN0KTogUHV0IGl0IGJhY2sgZm9yIC1mbm8tYW5zaS1vdmVybG9hZGluZy4KCk1vbiBGZWIgIDMgMTg6NDE6MTIgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0LCBjYXNlIEZVTkNUSU9OX0RFQ0wpOiBMb3NlIG9ic29sZXRlIGNvZGUgdGhhdAoJc21hc2hlcyB0b2dldGhlciB0ZW1wbGF0ZSBhbmQgbm9uLXRlbXBsYXRlIGRlY2xzIG9mIHRoZSBzYW1lCglzaWduYXR1cmUuCgpUaHUgSmFuIDMwIDE5OjE4OjAwIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IERvbid0IHJlY3Vyc2UgZm9yIHRoZSB0eXBlIG9mIGEgVFlQRU5BTUVfVFlQRS4KCldlZCBKYW4gMjkgMTE6NDA6MzUgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBOZXh0IHJvdXRlLCBwZWR3YXJuIGFib3V0IGRpZmZlcmVudAoJZXhjZXB0aW9ucyBpZiAtcGVkYW50aWMgKm9yKiBvbGRkZWNsICFERUNMX0lOX1NZU1RFTV9IRUFERVIuCgpUdWUgSmFuIDI4IDIwOjQzOjI5IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoSEFTX0RFRkFVTFRfSU1QTEVNRU5UQVRJT04pOiBEZWxldGUgbWFjcm8uCgkoc3RydWN0IGxhbmdfdHlwZSk6IERlbGV0ZSBoYXNfZGVmYXVsdF9pbXBsZW1lbnRhdGlvbiBtZW1iZXIuCglJbmNyZWFzZSBkdW1teSB0byAyMS4KCSogZGVjbC5jIChzdGFydF9tZXRob2QpOiBEZWxldGUgdXNhZ2UuCgoJKiBjcC10cmVlLmggKGJ1aWxkX2NhbGwsIG51bGxfcHRyX2NzdF9wLCBpbl9mdW5jdGlvbl9wLAoJc3RvcmVfYWZ0ZXJfcGFybXMsIHN0YXJ0X2RlY2xfMSwgYXV0b19mdW5jdGlvbik6IEFkZCBkZWNscy4KCShnZXRfYXJnbGlzdF9sZW5faW5fYnl0ZXMsIGRlY2xhcmVfaW1wbGljaXRfZXhjZXB0aW9uLAoJaGF2ZV9leGNlcHRpb25zX3AsIG1ha2VfdHlwZV9kZWNsLCB0eXBlZGVjbF9mb3JfdGFnLAoJc3RvcmVfaW5fcGFybXMsIHBvcF9pbXBsaWNpdF90cnlfYmxvY2tzLCBwdXNoX2V4Y2VwdGlvbl9jbGVhbnVwLAoJYnVpbGRfY29tcG9uZW50X3R5cGVfZXhwciwgY3BsdXNfZXhjZXB0aW9uX25hbWUsCgl7bWFrZSxjbGVhcn1fYW5vbl9wYXJtX25hbWUsIGRvbnRfc2VlX3R5cGVuYW1lKTogUmVtb3ZlZCBkZWNscy4KCSogY2FsbC5jIChidWlsZF90aGlzKTogTWFrZSBzdGF0aWMuCgkoaXNfY29tcGxldGUpOiBMaWtld2lzZS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBMaWtld2lzZS4KCShzdGFuZGFyZF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoc3RyaXBfdG9wX3F1YWxzKTogTGlrZXdpc2UuCgkobm9uX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGJ1aWxkX2NvbnYpOiBMaWtld2lzZS4KCSh1c2VyX2hhcnNobmVzcyk6IExpa2V3aXNlLgoJKHJhbmtfZm9yX2lkZWFsKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoc3RhcnRfZGVjbF8xKTogRGVsZXRlIGZvcndhcmQgZGVjbC4KCShwdXNoX2RlY2xfbGV2ZWwpOiBNYWtlIHN0YXRpYy4KCShyZXN1bWVfYmluZGluZ19sZXZlbCk6IE1ha2Ugc3RhdGljLgoJKG5hbWVzcGFjZV9iaW5kaW5nc19wKTogTWFrZSBzdGF0aWMuCgkoZGVjbGFyZV9uYW1lc3BhY2VfbGV2ZWwpOiBNYWtlIHN0YXRpYy4KCShsb29rdXBfbmFtZV9yZWFsKTogTWFrZSBzdGF0aWMuCgkoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBzdGF0aWMuICBUYWtlIHJlZ2lzdGVyIG9mZiBORVdERUNMIGFuZAoJT0xEREVDTCBwYXJtIGRlY2xzLgoJKiBkZWNsMi5jIChnZXRfc2VudHJ5KTogTWFrZSBzdGF0aWMuCgkodGVtcF9uYW1lX3ApOiBEZWxldGUgZm4uCgkqIGV4Y2VwdC5jIChhdXRvX2Z1bmN0aW9uKTogRGVsZXRlIGRlY2wuCgkqIGxleC5jIChoYW5kbGVfe2NwLHN5c3Z9X3ByYWdtYSk6IE1ha2Ugc3RhdGljLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSkgW0hBTkRMRV9TWVNWX1BSQUdNQV06IEFkZCBmb3J3YXJkIGRlY2wuCgkqIG1ldGhvZC5jIChkb19idWlsZF97Y29weV9jb25zdHJ1Y3Rvcixhc3NpZ25fcmVmfSk6IE1ha2Ugc3RhdGljLgoJKiBwdC5jICh0c3Vic3RfZXhwcl92YWx1ZXMpOiBNYWtlIHN0YXRpYy4KCSogcnR0aS5jIChjb21iaW5lX3N0cmluZ3MpOiBEZWxldGUgZGVjbC4KClR1ZSBKYW4gMjggMTY6NDA6NDAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogSGFuZGxlIGdldHRpbmcgYSB0eXBlZGVmLgoKCSogY2FsbC5jIChidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IENvbXBsYWluIGFib3V0IHZvaWQgYXJnLgoKVHVlIEphbiAyOCAxNToyNTowOSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IEdpdmUgcGVkd2FybiBvZiBkaWZmZXJlbnQgZXhjZXB0aW9ucwoJaWYgLXBlZGFudGljLCBpbnN0ZWFkIG9mIG9sZGRlY2wgIURFQ0xfSU5fU1lTVEVNX0hFQURFUi4KCk1vbiBKYW4gMjcgMTk6MjE6MjkgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IERvbid0IGV4cGFuZCB0aGUgY2xlYW51cCB0cmVlIGhlcmUsCglzaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoZSBydGwgb3V0LiAgRml4ZXMgcHJvYmxlbSB3aXRoCgktZyAtTyBvbiBTUEFSQy4KCk1vbiBKYW4gMjcgMTY6MjQ6MzUgMTk5NyAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+CgoJKiBNYWtlLWxhbmcuaW46IEFkZCAkKGV4ZWV4dCkgYXMgbmVjZXNzYXJ5LgoKTW9uIEphbiAyNyAxMzoyMDozOSAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBwYXJzZS55IChoYW5kbGVyX3NlcSk6IE11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY2F0Y2ggY2xhdXNlLgoKU2F0IEphbiAyNSAxMjowMDowNSAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFJlc3RvcmUgPzogaGFjay4KCgkqIGRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTW9yZSB3YXJuaW5ncy4KClNhdCBKYW4gMjUgMDg6NTA6MDMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBPbiBzZWNvbmQgdGhvdWdodCwgZG8gaXQgYXMgYSBwZWR3YXJuCglzdGlsbCBidXQgb25seSBpZiAhREVDTF9JTl9TWVNURU1fSEVBREVSIChvbGRkZWNsKS4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogU2NhbGUgYmFjayB0byBhIHdhcm5pbmcsIGFuZCBvbmx5IGRvCgknZW0gaWYgLXBlZGFudGljLgoKRnJpIEphbiAyNCAxNzo1Mjo1NCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IHBlZHdhcm4gbWlzbWF0Y2hlZCBleGNlcHRpb24KCXNwZWNpZmljYXRpb25zLgoKVGh1IEphbiAyMyAxODoxODo1NCAxOTk3ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IERvbid0IGRpc3BsYXkgdGhlIGludmlzaWJsZQoJYXJndW1lbnQgZm9yIGNvbnRyb2xsaW5nIHZpcnR1YWwgYmFzZXMuCgpUaHUgSmFuIDIzIDE2OjQ4OjEwIDE5OTcgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIG5ldzogQWRkIG5vdGhyb3cgbmV3IGFuZCBkZWxldGUsIGJhZF9hbGxvYyBhbmQgdGhyb3cgc3BlY2lmaWNhdGlvbnMKCWZvciBkZWxldGUuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBBZGQgdGhyb3cgc3BlY2lmaWNhdGlvbiBmb3IgZGVsZXRlLgoJKiBuZXcuY2MgKG5vdGhyb3cpOiBEZWZpbmUuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogUmVtb3Zpbmcgd2FybmluZyB0aGF0IHRocm93IGFuZCBmcmllbmRzIGFyZQoJa2V5d29yZHMuCgkqIG5ldzEuY2MgKG9wZXJhdG9yIG5ldyAoc2l6ZV90IHN6LCBjb25zdCBub3Rocm93X3QmKSk6IERlZmluZS4KCSogbmV3Mi5jYyAob3BlcmF0b3IgbmV3W10gKHNpemVfdCBzeiwgY29uc3Qgbm90aHJvd190Jik6IERlZmluZS4KCSogTWFrZS1sYW5nLmluOiBBZGQgbmV3ezEsMn0ue2NjLG99LgoKVGh1IEphbiAyMyAxNjozOTowNiAxOTk3ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoY29uc191cF9kZWZhdWx0X2Z1bmN0aW9uKTogRml4IHJldHVybiB0eXBlIG9mIHN5bnRoIG9wPS4KCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBBZGQgd2FybmluZ3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtYmVycwoJYW5kIGJhc2VzLgoKCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IEFkZCB3YXJuaW5nIGZvciBub24tcG9seW1vcnBoaWMgdHlwZQoJd2l0aCBkZXN0cnVjdG9yIHVzZWQgYXMgYmFzZSB0eXBlLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBBZGQgd2FybmluZyBmb3Igb3A9IHJldHVybmluZyB2b2lkLgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogQWRkIHdhcm5pbmcgZm9yIG9wPSByZXR1cm5pbmcgYW55dGhpbmcKCW90aGVyIHRoYW4gKnRoaXMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBZGQgd2FybmluZyBmb3IgY2xhc3Mgd2l0aCBwb2ludGVycwoJYnV0IG5vdCBjb3B5IGN0b3Igb3IgY29weSBvcD0uCgoJKiBjcC10cmVlLmggKFRJX1BFTkRJTkdfVEVNUExBVEVfRkxBRyk6IE5ldyBtYWNyby4KCSogcHQuYyAoYWRkX3BlbmRpbmdfdGVtcGxhdGUpOiBVc2UgaXQgaW5zdGVhZCBvZiBMQU5HX0ZMQUdfMC4KCShpbnN0YW50aWF0ZV90ZW1wbGF0ZSk6IElmIC1mZXh0ZXJuYWwtdGVtcGxhdGVzLCBhZGQgdGhpcwoJaW5zdGFudGlhdGlvbiB0byBwZW5kaW5nX3RlbXBsYXRlcy4KCgkqIGRlY2wyLmMgKGNvcHlfYXNzaWdubWVudF9hcmdfcCk6IERpc2FibGUgb2xkIGhhY2sgdG8gc3VwcG9ydAoJQm9vY2ggY29tcG9uZW50cy4KClR1ZSBKYW4gMjEgMTg6MzI6MDQgMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnQpOiBwZWR3YXJuIGVudW0gdG8gcG9pbnRlciBjb252ZXJzaW9ucy4KCk1vbiBKYW4gMjAgMTc6NTk6NTEgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChzdGFuZGFyZF9jb252ZXJzaW9uKTogSGFuZGxlIGdldHRpbmcgcmVmZXJlbmNlcy4gIFRhY2sKCW9uIFJWQUxVRV9DT05WIGhlcmUuICBEbyBpdCBmb3Igbm9uLWNsYXNzIHR5cGVzLCB0b28uCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBQYXNzIHJlZmVyZW5jZXMgdG8gc3RhbmRhcmRfY29udmVyc2lvbi4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogRGlzYWJsZSBvbmUgPzoga2x1ZGdlLgoJKGNvbnZlcnRfbGlrZSk6IEhhbmRsZSBSVkFMVUVfQ09OVnMgZm9yIG5vbi1jbGFzcyB0eXBlcy4KCShqb3VzdCk6IERpc2FibGUgdGhlIG90aGVyID86IGtsdWRnZS4KCk1vbiBKYW4gMjAgMTQ6NTM6MTMgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IEFkZCBjb2RlIHRvIGJ1aWxkIHVwIGNvbW1vbgoJZnVuY3Rpb24gdHlwZXMgYmVmb3JlaGFuZCwgdG8gYXZvaWQgY3JlYXRpb24gdGhlbiByZW1vdmFsIG9mCgl0aGluZ3MgYWxyZWFkeSBpbiB0aGUgaGFzaCB0YWJsZS4KCk1vbiBKYW4gMjAgMTQ6NDM6NDkgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChmaW5pc2hfZnVuY3Rpb24pOiBBbHNvIHplcm8gb3V0IERFQ0xfSU5DT01JTkdfUlRMIGZvcgoJdGhlIGFyZ3VtZW50cy4KCgkqIGVycm9yLmMgKGR1bXBfZXhwciwgVEVNUExBVEVfQ09OU1RfUEFSTSk6IERvbid0IHJlcXVpcmUKCWN1cnJlbnRfdGVtcGxhdGVfcGFybXMuCgpGcmkgSmFuIDE3IDEwOjI1OjQyIDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChsb29rdXBfZmllbGQpOiBEb24ndCByZXR1cm4gYSBmdW5jdGlvbiwgY2hlY2sgd2FudF90eXBlLgoKVGh1IEphbiAxNiAxODoxNDozNSAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IE1ha2Ugc3VyZSBQTEFDRU1FTlQgaGFzIGEgdHlwZS4KClRodSBKYW4gMTYgMTc6NDA6MjggMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9uZXcpOiBTdXBwb3J0IG5ldyAobm90aHJvdykuCgpXZWQgSmFuIDE1IDEyOjM4OjE0IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBBbHNvIGRvIHB1c2hfdG9fdG9wX2xldmVsIGJlZm9yZSBzZXR0aW5nCgl1cCBERUNMX0lOSVRJQUwuCgoJKiBjcC10cmVlLmggKFBBUk1fREVGQVVMVF9GUk9NX1RFTVBMQVRFKTogTmV3IG1hY3JvLgoJKiBwdC5jICh0c3Vic3QpOiBEZWZlciBpbnN0YW50aWF0aW9uIG9mIGRlZmF1bHQgYXJncy4KCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBVbnRpbCBoZXJlLgoKV2VkIEphbiAxNSAxMDowODoxMCAxOTk3ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkKTogTWFrZSBzdXJlIHdlIGhhdmUgYW4KCUlERU5USUZJRVJfQ0xBU1NfVkFMVUUgYmVmb3JlIHdlIHRyeSB0byByZXR1cm4gaXQuCgpUaHUgSmFuICA5IDA3OjE5OjAxIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGUgdW51c2VkIHZhciBQQVJNLgoJKGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbCk6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogRGVsZXRlIHVudXNlZCB2YXIgUC4KCShidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCSogZGVjbC5jIChidWlsdGluX3R5cGVfdGRlc2NzX3thcnIsIGxlbiwgbWF4fSk6ICNpZiAwIG91dCBzdGF0aWMKCXZhciBkZWZpbml0aW9ucywgd2hpY2ggYXJlIG5ldmVyIHVzZWQuCgkoc2hhZG93X3RhZyk6IERlbGV0ZSB1bnVzZWQgdmFyIEZOLgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogRGVsZXRlIHVudXNlZCB2YXIgT1JJR0lOQUxfVEFSR0VULgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IERlbGV0ZSB1bnVzZWQgdmFyIEFMTE9DX1RFTVAuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEZWxldGUgdW51c2VkIHZhciBDT05URVhULgoJKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBEZWxldGUgdW51c2VkIHZhciBOQU1FLgoJKHN5bnRoZXNpemVfbWV0aG9kKTogRGVsZXRlIHVudXNlZCB2YXIgQkFTRS4KCSogcHQuYyAobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRGVsZXRlIHVudXNlZCB2YXIgQ09ERV9UWVBFX05PREUuCgkqIHJ0dGkuYyAoYnVpbGRfaGVhZG9mKTogRGVsZXRlIHVudXNlZCB2YXIgVlBUUi4KCShnZXRfdHlwZWlkKTogRGVsZXRlIHVudXNlZCB2YXIgVC4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbmRpdGlvbmFsX2V4cHIpOiBEZWxldGUgdW51c2VkIHZhcnMgT1JJR19PUDEKCWFuZCBPUklHX09QMi4KCShidWlsZF9wdHJtZW1mdW5jKTogRGVsZXRlIHVudXNlZCB2YXJzIFUgYW5kIE5JTkRFWC4KCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBEZWxldGUgdW51c2VkIHZhciBCSU5GTy4KCldlZCBKYW4gIDggMTM6MDk6NTQgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IFVzZSBJREVOVElGSUVSX0NMQVNTX1ZBTFVFIHRvIGxvb2sgdXAKCXRoaW5ncyBpbiBhIHR5cGUgYmVpbmcgZGVmaW5lZC4KCSogZGVjbC5jIChmaW5pc2hfZW51bSk6IFJldmVyc2UgdGhlIHZhbHVlcyBzbyB0aGF0IHRoZXkgYXJlIGluCgl0aGUgY29ycmVjdCBvcmRlci4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgaW5pdGlhbGl6ZQoJQklORk9fQkFTRVRZUEVTIHVudGlsIHRoZSB2ZWN0b3IgaXMgZmlsbGVkIG91dC4KCSh1bmlmeSk6IERvbid0IGFib3J0IG9uIGNvbmZsaWN0aW5nIGJpbmRpbmdzLCBqdXN0IGZhaWwuCgkoaW5zdGFudGlhdGVfZGVjbCk6IERvIHB1c2hfdGluc3RfbGV2ZWwgYmVmb3JlIGFueSB0c3Vic3RpbmcuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfdmFsdWUpOiBIYW5kbGUgZ2V0dGluZyBhCglURU1QTEFURV9DT05TVF9QQVJNIGZvciBhIHBvaW50ZXIuCgpUdWUgSmFuICA3IDE0OjAwOjU4IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogRG9uJ3QgZ2l2ZSAnbm90IGEgYmFzZScgZXJyb3IgZm9yCgl0ZW1wbGF0ZXMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogQ2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wgbGF0ZXIuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFJldHVybiBhIHZhbHVlLgoKCSogcGFyc2UueSAoZXh0ZW5zaW9uKTogTmV3IHJ1bGUgZm9yIF9fZXh0ZW5zaW9uX18uCgkoZXh0ZGVmLCB1bmFyeV9leHByLCBkZWNsLCBjb21wb25lbnRfZGVjbCk6IFVzZSBpdC4KClR1ZSBKYW4gIDcgMDk6MjA6MjggMTk5NyAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYmFzZV9iaW5mbyk6IFJlbW92ZSB1bnVzZWQgYmFzZV9oYXNfdmlydHVhbCBtZW1iZXIuCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgpUdWUgRGVjIDMxIDIwOjI1OjUwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChleHBhbmRfdXBjYXN0X2ZpeHVwcyk6IEZpeCBib2d1cyBjb2RlIGdlbmVyYXRpb24KCXByb2JsZW0gd2hlcmUgdGhlIGdlbmVyYXRlZCBjb2RlIHVzZXMgdGhlIHdyb25nIGluZGV4IGludG8gdGhlCglydW50aW1lIGJ1aWx0IHZ0YWJsZSBvbiB0aGUgc3RhY2suICBPbGQgY29kZSBjb3VsZCBjbG9iYmVyIHJhbmRvbQoJc3RhY2sgdmFsdWVzLgoKVHVlIERlYyAzMSAxNToxNjo1NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBNYWtlIHN1cmUgdGhlIHBhcnRpYWwgRUggY2xlYW51cHMKCWxpdmUgb24gdGhlIGZ1bmN0aW9uX29ic3RhY2suCgpGcmkgRGVjIDI3IDEwOjMxOjQwIDE5OTYgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgoKCSogTWFrZS1sYW5nLmluIChnKytzcGVjLm8pOiBEb24ndCB1c2UgJDwgd2l0aCBhbiBleHBsaWNpdCB0YXJnZXQ7Cgl0aGlzIGlzbid0IHBvcnRhYmxlIHRvIHNvbWUgdmVyc2lvbnMgb2YgYG1ha2UnIChlLmcuIFNvbGFyaXMgMi41LjEpLgoKVHVlIERlYyAyNCAxMDoyNDowMyAxOTk2ICBKZWZmcmV5IEEgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2t2YXJkZWNsKTogQXZvaWQgQU5TSSBzdHlsZSBpbml0aWFsaXphdGlvbi4KClN1biBEZWMgMjIgMDQ6MjI6MDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAodHN1YnN0KTogVHdlYWsgYXJnIHR5cGVzIGZvciBhIEZVTkNUSU9OX1RZUEUuCgpGcmkgRGVjIDIwIDE3OjA5OjI1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogQ2FsbCBncm9rX3tjdG9yLG9wfV9wcm9wZXJ0aWVzLgoKRnJpIERlYyAyMCAxMjoxNzoxMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKytzcGVjLmMgKGxhbmdfc3BlY2lmaWNfZHJpdmVyKTogUHV0IG1pc3NpbmcgaHlwaGVuIGluIGZyb250IG9mCglhcmd1bWVudHMgd2UgY29tcGFyZSBhZ2FpbnN0LiAgU3RhcnQgdGhlIGNvdW50IG9mIEkgYXQgMSwgbm90IDAsCglzaW5jZSBhcmd2WzBdIGlzIHN0aWxsIHRoZSBjb21tYW5kLgoKVGh1IERlYyAxOSAxMTo1Mzo1NyAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBsYW5nLXNwZWNzLmg6IEFjY2VwdCAuY3AgYXMgYW4gQysrIGV4dGVuc2lvbi4KCk1vbiBEZWMgMTYgMjI6NDM6MzEgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChwdHJfcmVhc29uYWJseV9zaW1pbGFyKTogQWRkIGRlY2wuCgpUaHUgRGVjIDEyIDE1OjAwOjM1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva3ZhcmRlY2wpOiBDaGFuZ2UgU1BFQ0JJVFMgcGFybSB0byBiZSB0aGUgU1BFQ0JJVFNfSU4KCXBvaW50ZXIuICBOZXcgbG9jYWwgU1BFQ0JJVFMgd2l0aCB0aGUgcGFybSdzIHZhbHVlLgoJKGdyb2tkZWNsYXJhdG9yKTogUGFzcyAmc3BlY2JpdHMgZG93bi4KCgkqIHBhcnNlLnkgKGV4cHJfbm9fY29tbWFzKTogTWFrZSBzdXJlICQkIGlzIG5vdCBhbiBlcnJvcl9tYXJrX25vZGUKCWJlZm9yZSB3ZSB0cnkgdG8gZG8gQ19TRVRfRVhQX09SSUdJTkFMX0NPREUgb24gaXQuCgoJKiBzZWFyY2guYyAoZW52ZWxvcGVfYWRkX2RlY2wpOiBDaGVjayB0aGF0IHRoZSBDTEFTU1RZUEVfQ0lEIG9mCglDT05URVhUIGlzIG5vdCAwIGJlZm9yZSB3ZSB0cnkgdG8gdXNlIFRZUEVfREVSSVZFU19GUk9NLgoKCSogZGVjbC5jIChjcGx1c19leHBhbmRfZXhwcl9zdG10KTogT25seSBleHBhbmQgdGhlIGV4cHIgaWYgRVhQIGlzCglub3QgYW4gZXJyb3JfbWFya19ub2RlLgoKU2F0IERlYyAgNyAxNzoyMDoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKFRZUEVfTUFJTl9ERUNMKTogVXNlIFRZUEVfU1RVQl9ERUNMLgoJKiAqLmM6IFVzZSBUWVBFX01BSU5fREVDTCBpbnN0ZWFkIG9mIFRZUEVfTkFNRSB3aGVyZSBhcHByb3ByaWF0ZS4KCkZyaSBEZWMgIDYgMTQ6NDA6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IFdoZW4gZ2l2aW5nIGFuIGFub255bW91cyBzdHJ1Y3QgYSBuYW1lLAoJcmVwbGFjZSBUWVBFX05BTUUgaW5zdGVhZCBvZiBUWVBFX0lERU5USUZJRVIgKHNvIFRZUEVfU1RVQl9ERUNMIGlzCglub3QgYWZmZWN0ZWQpLgoKCSogdHlwZWNrMi5jIChidWlsZF9tX2NvbXBvbmVudF9yZWYpOiBJZiBjb21wb25lbnQgaXMgYSBwb2ludGVyCgl0byBkYXRhIG1lbWJlciwgcmVzb2x2ZSB0aGUgT0ZGU0VUX1JFRiBub3cuCgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IERvbid0IGdvIGludG8gaW5maW5pdGUgcmVjdXJzaW9uLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogVXNlIHRzdWJzdF9leHByIGZvciBub24tdHlwZSBhcmdzLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2V0IERFQ0xfQVJUSUZJQ0lBTCBvbiB0aGUgdnB0ci4KCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogQW5kIG9uIHRoZSB2YmFzZSBwdHIuCgpUaHUgRGVjICA1IDAyOjExOjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoQk9PTF9UWVBFX1NJWkUpOiBEZWZpbmUgaW4gdGVybXMgb2YgUE9JTlRFUl9TSVpFIG9yCglDSEFSX1RZUEVfU0laRSBzbyBib29sIGlzIGFsd2F5cyB0aGUgc2FtZSBzaXplIGFzIGFub3RoZXIgdHlwZS4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IFNldCBERUNMX0lHTk9SRURfUCBmb3IgRFdBUkYsIHRvby4KClR1ZSBEZWMgIDMgMjM6MTg6MzcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva194X2NvbXBvbmVudHMpOiBSZW1vdmUgc3ludGhlc2l6ZWQgbWV0aG9kcyBmcm9tCglUWVBFX01FVEhPRFMgb2YgYW4gYW5vbnltb3VzIHVuaW9uLCBjb21wbGFpbiBhYm91dCBtZW1iZXIKCWZ1bmN0aW9ucy4KCSogZGVjbC5jIChzaGFkb3dfdGFnKTogV2lwZSBvdXQgbWVtb3J5IG9mIHN5bnRoZXNpemVkIG1ldGhvZHMgaW4KCWFub255bW91cyB1bmlvbnMuCgkoZmluaXNoX2Z1bmN0aW9uKTogSnVzdCBjbGVhciB0aGUgREVDTF9SVEwgb2Ygb3VyIGFyZ3VtZW50cy4KCkZyaSBOb3YgMjkgMjE6NTQ6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBFbWl0IERXQVJGIGRlYnVnZ2luZyBpbmZvIGZvciBzdGF0aWMgZGF0YQoJbWVtYmVycy4KCgkqIHB0LmMgKHRzdWJzdCk6IElmIHQgaXMgYSBzdHViIGRlY2wsIHJldHVybiB0aGUgc3R1YiBkZWNsIGZvciB0eXBlLgoKV2VkIE5vdiAyNyAxNDo0NzoxNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRG9uJ3QgZGllIGlmIENPTVBPTkVOVCBpc24ndCBhCglJREVOVElGSUVSX05PREUuCgpXZWQgTm92IDI3IDE2OjA1OjE5IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZysrLWNyb3NzJChleGVleHQpKTogRml4IHR5cG8uCgpXZWQgTm92IDI3IDA4OjE0OjAwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglNYWtlIHRoZSBnKysgZHJpdmVyIG5vdyBiZSBhIHN0YW5kYWxvbmUgcHJvZ3JhbSwgcmF0aGVyIHRoYW4gb25lCgl0aGF0IHRyaWVzIHRvIHJ1biB0aGUgZ2NjIGRyaXZlciBhZnRlciBtdW5naW5nIHVwIHRoZSBvcHRpb25zLgoJKiBNYWtlLWxhbmcuaW4gKGcrKy5jLCBnKytzcGVjLm8pOiBOZXcgcnVsZXMuCgkoZysrLm8pOiBOZXcgcnVsZSwgYmFzZWQgb24gZ2NjLm8gd2l0aCAtRExBTkdfU1BFQ0lGSUNfRFJJVkVSCglhZGRlZC4KCShnKyskKGV4ZWV4dCkpOiBOZXcgcnVsZSwgYmFzZWQgb24geGdjYyBydWxlLgoJKGcrKy1jcm9zcyQoZXhlZXh0KSk6IE5vdyBqdXN0IGNvcGllcyBnKyskKGV4ZWV4dCkgb3Zlci4KCSogZysrc3BlYy5jOiBOZXcgZmlsZS4KCSogZysrLmM6IFJlbW92ZWQgZmlsZS4KClR1ZSBOb3YgMjYgMTk6MDE6MDkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEFycmFuZ2UgZm9yIGFueSB0ZW1wb3JhcnkgdmFsdWVzCgl0aGF0IGhhdmUgYmVlbiBrZWVwIGluIHJlZ2lzdGVycyB1bnRpbCBub3cgdG8gYmUgcHV0IGludG8gbWVtb3J5LgoKTW9uIE5vdiAyNSAxNToxNjo0MSAxOTk2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlLWxhbmcuaW4gKGMrKy5zdGFnZVsxMjM0XSk6IERlcGVuZCB1cG9uIHN0YWdlWzEtNF0tc3RhcnQsIHNvCgl0aGF0IG1ha2UgLWozIGJvb3RzdHJhcCB3b3JrcyBiZXR0ZXIuCgpTdW4gTm92IDI0IDAyOjA5OjM5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaHRhZyk6IERvIHB1c2hkZWNsIGZvciBhbm9uIHRhZ3MuCgpUaHUgTm92IDIxIDE2OjMwOjI0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBGaXggbG9naWMuCgkodW5hcnlfY29tcGxleF9sdmFsdWUpOiBBdm9pZCB1bnVzZWQgd2FybmluZyBvbiBhZGRyZXNzIG9mIElOSVRfRVhQUi4KCldlZCBOb3YgMjAgMTg6NDc6MzEgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IE1ha2Ugc3VyZSBhcmdsaXN0IGhhcyBhIGZpbmFsIE5VTEwgZW50cnkuICBBZGQKCVBFWEVDVVRFX0xBU1QgdG8gdGhlIGZsYWdzIHBhc3NlZCB0byBwZXhlY3V0ZSwgYXMgb3RoZXJ3aXNlCglzdGRpbi9zdGRvdXQgb2YgdGhlIGludm9rZWQgcHJvZ3JhbSBhcmUgcmVkaXJlY3RlZCB0bwoJbm93aGVyZXN2aWxsZS4KClR1ZSBOb3YgMTkgMTY6MTI6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChpbXBsaWNpdGx5X2RlY2xhcmUpOiBTZXQgREVDTF9BUlRJRklDSUFMLgoKVHVlIE5vdiAxOSAxNTo0ODoxOSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IEhhbmRsZSBvYmoudmZuIGJldHRlci4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBTZXQgVFJFRV9UWVBFIG9uIHJlc3VsdCBmcm9tCglidWlsZF92Zm5fcmVmLgoKVHVlIE5vdiAxOSAxMzoxNDozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEFsc28gaGFuZGxlIGFuYWNocm9uaXN0aWMKCWltcGxpY2l0IGNvbnZlcnNpb25zIGZyb20gKDo6KikoKSB0byBjdiB2b2lkKi4KCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IExpa2V3aXNlLgoKTW9uIE5vdiAxOCAxNzowNToyNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IEZpeCBib2d1cyB3YXJuaW5nLgoKTW9uIE5vdiAxOCAxNjoxMDo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogQXZvaWQgdGhpbmtpbmcgYSBQT0lOVEVSX1RZUEUKCShNRVRIT0RfVFlQRSkgaXMgYSBUWVBFX1BUUk1FTUZVTkNfUC4KClRodSBOb3YgMTQgMjM6MTg6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU3VwcG9ydCBEV0FSRjJfREVCVUcuCgkqIHNlYXJjaC5jIChkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNodGFnLCBmaW5pc2hfZW51bSk6IExpa2V3aXNlLgoJKiBsZXguYyAoY2hlY2tfbmV3bGluZSk6IFVzZSBkZWJ1Z18qIGluc3RlYWQgb2YgY2FsbGluZyAqb3V0CglmdW5jdGlvbnMgZGlyZWN0bHkuCgpUaHUgTm92IDE0IDE1OjIxOjQ2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoY3BsaWIyLnJlYWR5KTogQWRkIGVsc2UgY2xhdXNlIHRvIGF2b2lkIHByb2JsZW1zCglvbiBzb21lIHBpY2t5IGhvc3RzLgoKV2VkIE5vdiAxMyAxMjozMjowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBIGNsYXNzIGhhcyBhIG5vbi10cml2aWFsIGNvcHkKCWNvbnN0cnVjdG9yIGlmIGl0IGhhcyB2aXJ0dWFsIGZ1bmN0aW9ucy4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogQWx3YXlzIGNhbGwgYSBjb25zdHJ1Y3Rvci4KCgkqIGNhbGwuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBTdGlsbCB0YWNrIG9uIGEgUkVGX0JJTkQKCWZvciBiYWQgY29udmVyc2lvbnMuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFByb3BhZ2F0ZSBJQ1NfQkFEX0ZMQUcuCgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBQYXNzIExPT0tVUF9PTkxZQ09OVkVSVElORy4KCShjX2V4cGFuZF9yZXR1cm4pOiBMaWtld2lzZS4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IExpa2V3aXNlIGZvciB7IH0uCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogS2VlcCB0aGUgQ09OU1RSVUNUT1IgaGFuZGxpbmcuCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogSGFuZGxlIGZhaWx1cmUgYmV0dGVyLgoKV2VkIE5vdiAxMyAxMTo1MToyMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IEFsc28gc2V0IFBFWEVDVVRFX1NFQVJDSCwgdG8gbWFrZSB0aGUgaW52b2NhdGlvbgoJb2YgR0NDIGJlIHBhdGgtcmVsYXRpdmUuCgpXZWQgTm92IDEzIDExOjI3OjE2IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZysrLWNyb3NzKTogRysrLWNyb3NzIGRvZXNuJ3QgbmVlZCB2ZXJzaW9uLm8sIGJ1dAoJaXQgZG9lcyBuZWVkIGNob29zZS10ZW1wLm8gYW5kIHBleGVjdXRlLm8uCgpXZWQgTm92IDEzIDA3OjUzOjM4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGcrKy5jIChlcnJvcikgWyFIQVZFX1ZQUklOVEZdOiBQdXQgZXJyb3IgYmFjayBmb3IgdGhlIG9ubHkgdGltZQoJdGhhdCB3ZSBzdGlsbCB1c2UgaXQuCgkoUF90bXBkaXIsIFJfT0ssIFdfT0ssIFhfT0spIFtfX01TRE9TX19dOiBEZWxldGUgdW5uZWNlc3NhcnkgbWFjcm9zLgoKV2VkIE5vdiAxMyAwMjowMDoyNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBBdm9pZCBjYWxsaW5nIGNvbnN0cnVjdG9ycyB0bwoJaW5pdGlhbGl6ZSByZWZlcmVuY2UgdGVtcHMuCgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBGaXguCgpUdWUgTm92IDEyIDE5OjEwOjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogU2ltcGxpZnkgZm9yIGZsYWdfYW5zaV9vdmVybG9hZGluZy4KCShjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfaW5pdGlhbGl6YXRpb24pOiBMaWtld2lzZS4KCSogaW5pdC5jIChleHBhbmRfZGVmYXVsdF9pbml0KTogTGlrZXdpc2UuCgkoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoQ09OVl9OT05DT05WRVJUSU5HKTogTG9zZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NfY2FzdCk6IExvc2UgYWxsb3dfbm9uY29udmVydGluZyBwYXJtLgoJKiAqLmM6IEFkanVzdC4KCSogY2FsbC5jIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogQXNzdW1lIExPT0tVUF9PTkxZQ09OVkVSVElORy4KClR1ZSBOb3YgMTIgMTY6Mjk6MDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY2FudWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFJldmVyc2UgYXJncyB0byBleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2suCgpUdWUgTm92IDEyIDE1OjI2OjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogRG9uJ3QgY3Jhc2ggb24gbm9uLWNvbnN0cnVjdG9yCglUQVJHRVRfRVhQUi4KClR1ZSBOb3YgMTIgMTQ6MDA6NTAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZysrLmM6IEluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkoVlBST1RPLCBQVlBST1RPLCBWQV9TVEFSVCk6IERlbGV0ZS4KCShjaG9vc2VfdGVtcF9iYXNlX3RyeSwgY2hvb3NlX3RlbXBfYmFzZSwgcGVycm9yX2V4ZWMsCglydW5fZG9zKSBbX19NU0RPU19fXTogRGVsZXRlIGZucy4KCShwZmF0YWxfd2l0aF9uYW1lKTogRGVsZXRlIGZuLgoJKHRlbXBfZmlsZW5hbWUpOiBEZWNsYXJlIGxpa2UgaW4gZ2NjLmMuCgkocGV4ZWN1dGUsIHB3YWl0LCBjaG9vc2VfdGVtcF9iYXNlKTogRGVjbGFyZSBmcm9tIGdjYy5jLgoJKGVycm9yX2NvdW50LCBzaWduYWxfY291bnQpOiBEZWZpbmUuCgkoZXJyb3IpOiBEZWxldGUgYm90aCBkZWZpbml0aW9ucy4KCShQRVhFQ1VURV97RklSU1QsTEFTVCxTRUFSQ0gsVkVSQk9TRX0pOiBEZWZpbmUgZnJvbSBnY2MuYy4KCShwZmF0YWxfcGV4ZWN1dGUpOiBBZGQgZm4gZnJvbSBnY2MuYy4KCShtYWluKTogUmVuYW1lIGxvY2FsIFZFUkJPU0UgdmFyIHRvIFZFUkJPU0VfRkxBRy4gIFJld3JpdGUgdGhlCgljb2RlIHRvIHVzZSB0aGUgcGV4ZWN1dGUgc3R1ZmYgYWxzbyB1c2VkIGJ5IGdjYy5jLgoJKE1JTl9GQVRBTF9TVEFUVVMpOiBEZWZpbmUuCgkqIE1ha2UtbGFuZy5pbiAoZysrKTogQWRkIGRlcGVuZGVuY3kgb24gYW5kIGxpbmtpbmcgd2l0aAoJY2hvb3NlLXRlbXAubyBhbmQgcGV4ZWN1dGUuby4KCgkqIGNwLXRyZWUuaDogSW5jbHVkZSBnYW5zaWRlY2wuaC4KCShTVERJT19QUk9UTyk6IERlbGV0ZSAjdW5kZWYvI2RlZmluZS4KCSogY3Z0LmMgKE5VTEwpOiBEZWxldGUgI3VuZGVmLyNkZWZpbmUuCgkqIGV4cHIuYyAoTlVMTCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKE5VTEwpOiBMaWtld2lzZS4KCSogcnR0aS5jIChOVUxMKTogTGlrZXdpc2UuCgkqIHhyZWYuYyAoTlVMTCk6IExpa2V3aXNlLgoKCSogY3AtdHJlZS5oIChidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbik6IEFkZCBwcm90b3R5cGUuCgkqIGNhbGwuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBEZWxldGUgcHJvdG90eXBlLiAgQ29ycmVjdAoJZGVjbCBvZiBGTEFHUyBhcmcgdG8gYmUgYW4gaW50LgoJKiBjdnQuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBMaWtld2lzZS4KClR1ZSBOb3YgMTIgMTI6MTY6MjAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5kZWY6IEFkZCBUUllfQkxPQ0sgYW5kIEhBTkRMRVIuCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBTdXBwb3J0IHRlbXBsYXRlcy4KCSogcGFyc2UueSAodHJ5X2Jsb2NrLCBoYW5kbGVyX3NlcSk6IExpa2V3aXNlLgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IFN1cHBvcnQgVFJZX0JMT0NLIGFuZCBIQU5ETEVSLgoKTW9uIE5vdiAxMSAxMzo1NzozMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjdXJyZW50X3RlbXBsYXRlX2FyZ3MpOiBOZXcgZm4uCgkocHVzaF90ZW1wbGF0ZV9kZWNsKTogVXNlIGl0LgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogVXNlIGl0LgoKCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBEZXJlZmVyZW5jZSByZWYgdmFycy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBHZW5lcmFsaXplIGhhbmRsaW5nIG9mIFRZUEVOQU1FX1RZUEVzIGluCgl0aGUgZGVjbC1zcGVjaWZpZXItc2VxLgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBEb24ndCBmb3JjZSB0aGUgdHlwZSBvZiBhIGNvbnZlcnNpb24KCW9wIHRvIGJlIGNvbXBsZXRlLiAgRG9uJ3Qgd2FybiBhYm91dCBjb252ZXJ0aW5nIHRvIHRoZSBzYW1lIHR5cGUKCWZvciB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgY2FsbCBpbnN0YW50aWF0ZV9kZWNsIG9uIHN5bnRoZXNpemVkCgltZXRob2RzLgoKTW9uIE5vdiAxMSAxMzoyMDozNCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IFJlbW92ZSBwcmV2aW91cyBib2d1c25lc3MuCglEb24ndCBnaXZlIGVycm9ycyBpZiBmb3JjZSBpcyBzZXQuCgpGcmkgTm92ICA4IDE3OjM4OjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3QgZW1pdCBkZWJ1ZyBpbmZvLgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogTG9zZSBvYnNvbGV0ZSBjb2RlLgoJKGdyb2tkZWNsYXJhdG9yKTogU3RpbGwgZG8gdGhlIGxvbmcgbG9uZyB0aGluZyBhZnRlciBjb21wbGFpbmluZy4KCSogc2VhcmNoLmMgKG5vdGVfZGVidWdfaW5mb19uZWVkZWQpOiBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSBpbiBhCgl0ZW1wbGF0ZS4KCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogRm9yIG5vbi1sb2NhbCBjbGFzc2VzLAoJcHVzaF90b190b3BfbGV2ZWwgZmlyc3QuCgpGcmkgTm92ICA4IDExOjUyOjI4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogQWRkIG5vX2Vycm9yIHBhcmFtZXRlci4KCShidWlsZF9wdHJtZW1mdW5jKTogQ2FsbCBnZXRfZGVsdGFfZGlmZmVyZW5jZSB3aXRoIG5vX2Vycm9yIHNldDsKCXdlIGRvbid0IHdhbnQgZXJyb3IgbWVzc2FnZXMgd2hlbiBjb252ZXJ0aW5nIHVucmVsYXRlZAoJcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zLgoKVGh1IE5vdiAgNyAxMToxNjoyNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBJbXByb3ZlIHRoZSB3b3JkaW5nIG9uIGVycm9yIG1lc3NhZ2VzIHRoYXQKCWludm9sdmUgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb25zLgoKVHVlIE5vdiAgNSAxNzoxMjowNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogTW92ZSBjb2RlIGZvciBjb252ZXJzaW9ucyBmcm9tCgkoOjoqKSgpIHRvIHZvaWQqIG9yICgqKSgpIHVwIGEgYml0LCBzbyB0aGF0IHdlIGNhbiBjb252ZXJ0IGZyb20KCU1FVEhPRF9UWVBFcyBhcyB3ZWxsLgoKVHVlIE5vdiAgNSAxNDo1NDoxNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IE1ha2Ugc3VyZSAndHlwZScgaXMgcGVybWFuZW50LgoJVGhlcmUgYXJlIG5vICdtZW1iZXInIHR5cGVzLgoJKGdldF90aW5mb19mbl9keW5hbWljKTogRGlhZ25vc2UgdHlwZWlkIG9mIG92ZXJsb2FkZWQgZm4uCgkoYnVpbGRfeF90eXBlaWQpOiBIYW5kbGUgZXJyb3JzLgoKTW9uIE5vdiAgNCAxNzo0MzoxMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IEhhbmRsZSBhbmFjaHJvbmlzdGljIGltcGxpY2l0Cgljb252ZXJzaW9ucyBmcm9tICg6OiopKCkgdG8gdm9pZCogb3IgKCopKCkuCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBMaWtld2lzZS4KCShjcF9jb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBSZW1vdmUgY3BfY29udmVydF90b19wb2ludGVyCgljb252ZXJzaW9ucyBmcm9tIGhlcmUuCgkqIGRlY2wyLmMgKGxhbmdfZGVjb2RlX29wdGlvbik6IEFkZCAtV3tuby0sfXBtZi1jb252ZXJzaW9ucy4KCSogbGFuZy1vcHRpb25zLmg6IExpa2V3aXNlLgoJKiBkZWNsMi5jICh3YXJuX3BtZjJwdHIpOiBEZWZpbmUuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogdHlwZWNrMi5jIChkaWdlc3RfaW5pdCk6IEFsbG93IHBtZnMgZG93biBpbnRvCgljb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbi4KClN1biBOb3YgIDMgMDk6NDM6MDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IEZpeCBmb3IgcmV0dXJuaW5nIG92ZXJsb2FkZWQgZm4uCgpGcmkgTm92ICAxIDA4OjUzOjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoRElSRUNUX0JJTkQpOiBDaGFuZ2UgZnJvbSBJTkRJUkVDVF9CSU5ELgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBQYXNzIERJUkVDVF9CSU5ELgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogRG9uJ3QgbWFyayAndGhpcycgYWRkcmVzc2FibGUuICBVc2UKCURJUkVDVF9CSU5ELgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IERvbid0IHBhc3MgSU5ESVJFQ1RfQklORC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChtYXJrX2FkZHJlc3NhYmxlKTogQWxsb3cgJnRoaXMgaWYgZmxhZ190aGlzX2lzX3ZhcmlhYmxlLgoKVGh1IE9jdCAzMSAxNzowODo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSk6IFN1cHBvcnQgVEFSR0VUX0VYUFIsIHVuaWZ5IHdpdGgKCXNpbWlsYXIgY29kZSBpbiBidWlsZF91cF9yZWYuCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBEcmFzdGljYWxseSBzaW1wbGlmeS4KCk1vbiBPY3QgMjggMTI6NDU6MDUgMTk5NiAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKHNpZ25lZF9vcl91bnNpZ25lZF90eXBlKTogSWYgdGhlIGdpdmVuIHR5cGUgYWxyZWFkeQoJYXMgdGhlIGNvcnJlY3Qgc2lnbmVkbmVzcywgdGhlbiBqdXN0IHJldHVybiBpdC4KCgkqIHR5cGVjay5jICh7dW4sfXNpZ25lZF90eXBlKTogSWYgY2FuJ3QgZG8gYW55dGhpbmcsIGNhbGwKCXNpZ25lZF9vcl91bnNpZ25lZF90eXBlLgoKVGh1IE9jdCAyNCAxNDoyMTo1OSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGNvcHlfYXNzaWdubWVudF9hcmdfcCk6IERvbid0IGJ1eSB0aGUgZmFybSBpZgoJY3VycmVudF9jbGFzc190eXBlIGlzIE5VTEwuCgpXZWQgT2N0IDIzIDAwOjQzOjEwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBnZXJiaWwuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEF2b2lkIGVtcHR5IHN0cnVjdHMgYnkgYWRkaW5nIGEgZmllbGQKCXNvIGxheW91dF90eXBlIGdldHMgdGhlIG1vZGUgcmlnaHQuCgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRHJhc3RpY2FsbHkgc2ltcGxpZnkuCgpNb24gT2N0IDIxIDIyOjM0OjAyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChkZWNheV9jb252ZXJzaW9uKTogSGFuZGxlIG92ZXJsb2FkZWQgbWV0aG9kcy4KCkZyaSBPY3QgMTggMTY6MDM6NDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBBIFRBUkdFVF9FWFBSIGhhcyBzaWRlLWVmZmVjdHMuCgpUaHUgT2N0IDE3IDExOjMxOjU5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBBZGQgY29kZSB0byBzdXBwb3J0IHBvaW50ZXIgdG8KCW1lbWJlciBmdW5jdGlvbiB0byBwb2ludGVyIHRvIGZ1bmN0aW9uIGNvbnZlcnNpb25zLgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IEFkZCBjb2RlIHRvIGFsbG93IGZha2VkIHVwIG9iamVjdHMsCglpZ25vcmluZyB0aGVtIGlmIHRoZXkgYXJlIG5vdCB1c2VkLCBhbmQgZ2l2aW5nIGFuIGVycm9yLCBpZiB0aGV5CglhcmUgbmVlZGVkLgoJKiB0eXBlY2suYyAoZ2V0X21lbWJlcl9mdW5jdGlvbl9mcm9tX3B0cmZ1bmMpOiBGb2xkIGUxIHRvIGltcHJvdmUKCWNvZGUsIGFuZCBzbyB0aGF0IHdlIGNhbiBnaXZlIGFuIGVycm9yLCBpZiB3ZSBuZWVkZWQgYW4gb2JqZWN0LAoJYW5kIG9uZSB3YXMgbm90IHByb3ZpZGVkLgoJKGJ1aWxkX2NfY2FzdCk6IERvbid0IGNhbGwgZGVmYXVsdF9jb252ZXJzaW9uIHdoZW4gd2Ugd2FudCB0bwoJY29udmVydCB0byBwb2ludGVyIHRvIGZ1bmN0aW9uIGZyb20gYSBNRVRIT0RfVFlQRS4KCk1vbiBPY3QgMTQgMDA6Mjg6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIucmVhZHkpOiBGaXggbG9naWMuCgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBPbmx5IGNvbXBsYWluIGFib3V0IG5vbi1hcnRpZmljaWFsIGZ1bmN0aW9uCgltZW1iZXJzLgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQWRkIHN5bnRoZXNpemVkIG1ldGhvZHMgdG8gVFlQRV9NRVRIT0RTLgoKRnJpIE9jdCAxMSAxNjoxMjo0MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHByLmMgKGNwbHVzX2V4cGFuZF9leHByKTogUHJlLXR3ZWFrIGNhbGxfdGFyZ2V0IGxpa2UKCWV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gd291bGQuCgoJKiBwdC5jIChtYXJrX2RlY2xfaW5zdGFudGlhdGVkKTogSWYgZXh0ZXJuX3AsIGNhbGwKCW1hcmtfaW5saW5lX2Zvcl9vdXRwdXQuCgpUaHUgT2N0IDEwIDE1OjU4OjA4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IEFkZCBjb2RlIHRvIGhhbmRsZSBpbnRlcm1lZGlhdGUKCXBtZCBjb252ZXJzaW9ucy4KCgkqIHR5cGVjay5jIChnZXRfZGVsdGFfZGlmZmVyZW5jZSk6IEZpeCB3b3JkaW5nLCBhcyB3ZSBjYW4gYmUgdXNlZAoJZm9yIHBvaW50ZXIgdG8gZGF0YSBtZW1iZXJzLgoKVHVlIE9jdCAgOCAxMjo0Mzo1MSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IElmIHRoZSBmdW5jdGlvbiBkZWNsIGlzbid0IGEgbWVtYmVyIG9mIHRoaXMKCXRlbXBsYXRlLCByZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWNsIChpbmNsdWRpbmcgY29weWluZyB0aGUKCWxhbmctc3BlY2lmaWMgcGFydCkgc28gd2UgZG9uJ3QgaG9zZSBvdXJzZWx2ZXMgbGF0ZXIuCgpUaHUgT2N0ICAzIDE2OjI0OjI4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZW1vdmUgRFdBUkYtc3BlY2lmaWMgdGFnIGhhbmRsaW5nLgoJKiBkZWNsLmMgKHB1c2h0YWcpOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBBbHdheXMgY2xlYXIgREVDTF9BUkdVTUVOVFMgb24gZnVuY3Rpb24gZGVjbHMgd2l0aAoJbm8gc2F2ZWQgUlRYLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEVtaXQgRFdBUkYgZGVidWdnaW5nIGluZm8gZm9yIHN0YXRpYyBkYXRhCgltZW1iZXJzLgoKV2VkIE9jdCAgMiAyMTo1ODowMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTWFrZSBzdXJlIHRoZSBvbGQgREVDTF9MQU5HX1NQRUNJRklDCglpc24ndCB0aGUgc2FtZSBhcyB0aGUgbmV3IG9uZSBiZWZvcmUgd2Ugd2hhY2sgaXQuCgpNb24gU2VwIDMwIDEzOjM4OjI0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMsIGNwLXRyZWUuaCwgY3Z0LmMsIGRlY2wuYywgZGVjbDIuYywgZ3h4LmdwZXJmLCBoYXNoLmgsCglsZXguYywgbWV0aG9kLmMsIHBhcnNlLnksIHR5cGVjay5jLCB0eXBlY2syLmM6IFJlbW92ZQoJd2Fybl90cmFkaXRpb25hbCBhbmQgd2Fybl9zdHJpY3RfcHJvdG90eXBlczsgcmVtb3ZlIGFuY2llbnQKCSdvdmVybG9hZCcgY29kZTsgcmVtb3ZlIHJlZmVyZW5jZXMgdG8gZmxhZ190cmFkaXRpb25hbC4KCk1vbiBTZXAgMzAgMTI6NTg6NDAgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogaW5wdXQuYyAoc3ViX2dldGNoKTogSGFuZGxlIDgtYml0IGNoYXJhY3RlcnMgaW4gc3RyaW5nIGxpdGVyYWxzLgoKU3VuIFNlcCAyOSAwMzoxMjowMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKG1hcGNhcik6IEhhbmRsZSBDT05TVFJVQ1RPUnMuCgkoY29weV90b19wZXJtYW5lbnQpOiBIYW5kbGUgZXhwcmVzc2lvbl9vYnN0YWNrIHByb3Blcmx5LgoKCSogTWFrZS1sYW5nLmluIChjcGxpYjIudHh0KTogQWxzbyBkZXBlbmQgb24gdGhlIGhlYWRlcnMuCgoJKiBydHRpLmMgKGdldF90aW5mb192YXIpOiBEb24ndCBhc3N1bWUgdGhhdCBQT0lOVEVSX1NJWkUgPT0KCUlOVF9UWVBFX1NJWkUuCgkoZXhwYW5kX2NsYXNzX2Rlc2MpOiBVc2UgVVNJdHlwZSBmb3Igb2Zmc2V0IGZpZWxkLgoJKiB0aW5mby5oIChzdHJ1Y3QgX19jbGFzc190eXBlX2luZm8pOiBMaWtld2lzZS4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9pbnQpOiBUWVBFX1BSRUNJU0lPTiBzaG91bGQgYmUgYXBwbGllZAoJdG8gdHlwZXMuCgpTYXQgU2VwIDI4IDE0OjQ0OjUwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQSBDT05EX0VYUFIgaW52b2x2aW5nIHZvaWQgbXVzdCBiZSBhCglidWlsdGluLgoKRnJpIFNlcCAyNyAxNjo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfeF9jb21wb25lbnRfcmVmKTogTmV3IGZuLgoJKGJ1aWxkX29iamVjdF9yZWYpOiBVc2UgaXQuCgkqIHBhcnNlLnkgKHByaW1hcnkpOiBVc2UgaXQuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogVXNlIGl0LgoJKiBjcC10cmVlLmg6IERlY2xhcmUgaXQuCgoJKiBkZWNsLmMgKHN0YXJ0X2RlY2wpOiBWYXJpYWJsZS1zaXplZCBhcnJheXMgY2Fubm90IGJlIGluaXRpYWxpemVkLgoJKiBlcnJvci5jIChkdW1wX3R5cGVfc3VmZml4KTogSGFuZGxlIHZhcmlhYmxlIGFycmF5cy4KCkZyaSBTZXAgMjcgMTM6MTQ6MDUgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluIChleGNlcHRpb24ubyk6IFB1dCBiYWNrIGNvbXBpbGluZyBpdCB3aXRoIC1mUElDLgoKRnJpIFNlcCAyNyAwMzowMDowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBEb24ndCB0cnkgdG8gbG9vayB1cCBhbnl0aGluZyBpbiBhCglUWVBFTkFNRV9UWVBFLgoKCSogdGluZm8yLmNjIChfX3Rocm93X3R5cGVfbWF0Y2hfcnR0aSk6IE9vcHMuCgpUaHUgU2VwIDI2IDIyOjExOjA1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZXhjZXB0aW9uLm8pOiBVc2UgLWZuby1QSUMgZm9yIG5vdy4KClRodSBTZXAgMjYgMTA6NTk6MDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBQYXNzIHRpbmZvIGZucyByYXRoZXIgdGhhbgoJY2FsbGluZyB0aGVtLgoJKGdldF90aW5mb19mbl9keW5hbWljKTogRXh0cmFjdGVkIGZyb20gYnVpbGRfdHlwZWlkLgoJKiB0aW5mbzIuY2MgKF9fZHluYW1pY19jYXN0KTogQWRqdXN0LgoKCSogcnR0aS5jIChidWlsZF90eXBlaWQpOiBVc2UgcmVzb2x2ZXNfdG9fZml4ZWRfdHlwZV9wLgoJKGJ1aWxkX3hfdHlwZWlkKTogTGlrZXdpc2UuCgoJKiBwYXJzZS55OiBDYWxsIGJ1aWxkX3hfdHlwZWlkIGluc3RlYWQgb2YgYnVpbGRfdHlwZWlkLgoJKiBjcC10cmVlLmRlZjogQWRkIFRZUEVJRF9FWFBSLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IEhhbmRsZSB0eXBlaWQuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGlrZXdpc2UuCgkqIHJ0dGkuYyAoYnVpbGRfeF90eXBlaWQpOiBUaHJvdyBiYWRfdHlwZWlkIGZyb20gaGVyZS4KCShidWlsZF90eXBlaWQpOiBOb3QgaGVyZS4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGJ1aWxkX3hfdHlwZWlkLgoKV2VkIFNlcCAyNSAxNzoyNjoxNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IFB1bGwgb3V0IGNvbnN0YW50IHZhbHVlcy4KCgkqIHRyZWUuYyAobWFwY2FyKTogVXNlIGJ1aWxkX2NwbHVzX2FycmF5X3R5cGUsIG5vdCBidWlsZF9hcnJheV90eXBlLgoKV2VkIFNlcCAyNSAxNzoyODo1MyAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQ3JlYXRlIHNob3J0IGludCB0eXBlcyBiZWZvcmUKCWNyZWF0aW5nIHNpemVfdCBpbiBjYXNlIGEgbWFjaGluZSBkZXNjcmlwdGlvbiBuZWVkcyB0byB1c2UKCXVuc2lnbmVkIHNob3J0IGZvciBzaXplX3QuCgpUdWUgU2VwIDI0IDE4OjE4OjQ0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIE1ha2UtbGFuZy5pbiAoZXhjZXB0aW9uLm8pOiBUdXJuIG9mZiBwaWMuCgoJKiB0aW5mbzIuY2MgKF9fdGhyb3dfdHlwZV9tYXRjaF9ydHRpKTogRml4IGN2LXZhcmlhbnRzIG9mIHRoZSBzYW1lCgl0eXBlLCBtdWx0aS1sZXZlbCBwdHIgY29udmVyc2lvbnMuCgoJKiBydHRpLmMgKGNhbGxfdm9pZF9mbik6IFJlbmFtZWQgYW5kIGdlbmVyaWNpemVkIGZyb20gdGhyb3dfYmFkX2Nhc3QuCgkodGhyb3dfYmFkX2Nhc3QpOiBVc2UgaXQuCgkodGhyb3dfYmFkX3R5cGVpZCk6IE5ldyBmbi4KCShidWlsZF90eXBlaWQpOiBUaHJvdyBiYWRfdHlwZWlkIGFzIG5lZWRlZC4KCVVzZSBidWlsZF9jYWxsLgoJKHN5bnRoZXNpemVfdGluZm9fZm4pOiBIYW5kbGUgZnVuY3Rpb25zIGFuZCBhcnJheXMgYmVmb3JlIGNoZWNraW5nCglmb3IgY3YtcXVhbHMuCgoJKiBSZW1vdmUgLmggZnJvbSBzdGFuZGFyZCBDKysgaGVhZGVycywgYWRkIG5ldy5oLCBtb3ZlIGludG8gaW5jCglzdWJkaXJlY3RvcnkuCgoJKiBleGNlcHRpb24qOiBSZW1vdmUgcG9pbnRlciBmcm9tIG9iamVjdCwgY29uc3RydWN0b3JzLiAgQWRkCglkZWZhdWx0IGV4Y2VwdGlvbjo6d2hhdCB0aGF0IHVzZXMgdHlwZV9pbmZvOjpuYW1lLiAgQWRkCglfX3Rocm93X2JhZF90eXBlaWQuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IERvbid0IGFkZCBhIGNvb2tpZSB0byBuZXcgKHZvaWQgKikgVFsyXS4KCk1vbiBTZXAgMjMgMTU6MjE6NTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZS1sYW5nLmluOiBCdWlsZGluZyBDKysgY29kZSBkZXBlbmRzIG9uIGNjMXBsdXMuCgpNb24gU2VwIDIzIDEyOjM4OjQwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RydWN0IHNhdmVkX3Njb3BlKTogRGVjbGFyZSBQUk9DRVNTSU5HX1RFTVBMQVRFX0RFQ0wgYXMKCWEgSE9TVF9XSURFX0lOVCwgbm90IGEgdHJlZS4KCk1vbiBTZXAgMjMgMTI6MzY6MDIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0aW9uLmNjOiBEb24ndCBpbmNsdWRlIDxzdGRsaWIuaD4uCgoJKiBNYWtlLWxhbmcuaW4gKGMrKy5jbGVhbik6IFJlbW92ZSBjcGxpYjIuKi4KCk1vbiBTZXAgMjMgMDk6NDI6MTkgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbXBvbmVudF9kZWNsXzEsIGNvbXBvbmVudF9jb3N0cnVjdG9yX2RlY2xhcmF0b3IgY2FzZSk6CglQYXNzIGF0dHJpYnV0ZXMvcHJlZml4X2F0dHJpYnV0ZXMgaW4gdHJlZSBsaXN0LgoKTW9uIFNlcCAyMyAwMToxODo1MCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0aW5mb3ssMn0uY2M6ICNpbmNsdWRlIDxzdGRkZWYuaD4gaW5zdGVhZCBvZiA8c3RkbGliLmg+LgoKU3VuIFNlcCAyMiAwNTozMToyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IERvbid0IGRvIGRlZmVycmVkIGxvb2t1cCBpbiBhIHRlbXBsYXRlCgloZWFkZXIuCgoJKiB0eXBlY2syLmMgKHN0b3JlX2luaXRfdmFsdWUpOiBPb3BzLgoKCSogbmV3LntoLGNjfSwgZXhjZXB0aW9uLntoLGNjfSwgdHlwZWluZm8uaCwgdGluZm97Mi5jYywuY2MsLmh9OgoJTmV3IGZpbGVzIGZvciBDKysgbGFuZy1zdXBwb3J0IGxpYnJhcnkuCgkqIE1ha2UtbGFuZy5pbiAoQ1hYX0VYVFJBX0hFQURFUlMpOiBEZWZpbmUuCgkoQ1hYX0xJQjJGVU5DUyk6IERlZmluZS4KCUFuZCBydWxlcyBmb3IgYnVpbGRpbmcgdGhlIEMrKyBsYW5nLXN1cHBvcnQgY29kZS4KCSogY29uZmlnLWxhbmcuaW4gKGhlYWRlcnMpOiBEZWZpbmUuCgkobGliMmZ1bmNzKTogRGVmaW5lLgoKU2F0IFNlcCAyMSAxOToxNzoyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElmIENPTlNUUlVDVE9SIGhhcyBhIHR5cGUsIGNhbGwKCWRpZ2VzdF9pbml0LgoJKiBwdC5jICh0c3Vic3RfY29weSk6IENvbXB1dGUgdHlwZSBmb3IgQ09OU1RSVUNUT1IuCgkqIHR5cGVjazIuYyAoc3RvcmVfaW5pdF92YWx1ZSk6IENoZWNrIGZvciBpbml0aWFsaXppbmcgcG1mIHdpdGggeyB9CgloZXJlLgoJKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IE5vdCBoZXJlLgoKVGh1IFNlcCAxOSAxNjo0MTowNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChiZWdpbl90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBJbmNyZW1lbnQKCXByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCBoZXJlLgoJKGVuZF90ZW1wbGF0ZV9wYXJtX2xpc3QpOiBOb3QgaGVyZS4KCShwcm9jZXNzX3RlbXBsYXRlX3Bhcm0pOiBObyBuZWVkIHRvIGFkZCAxIHRvIGl0IG5vdy4KCSogKi5jOiBVc2UgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsIGluc3RlYWQgb2YgY3VycmVudF90ZW1wbGF0ZV9wYXJtcwoJdG8gY2hlY2sgZm9yIGJlaW5nIGluIGEgdGVtcGxhdGUuCgoJKiBwdC5jICh1c2VzX3RlbXBsYXRlX3Bhcm1zKTogSGFuZGxlIFNDT1BFX1JFRi4gIEZpeCBDT05TVFJVQ1RPUi4KCSh0c3Vic3RfY29weSk6IEhhbmRsZSBDT05TVFJVQ1RPUi4KCShpbnN0YW50aWF0ZV9kZWNsKTogU2V0IHVwIGNvbnRleHQgcHJvcGVybHkgZm9yIHZhcmlhYmxlcy4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBIYW5kbGUgQ09OU1RSVUNUT1IuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBSZXZlcnNlIENMQVNTVFlQRV9UQUdTLgoKV2VkIFNlcCAxOCAxMzozMDoyMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZW51bSB0cmVlX25vZGVfa2luZCkgW0dBVEhFUl9TVEFUSVNUSUNTXTogUHV0IHRoZSBlbnVtIGJhY2suCgpXZWQgU2VwIDE4IDA0OjI0OjA3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogQ2FsbCBjb21kYXRfbGlua2FnZSBiZWZvcmUgc2V0dGluZyB0aGUKCVRSRUVfQ09ERS4KCgkqIGRlY2wyLmMgKGNvbWRhdF9saW5rYWdlKTogVXNlIG1ha2VfZGVjbF9vbmVfb25seS4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBMaWtld2lzZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IENoZWNrIHN1cHBvcnRzX29uZV9vbmx5IGluc3RlYWQgb2YKCVNVUFBPUlRTX1dFQUsuCgpTYXQgU2VwIDE0IDA4OjM0OjQxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tmaWVsZCk6IFRpZ2h0ZW4gY2hlY2tpbmcgZm9yIGFjY2VzcyBkZWNscy4KCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogUmVzb2x2ZSByZWZlcmVuY2VzIHRvCgljdXJyZW50X2NsYXNzX3R5cGUuICBTZXQgQ0xBU1NUWVBFX0dPVF9TRU1JQ09MT04uCgkobG9va3VwX25hbWVfcmVhbCk6IFR5cGVzIHRoYXQgZGVwZW5kIG9uIGEgdGVtcGxhdGUgcGFyYW1ldGVyIGdldAoJYW4gaW1wbGljaXQgJ3R5cGVuYW1lJyB1bmxlc3MgdGhleSdyZSBpbiB0aGUgY3VycmVudCBzY29wZS4KCShzdGFydF9kZWNsXzEpOiBXZSBkb24ndCBjYXJlIGFib3V0IGluY29tcGxldGUgdHlwZXMgdGhhdCBkZXBlbmQKCW9uIGEgdGVtcGxhdGUgcGFybS4KCShncm9rZGVjbGFyYXRvcik6IFJlc29sdmUgJ3R5cGVuYW1lJ3MgaW4gdGhlIHR5cGUgc3BlY2lmaWVyIHRoYXQKCXJlZmVyIHRvIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgc2NvcGUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFJlbW92ZSAnaW5saW5lIGNhbGxlZCBiZWZvcmUKCWRlZmluaXRpb24nIGRpYWdub3N0aWMuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogZGVjbC5jIChkdXBsaWNhdGVfZGVjbHMpOiBEb3duZ3JhZGUgJ3VzZWQgYmVmb3JlIGRlY2xhcmVkCglpbmxpbmUnIHRvIGEgd2FybmluZywgb25seSB3aXRoIC1XaW5saW5lLgoKRnJpIFNlcCAxMyAxNzozMTo0MCAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEZpeCBpbmNsdWRlIHBhdGhzLCBhZGQgQERBU0hfQ19GTEFHQCB0byBjb21waWxlLgoKV2VkIFNlcCAxMSAyMjozODoxMyAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBjcy5wdXJkdWUuZWR1PgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFdoZW4gY2FsbGluZyBhIHNpZ25hdHVyZQoJZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgYXMgaW4gb3RoZXIgY2FzZXMsIGxldCBpbnN0YW5jZV9wdHIgc2ltcGx5CgliZSBpbnN0YW5jZS4KCldlZCBTZXAgMTEgMjI6MTQ6NDQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoc2ltcGxlX3N0bXQpOiBDbGVhbnVwIGFuZCB1c2UgZG9fcG9wbGV2ZWwgKCkuCgpXZWQgU2VwIDExIDIyOjEwOjQ4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBBZGQgYSBwdXNobGV2ZWwgc28gdGhhdCAtZwoJd29ya3Mgb24gaHBwYSBhbmQgU1BBUkMuCgpXZWQgU2VwIDExIDEwOjE4OjA2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9pbmRpcmVjdF9yZWYpOiBDYXRjaCBQVFIgYmVpbmcgYW4gZXJyb3JfbWFya19ub2RlLgoKTW9uIFNlcCAgOSAxOTo1MToxNCAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBjcy5wdXJkdWUuZWR1PgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBDaGVjayBmaXJzdCB3aGV0aGVyIERFQ0xfQ09OVEVYVCBleGlzdHMKCWJlZm9yZSB0ZXN0aW5nIHdoZXRoZXIgaXQncyBhIHNpZ25hdHVyZS4KClN1biBTZXAgIDggMTY6MDY6NTcgMTk5NiAgR2VyYWxkIEJhdW1nYXJ0bmVyICA8Z2JAY3MucHVyZHVlLmVkdT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogRG9uJ3QgY29tcGxhaW4gYWJvdXQgc2lnbmF0dXJlCglwb2ludGVycyBhbmQgcmVmZXJlbmNlcyBub3QgYmVpbmcgYW4gYWdnciB0eXBlLgoJKGJ1aWxkX3RoaXMpOiBJZiBhIHNpZ25hdHVyZSBwb2ludGVyIG9yIHJlZmVyZW5jZSB3YXMgcGFzc2VkIGluLAoJanVzdCByZXR1cm4gaXQuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSWYgaW5zdGFuY2UgaXMgYSBzaWduYXR1cmUgcG9pbnRlciwgc2V0CgliYXNldHlwZSB0byB0aGUgc2lnbmF0dXJlIHR5cGUgb2YgaW5zdGFuY2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwpOiBEZWxldGVkIGJhc2V0eXBlIGFuZAoJaW5zdGFuY2UgcGFyYW1ldGVycywgdGhleSBjYW4gYmUgZm91bmQgYXMgdGhlIERFQ0xfQ09OVEVYVCBvZgoJZnVuY3Rpb24gYW5kIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgaW4uCgkqIGNwLXRyZWUuaDogQ2hhbmdlZCBkZWNsYXJhdGlvbiBvZiBidWlsZF9zaWduYXR1cmVfbWV0aG9kX2NhbGwuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBEZWxldGVkIGZpcnN0IHR3byBhcmd1bWVudHMgaW4gY2FsbAoJb2YgYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEFkZGVkIGNhbGwgdG8gYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsLgoKVGh1IFNlcCAgNSAxNjo1MToyOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY19jYXN0KTogRG9uJ3QgdGFjayBhIG5vbl9sdmFsdWVfZXhwciBvbnRvIGEKCXRhcmdldF9leHByLgoKVGh1IFNlcCAgNSAxMDowNTozOCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBVc2UgJSNULCBub3QgJSNELCBmb3IgZXJyb3IuCgpXZWQgU2VwICA0IDE3OjE2OjA5IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF90cnlfc3RtdHMpOiBNb3ZlIHRvIGV4Y2VwdC5jIGluIHRoZSBiYWNrZW5kLgoJKGV4cGFuZF9lbmRfdHJ5X3N0bXRzKTogUmVtb3ZlLgoKCSogaW5pdC5jIChwZXJmb3JtX21lbWJlcl9pbml0KTogVXNlIGFkZF9wYXJ0aWFsX2VudHJ5ICgpIGluc3RlYWQKCW9mIGRpcmVjdGx5IG1hbmlwdWxhdGluZyBsaXN0cy4KCShlbWl0X2Jhc2VfaW5pdCk6IExpa2V3aXNlLgoKV2VkIFNlcCAgNCAxMjoxNDozNiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX2V4Y2VwdGlvbl9ibG9ja3MpOiBBbHdheXMgbWFrZSBzdXJlIFVTRSBhbmQKCUNMT0JCRVIgaW5zbnMgdGhhdCBjYW1lIGF0IHRoZSBlbmQgc3RpbGwgZG8sIHRoZSBiYWNrZW5kIHJlbGllcwoJdXBvbiB0aGlzLgoKV2VkIFNlcCAgNCAwNzo0NDo0OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IFdlIGNhbiBvbmx5IHVzZSBhIFRBUkdFVF9FWFBSIG9mIHRoZQoJcmlnaHQgdHlwZS4KClR1ZSBTZXAgIDMgMTk6MjY6MDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLCBkb24ndCBjb21wbGFpbgoJYWJvdXQgdGVtcCB3aXRob3V0IHRhcmdldCBkZWNsLgoKVHVlIFNlcCAgMyAxMDoyMjo1NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3QgY29yZSBkdW1wIHdoZW4gdm9pZCgpIGlzIGdpdmVuLgoKVHVlIFNlcCAgMyAwMjozODo1NiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNvcHlfYXJnc19wKTogRG9uJ3QgY3Jhc2guCgpGcmkgQXVnIDMwIDE0OjI2OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IEFuZCBzdXBwb3J0IHRlbXBsYXRlIGFyZ3MgaW5zaWRlIHRoZSBleGNlcHRpb24KCXNwZWNpZmljYXRpb24uCgoJKiBwdC5jICh0c3Vic3QpOiBBZGQgc3VwcG9ydCBmb3IgZXhjZXB0aW9uIHNwZWNpZmljYXRpb25zIGluCgl0ZW1wbGF0ZSBmdW5jdGlvbnMuCgpGcmkgQXVnIDMwIDEwOjAxOjU1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmIChERUNMX1NUTVQpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgZmllbGQsIG9ubHkgMwoJZmllbGRzIG5vdy4KCSogY3AtdHJlZS5oIChzdGFydF9kZWNsKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKGdyb2tmaWVsZCk6IExpa2V3aXNlLgoJKG1ha2VfY2FsbF9kZWNsYXJhdG9yKTogQWRkIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKHNldF9xdWFsc19hbmRfc3BlYyk6IEFkZCByb3V0aW5lLgoJKiBsZXguYyAoc2V0X3F1YWxzX2FuZF9zcGVjKTogTGlrZXdpc2UuCgkqIGRlY2wuaCAoZ3Jva2RlY2xhcmF0b3IpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyLgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglncm9rZGVjbGFyYXRvci4KCShncm9rdHlwZW5hbWUpOiBMaWtld2lzZS4KCShzdGFydF9kZWNsKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZSB0aGUKCXRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLiAgRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjCglmaWVsZCBpbiBERUNMX1NUTVQuCgkoY3BfZmluaXNoX2RlY2wpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgZmllbGQgaW4gREVDTF9TVE1ULgoJKGdyb2tmbmRlY2wpOiBSZW1vdmUgdXNlbGVzcyBzZXQgb2YgcmFpc2VzLgoJKGdyb2tkZWNsYXJhdG9yKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZQoJdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIHN0YXJ0X2RlY2wuICBQdWxsIHRoZSB0aHJvdyBzcGVjIG91dAoJb2YgdGhlIGNhbGwgZGVjbGFyYXRvci4KCShncm9rcGFybXMpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKHN0YXJ0X2Z1bmN0aW9uKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlci4gIEVsaW1pbmF0ZQoJdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKHN0YXJ0X21ldGhvZCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBMaWtld2lzZS4KCShncm9rYml0ZmllbGQpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIGdyb2tkZWNsYXJhdG9yLgoJKGdyb2tvcHR5cGVuYW1lKTogTGlrZXdpc2UuCgkoZmluaXNoX2ZpbGUpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvCglzdGFydF9mdW5jdGlvbi4gIEFkZCB0aHJvdyBzcGVjIHRvIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IEFkZCB0aHJvdyBzcGVjIHRvCgltYWtlX2NhbGxfZGVjbGFyYXRvci4gIEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCXN0YXJ0X2RlY2wuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJZ3Jva2RlY2xhcmF0b3IuCgkoZXhwYW5kX2J1aWx0aW5fdGhyb3cpOiBBZGQgdGhyb3cgc3BlYyB0byBtYWtlX2NhbGxfZGVjbGFyYXRvci4KCUVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gc3RhcnRfZnVuY3Rpb24uCgkoc3RhcnRfYW5vbl9mdW5jKTogTGlrZXdpc2UuCgkqIGxleC5jIChtYWtlX2NhbGxfZGVjbGFyYXRvcik6IEFkZCB0aHJvdyBzcGVjIHBhcmFtZXRlci4KCShzZXRfcXVhbHNfYW5kX3NwZWMpOiBOZXcgcm91dGluZS4KCShjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBBZGQgdGhyb3cgc3BlYyB0byBtYWtlX2NhbGxfZGVjbGFyYXRvci4KCUVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8gZ3Jva2ZpZWxkLgoJKiBtZXRob2QuYyAoc3ludGhlc2l6ZV9tZXRob2QpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyCgl0byBzdGFydF9mdW5jdGlvbi4KCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlcgoJdG8gZ3Jva2RlY2xhcmF0b3IuCgkodHN1YnN0KTogQWRkIHRocm93IHNwZWMgdG8gbWFrZV9jYWxsX2RlY2xhcmF0b3IuCgkodHN1YnN0X2V4cHIpOiBFbGltaW5hdGUgdGhlIHRocm93IHNwZWMgcGFyYW1ldGVyIHRvIHN0YXJ0X2RlY2wuCgkoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIgdG8KCWdyb2tkZWNsYXJhdG9yLiAgRWxpbWluYXRlIHRoZSB0aHJvdyBzcGVjIHBhcmFtZXRlciB0bwoJc3RhcnRfZnVuY3Rpb24uCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEVsaW1pbmF0ZSB0aGUgdGhyb3cgc3BlYyBwYXJhbWV0ZXIKCXRvIHN0YXJ0X2Z1bmN0aW9uLgoJKiBwYXJzZS55IChkYXRhZGVmKTogUmVtb3ZlIG5vbi13aW5uaW5nIG9wdGltaXphdGlvbi4KCShkZWNsKTogTGlrZXdpc2UuCgkoZm5kZWYpOiBSZW1vdmUgYW1iaWd1b3VzIGVycm9yIHByb2R1Y3Rpb25zIHVuY292ZXJlZCBieSBncmFtbWFyCglmaXhpbmcuCgkoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IEFkZCBleGNlcHRpb25fc3BlY2lmaWNhdGlvbl9vcHQgaGVyZS4KCShjb21wb25lbnRfY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGRpcmVjdF9hZnRlcl90eXBlX2RlY2xhcmF0b3IpOiBMaWtld2lzZS4KCShjb21wbGV4X2RpcmVjdF9ub3R5cGVfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGRpcmVjdF9hYnN0cmFjdF9kZWNsYXJhdG9yKTogTGlrZXdpc2UuCgkoZm4uZGVmMSk6IFJlbW92ZSBleGNlcHRpb25fc3BlY2lmaWNhdGlvbl9vcHQuCgkoZm4uZGVmMik6IExpa2V3aXNlLgoJKGNvbmRpdGlvbik6IExpa2V3aXNlLgoJKGluaXRkY2wwKTogTGlrZXdpc2UuCgkoaW5pdGRjbCk6IExpa2V3aXNlLgoJKG5vdHlwZV9pbml0ZGNsMCk6IExpa2V3aXNlLgoJKG5vbW9kc19pbml0ZGNsMCk6IExpa2V3aXNlLgoJKGNvbXBvbmVudF9kZWNsXzEpOiBMaWtld2lzZS4KCShjb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKGFmdGVyX3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IwKTogTGlrZXdpc2UuCgkoYWZ0ZXJfdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoJKG5vdHlwZV9jb21wb25lbnRfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoKV2VkIEF1ZyAyOCAwMTo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IEFsc28gdXNlIGFuIElOSVRfRVhQUiB3aGVuCglpbml0aWFsaXppbmcgYW55dGhpbmcgZnJvbSBhbiBydmFsdWUuCgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJfY2FsbCk6IENhbGwgc3RhYmlsaXplX3JlZmVyZW5jZSB3aGVuIGJ1aWxkaW5nCglhbiBJTklUX0VYUFIgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBjb3B5IGN0b3IuCgoJKiBjYWxsLmMgKGpvdXN0KTogRXh0ZW5kIHRoZSBwcmV2aW91cyBjaGFuZ2UgdG8gYWxsIGNvbXBhcmlzb25zLgoKCSogZGVjbDIuYywgbWV0aG9kLmMsIGxleC5jOiBVc2UgTUFLRV9ERUNMX09ORV9PTkxZIGFuZAoJTk9fTElOS0FHRV9IRVVSSVNUSUNTLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBFbWl0IGFueSBzdGF0aWNzIHRoYXQgd2VyZW4ndCBhbHJlYWR5LgoKCSogdHlwZWNrLmMgKGJ1aWxkX3N0YXRpY19jYXN0KTogSW1wbGVtZW50LgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IEhhbmRsZSBnZXR0aW5nIGEgVEFSR0VUX0VYUFIuCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogVXNlIGNhbl9jb252ZXJ0X2FyZyBpbnN0ZWFkIG9mCglpbXBsaWNpdF9jb252ZXJzaW9uIGRpcmVjdGx5LgoJKGNvcHlfYXJnc19wKTogTmV3IGZuLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEb24ndCBjb21wbGFpbiBhYm91dCB0ZW1wIHdpdGgKCXN0YXRpY19jYXN0LgoJKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IEhhbmRsZSBUQVJHRVRfRVhQUnMuCgkqIGNhbGwuYyAoYnVpbGRfb3Zlcl9jYWxsKTogRWxpZGUgdW5uZWNlc3NhcnkgdGVtcHMuCgkoY2FuX2NvbnZlcnQqKTogVXNlIG5ldyBvdmVybG9hZGluZyBjb2RlLgoKVHVlIEF1ZyAyNyAxMzoxMjoyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmM6IE1vdmUgVFlQRV9QVFIqX01BQ1JPUyAuLi4KCSogY3AtdHJlZS5oOiBUbyBoZXJlLgoJKiB0eXBlY2suYyAoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IEltcGxlbWVudC4KCgkqIGNhbGwuYyAoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogVXNlIFRZUEVfUFRST0JfUCBpbnN0ZWFkIG9mCglwdHJfY29tcGxldGVfb2IuCgkoam91c3QpOiBJZiB3ZSdyZSBjb21wYXJpbmcgYSBmdW5jdGlvbiB0byBhIGJ1aWx0aW4gYW5kIHRoZSB3b3JzdAoJY29udmVyc2lvbiBmb3IgdGhlIGJ1aWx0aW4gaXMgd29yc2UgdGhhbiB0aGUgd29yc3QgY29udmVyc2lvbiBmb3IgdGhlCglmdW5jdGlvbiwgdGFrZSB0aGUgZnVuY3Rpb24uCgoJKiB0eXBlY2suYyAoYnVpbGRfY29uc3RfY2FzdCk6IEltcGxlbWVudC4KCShjb21wX3B0cl90dHlwZXNfY29uc3QpOiBMaWtlIGNvbXBfcHRyX3R0eXBlcywgZm9yIGNvbnN0X2Nhc3QuCgkoY29tcF9wdHJfdHR5cGVzX3JlaW50ZXJwcmV0KTogTGlrZSBjcHQsIGZvciByZWludGVycHJldF9jYXN0LgoKVHVlIEF1ZyAyNyAxMzoxNDo1OCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogRG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIGV4cHJ0eXBlCgl0b28gZWFybHkuICBNYWtlIHN1cmUgd2UgZXhwbG9kZSBpZiBleHBydHlwZSB0dXJucyBvdXQgdG8gYmUgYQoJTlVMTF9UUkVFIHdoZW4gaXQgc2hvdWxkbid0IGJlLgoKVHVlIEF1ZyAyNyAxMDo1NjoyMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmg6IE5ldyByb3V0aW5lIG1ha2VfY2FsbF9kZWNsYXJhdG9yLgoJKiBsZXguYyAobWFrZV9jYWxsX2RlY2xhcmF0b3IpOiBEZWZpbmUgaXQuCgkqIGV4Y2VwdC5jIChpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogVXNlIGl0LgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogTGlrZXdpc2UuCgkoc3RhcnRfYW5vbl9mdW5jKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCSogcGFyc2UueTogTGlrZXdpc2UuCgkqIHB0LmMgKHRzdWJzdCk6IExpa2V3aXNlLgoKTW9uIEF1ZyAyNiAxNzo0MDowMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rdHlwZWZpZWxkKTogUmVtb3ZlIHVudXNlZCBjb2RlLgoKTW9uIEF1ZyAyNiAxNzowMDozMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBneHguZ3BlcmY6IENoYW5nZSBUWVBFX1FVQUwgaW50byBDVl9RVUFMSUZJRVIuCgkqIHBhcnNlLnk6IExpa2V3aXNlLiAgQ2hhbmdlIG1heWJlX3R5cGVfcXVhbCBpbnRvIG1heWJlX2N2X3F1YWxpZmllci4KCUNoYW5nZSB0eXBlX3F1YWxzIGludG8gY3ZfcXVhbGlmaWVycy4gIENoYW5nZSBub25lbXB0eV90eXBlX3F1YWxzIGludG8KCW5vbmVtcHR5X2N2X3F1YWxpZmllcnMuCgkqIGhhc2guaDogUmVidWlsZC4KCgkqIGxleC5jIChtYWtlX3BvaW50ZXJfZGVjbGFyYXRvcik6IENoYW5nZSB0eXBlX3F1YWxzIGludG8KCWN2X3F1YWxpZmllcnMuCgkobWFrZV9yZWZlcmVuY2VfZGVjbGFyYXRvcik6IExpa2V3aXNlLgoKVGh1IEF1ZyAyMiAwMTowOToyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogT25seSBjaGVjayBpbnRlcmZhY2VfKiBmb3IgdGVtcGxhdGVzCgl3aXRoIGZsYWdfYWx0X2V4dGVybmFsX3RlbXBsYXRlcy4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQ2hlY2sgZm9yIGNvbXBhcmlzb24gb2YgZGlmZmVyZW50IGVudW0gdHlwZXMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRml4IGFyZyAjIG91dHB1dC4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogSGFuZGxlIHByZS1mb3VuZCBUWVBFX0RFQ0wuCgpXZWQgQXVnIDIxIDAwOjEzOjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbmV3X29wKTogQ2hlY2sgZm9yIGVycm9uZW91cyBhcmdzLgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgbWlzc2luZyBhcmdzIHRvIGNwX2Vycm9yLgoKCSogdHJlZS5jIChlcnJvcl90eXBlKTogRG9uJ3QgcHJpbnQgcmVmZXJlbmNlLXRvLWFycmF5LgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBEb24ndCBzYXkgY29udHJhdmFyaWFuY2UgZm9yCglyZW1vdmluZyBjb25zdC4KClR1ZSBBdWcgMjAgMTM6MjM6MDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9vdmVyX2NhbGwpOiBEaWFnbm9zZSBiYWQgY29udnMgZm9yIGB0aGlzJy4KCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBTZXQgREVDTF9BUlRJRklDSUFMCglvbiBfY3Rvcl9hcmcuCgoJKiBjYWxsLmMgKGNvbnZlcnRfbGlrZSk6IEhhbmRsZSBiYWQgY29udnMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGFuZGxlIGJhZCBjb252cyBiZXR0ZXIuCgoJKiBkZWNsMi5jOiAtZmFuc2ktb3ZlcmxvYWRpbmcgaXMgbm93IHRoZSBkZWZhdWx0LgoKCSogY2FsbC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBDaGVjayBmb3IgZXJyb25lb3VzIGFyZ3MuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFByb3BhZ2F0ZQoJVFlQRV9VU0VTX01VTFRJUExFX0lOSEVSSVRBTkNFLgoKVHVlIEF1ZyAyMCAxMzowOTo1NyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGVuZm9yY2VfYWNjZXNzKTogQWRkIHN0YXRpYyB0byByb3V0aW5lLgoKU3VuIEF1ZyAxOCAxNDozNTo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBGaXggYmFkIGhhbmRsaW5nLgoJKGNvbXBhcmVfaWNzKTogTGlrZXdpc2UuCgpTYXQgQXVnIDE3IDIxOjU0OjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IE9vcHMuCgpTYXQgQXVnIDE3IDE2OjI4OjExIDE5OTYgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBnKysuYzogVXBkYXRlIHRlc3QgZm9yIHdpbjMyICgmJiAhIGN5Z3dpbjMyKS4KClNhdCBBdWcgMTcgMDM6NDU6MzEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbXBfcHRyX3R0eXBlc19yZWFsKTogSGFuZGxlIE9GRlNFVF9UWVBFcyBwcm9wZXJseS4KCShwdHJfcmVhc29uYWJseV9zaW1pbGFyKTogTmV3IGZuLgoJKiBjYWxsLmMgKEJBRF9SQU5LKTogTmV3IHJhbmsuCgkoSUNTX0JBRF9GTEFHKTogTmV3IG1hY3JvLgoJKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBIYW5kbGUgYWxtb3N0LXJpZ2h0IHBvaW50ZXIgY29udmVyc2lvbnMuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBIYW5kbGUgYmFkIHJ2YWx1ZSBiaW5kaW5ncy4KCShhZGRfKl9jYW5kaWRhdGUpOiBTdHVmZi4KCShidWlsZF9vdmVyX2NhbGwpOiBQYXNzIGJhZCBjb252ZXJzaW9ucyB0byBjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbi4KCShjb21wYXJlX2ljcyk6IEhhbmRsZSBiYWQgY29udnMuCgkoam91c3QpOiBMaWtld2lzZS4KCkZyaSBBdWcgMTYgMTU6MDI6MTkgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGV4cGFuZF92ZWNfaW5pdCk6IFVzZSBwdHJkaWZmX3R5cGVfbm9kZSBpbnN0ZWFkIG9mCglpbnRlZ2VyX3R5cGVfbm9kZSB3aGVuIGNvbXB1dGluZyBwb2ludGVyIG9mZnNldHMuCgpGcmkgQXVnIDE2IDAxOjI4OjMyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobHZhbHVlX3R5cGUpOiBOZXcgZm4uCgkoZXJyb3JfdHlwZSk6IE5ldyBmbi4KCSogY2FsbC5jIChvcF9lcnJvcik6IFVzZSBlcnJvcl90eXBlLgoJKGFkZF9jb252X2NhbmRpZGF0ZSk6IFVzZSBsdmFsdWVfdHlwZS4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGFyZ3NfYXNfc3RyaW5nKTogVXNlIGVycm9yX3R5cGUuCgpUaHUgQXVnIDE1IDE3OjI3OjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBFdmFsdWF0ZSBERUNMX0lOSVRJQUwgb2YgYSBWQVJfREVDTCBoZXJlLgoJKHRzdWJzdCk6IE5vdCBoZXJlLgoKCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFdpdGggLWFuc2ksIF9fbnVsbCdzIHR5cGUgaXMgdGhlCglzaWduZWQgaW50ZWdyYWwgdHlwZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBiaXRzIGFzIGEgcG9pbnRlci4KCUludHJvZHVjZSBhIG5ldyB2YXJpYWJsZSBudWxsX25vZGUgZm9yIGl0LgoJKiBjcC10cmVlLmg6IEFkanVzdC4KCSogY2FsbC5jIChudWxsX3B0cl9jc3RfcCk6IEFkanVzdC4KClRodSBBdWcgMTUgMTc6MDk6NTQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGRvX3Vud2luZCk6IE1hcmsgJWk3IGFzIHVzZWQgb24gdGhlIFNQQVJDIHNvIHdlIGNhbgoJb3B0aW1pemUuCgpUaHUgQXVnIDE1IDAxOjM2OjQ5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IElnbm9yZSAjcHJhZ21hIGludGVyZmFjZSBmb3IgdGluZm8KCWZucyBvZiBjbGFzc2VzIHdpdGhvdXQgdmlydHVhbCBmdW5jdGlvbnMuCgoJKiBjYWxsLmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBIYW5kbGUgYHRoaXMnIHNwZWNpYWxseS4KCShjb21wYXJlX2ljcyk6IExpa2V3aXNlLgoKVHVlIEF1ZyAxMyAxMjoxNjoxMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IEZpeCBoYW5kbGluZyBvZiBfX251bGwuCgoJKiBkZWNsMi5jIChjb21kYXRfbGlua2FnZSk6IE5ldyBmbi4KCShpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBpdC4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBVc2UgaXQuCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVXNlIGl0LgoKTW9uIEF1ZyAxMiAwMDowOToxOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChlbmRfdGVtcGxhdGVfZGVjbCk6IElmIHdlIGRvbid0IGFjdHVhbGx5IGhhdmUgcGFybXMsIHJldHVybi4KCSogcGFyc2UueSAodGVtcGxhdGVfaGVhZGVyKTogQWNjZXB0ICd0ZW1wbGF0ZSA8PicuCgoJKiBlcnJmbi5jOiBBbGxvdyA1IGFyZ3MuCgpTdW4gQXVnIDExIDE1OjIwOjU4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobWFrZV90ZW1wX3ZlYyk6IE5ldyBmbi4KCSogcHQuYyAocHVzaF90ZW1wbGF0ZV9kZWNsKTogSGFuZGxlIHBhcnRpYWwgc3BlY3MuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBMaWtld2lzZS4KCShtb3JlX3NwZWNpYWxpemVkKTogVXNlIGdldF9iaW5kaW5ncy4KCShtb3JlX3NwZWNpYWxpemVkX2NsYXNzKTogTmV3IGZuLgoJKGdldF9jbGFzc19iaW5kaW5ncyk6IE5ldyBmbi4KCShtb3N0X3NwZWNpYWxpemVkX2NsYXNzKTogTmV3IGZuLgoJKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBMaXN0IGNhbmRpZGF0ZXMgZm9yIGFtYmlndW91cyBjYXNlLgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IExvc2UgcmVmZXJlbmNlIHRvIERFQ0xfVEVNUExBVEVfTUVNQkVSUy4KCShzaGFkb3dfdGFnKTogQ2FsbCBwdXNoX3RlbXBsYXRlX2RlY2wgZm9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb25zLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OUyk6IFJlcGxhY2VzCglERUNMX1RFTVBMQVRFX01FTUJFUlMuCgkqIGNhbGwuYyAocHJpbnRfel9jYW5kaWRhdGVzKTogUmVkdWNlIGR1cGxpY2F0aW9uLgoKRnJpIEF1ZyAgOSAxNDozNjowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBBbGxvdyAtZmFuc2ktb3ZlcmxvYWRpbmcuCgpUaHUgQXVnICA4IDE3OjA0OjE4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGdldF9iaW5kaW5ncyk6IE5ldyBmbi4KCShtb3N0X3NwZWNpYWxpemVkKTogTGlrZXdpc2UuCgkoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IFVzZSB0aGVtLgoJKGFkZF9tYXliZV90ZW1wbGF0ZSk6IE5ldyBmbi4KCSogY3AtdHJlZS5oIChERUNMX01BWUJFX1RFTVBMQVRFKTogTmV3IG1hY3JvLgoJKiBjYWxsLmMgKGJ1aWxkX25ld19vcCk6IEhhbmRsZSBndWlkaW5nIGRlY2xzLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChtYXJrX3VzZWQpOiBEbyBzeW50aGVzaXMgaGVyZS4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IE5vdCBoZXJlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IE9yIGhlcmUuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBPciBoZXJlLgoJKiB0cmVlLmMgKGJvdF9tYW5pcCk6IENhbGwgbWFya191c2VkIG9uIGZ1bmN0aW9ucyB1c2VkIGluIGRlZmF1bHQKCWFyZ3MuCgpUaHUgQXVnICA4IDE3OjQ4OjE2IDE5OTYgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckB0aWt0b2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogRGVsZXRlIGNvZGUgdGhhdCBkaXNhYmxlZCB2dGFibGUKCWhldXJpc3RpYyBvbiBzeXN0ZW1zIHdpdGggQVNNX09VVFBVVF9FWFRFUk5BTC4KCldlZCBBdWcgIDcgMTI6NDQ6MTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEhhbmRsZSBzdGF0aWMgY2FsbCBjb250ZXh0CgliZXR0ZXIuCgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IFNldCB0aGUgREVDTF9DT05URVhUIG9mIHRoZSByZXN1bHQgdG8KCXRoZSBmdW5jdGlvbiwgbm90IGl0cyBvdXRlciBibG9jay4KCgkqIGNhbGwuYyAoYnVpbGRfZmllbGRfY2FsbCk6IFBhc3MgZmllbGRzIG9uIHRvIGJ1aWxkX29wZm5jYWxsCglyZWdhcmRsZXNzIG9mIFRZUEVfT1ZFUkxPQURTX0NBTExfRVhQUi4KCShidWlsZF9tZXRob2RfY2FsbCk6IFBhc3Mgb24gdG8gYnVpbGRfbmV3X21ldGhvZF9jYWxsIHNvb25lci4KCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jKTogSnVzdCByZXR1cm4gd2hhdCBpbnN0YW50aWF0ZV90eXBlCglnaXZlcyB1cy4KCSogY2xhc3MuYyAoaW5zdGFudGlhdGVfdHlwZSk6IERvbid0IHB1dCBhIFBPSU5URVJfVFlQRSB0bwoJTUVUSE9EX1RZUEUgb24gYW4gZXhwcmVzc2lvbi4gIEFsc28gbWFrZSBhIGNvcHkgb2YgcmhzIGluc3RlYWQgb2YKCW1vZGlmeWluZyBpdC4KClR1ZSBBdWcgIDYgMTI6NTg6NDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjb21wYXJlX2ljcyk6IEhhbmRsZSBxdWFsX2NvbnYgYWZ0ZXIgbHZhbHVlX2NvbnYuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogRG9uJ3QgdGFrZSBlbnVtcyBmb3IgKysuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogSGFuZGxlIG5vbi1hZ2dyZWdhdGVzIGFuZCBmaWVsZCBjYWxscy4KCU1vdmUgbmV3IG92ZXJsb2FkaW5nIGNvZGUgZnJvbS4uLgoJKiBjdnQuYzogSGVyZS4KCgkqIGRlY2wuYyAoZ3Jva3Bhcm1zKTogRG9uJ3QgY2hlY2sgZGVmYXVsdCBhcmdzIGluIHRlbXBsYXRlcy4KCk1vbiBBdWcgIDUgMTc6MTc6MDYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX25ld19vcCk6IEZpeCBhcmdzIHRvIGJ1aWxkX3VuYXJ5X29wLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBEb24ndCBjYWxsIHR5cGVfcHJvbW90ZXNfdG8gb24gZmxvYXQuCgoJKiBkZWNsLmMgKGdyb2twYXJtcyk6IENoZWNrIHRoZSB0eXBlIG9mIHRoZSBkZWZhdWx0IGFyZy4KCgkqIGN2dC5jIChidWlsZF9uZXdfb3ApOiBQYXNzIG5vbi1vdmVybG9hZGVkIGNhc2VzIG9uIHJhdGhlciB0aGFuCglyZXR1cm5pbmcgTlVMTF9UUkVFLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfYmluYXJ5X29wKTogQXZvaWQgZG9pbmcgZXh0cmEgd29yay4KCShidWlsZF94X3VuYXJ5X29wKTogTGlrZXdpc2UuCgkoYnVpbGRfeF9jb25kaXRpb25hbF9leHByKTogTGlrZXdpc2UuCgkqIGN2dC5jIChidWlsZF9vdmVyX2NhbGwpOiBSZXR1cm4uCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogRml4IE1FTUJFUl9SRUYuCgkoYnVpbGRfbmV3X29wKTogTGlrZXdpc2UuCgpNb24gQXVnICA1IDE3OjA3OjQ3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF9uYW1lKTogUHV0IGJ1ZyBmaXggaW50byBjb2RlIGJ1dCBsZWF2ZQoJZGlzYWJsZWQgZm9yIG5vdyBzbyB3ZSBjYW4gYmUgYnVnIGNvbXBhdGlibGUgd2l0aCBvbGRlciByZWxlYXNlcwoJdGhhdCBkbyByZXBlYXRzIGluY29ycmVjdGx5LiAgSW4gdGhlIGZ1dHVyZSwgd2UgY2FuIGVuYWJsZSBpdC4KCk1vbiBBdWcgIDUgMTM6NDY6MjggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNvbnZlcnRfbGlrZSk6IERvbid0IGNhbGwgYnVpbGRfY3BsdXNfbmV3IHR3aWNlLgoKCSogY2FsbC5jLCBjcC10cmVlLmgsIGN2dC5jLCBkZWNsMi5jLCBpbml0LmMsIG1ldGhvZC5jLCBwdC5jLCB0eXBlY2suYzoKCUNvbnRyb2wgbmV3IG92ZXJsb2FkaW5nIGNvZGUgd2l0aCAtZmFuc2ktb3ZlcmxvYWRpbmcuCgpTdW4gQXVnICA0IDE1OjI5OjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9vdmVyX2NhbGwpOiBDYWxsIGJ1aWxkX2NwbHVzX25ldy4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IElmIGJvdGggb3BlcmFuZHMgYXJlIFRBUkdFVF9FWFBScywgd3JhcAoJdGhlIENPTkRfRVhQUiBpbiBhIFRBUkdFVF9FWFBSIHNvIHRoZXkgdXNlIHRoZSBzYW1lIHNsb3QuCgoJKiBjdnQuYyAoYnVpbGRfdXBfcmVmZXJlbmNlKTogUHJvcGFnYXRlIElORElSRUNUX0JJTkQgdG8KCXJlY3Vyc2l2ZSBjYWxscy4KCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBQcm9wYWdhdGUKCVRZUEVfTkVFRFNfe0NPTlNUUlVDVElORyxERVNUUlVDVE9SfS4KClNhdCBBdWcgIDMgMTQ6MDU6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGpvdXN0KTogTW9yZSA/OiBrbHVkZ2luZy4gIFNpZ2guCgkoYnVpbGRfb3Zlcl9jYWxsKTogRG9uJ3QgdHJ5IHRvIHN5bnRoZXNpemUgZ2xvYmFsIGZucy4KCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBVc2UgYmluZm8gbWFya2luZy4KClNhdCBBdWcgIDMgMTI6MzM6NDIgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBzZWFyY2guYyAoYnVpbGRfbWlfbWF0cml4KTogVXNlIHRoZSBjb3JyZWN0IHZhbHVlIG9mIGNpZAoJd2hlbiBkZXRlcm1pbmluZyB0aGUgbmV3IG1pX3NpemUuCgpTYXQgQXVnICAzIDAxOjI3OjQxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogRG8gY29uc2lkZXIgdHlwZSBjb252ZXJzaW9uIG9wcwoJZm9yIHRoZSBmaXJzdCBwYXJtcyBvZiArPSBldCBhbC4KCShzdHJpcF90b3BfcXVhbHMpOiBOZXcgZm4uCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBVc2UgaXQgaW5zdGVhZCBvZiBUWVBFX01BSU5fVkFSSUFOVC4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlcyk6IEJlIGNhcmVmdWwgYWJvdXQgYXJyYXlzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IEhhbmRsZSB2dGFibGUgb3B0aW1pemF0aW9uLgoKRnJpIEF1ZyAgMiAwMToyNjo1OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKExPT0tVUF9OT19URU1QX0JJTkQpOiBOZXcgZmxhZy4KCSogY3Z0LmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogVXNlIGl0LgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBVc2UgaXQuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlLCBDT05EX0VYUFIpOiBVc2UgaXQuCgoJKiBjdnQuYyAoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwpOiBDaGVjayBmb3IgZXJyb3IgYXJncy4KCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBKdXN0IGNoZWNrIERFUklWRURfRlJPTV9QLCBub3QgVU5JUVVFTFkuCgoJKiBneHguZ3BlcmY6IEFkZCBfX251bGwuCgkqIGhhc2guaDogUmVnZW5lcmF0ZS4KCSogbGV4Lmg6IEFkZCBSSURfTlVMTC4KCSogbGV4LmMgKGluaXRfbGV4KTogQ3JlYXRlIG51bGxfcG9pbnRlcl9ub2RlIGhlcmUsIHN0aWNrIGl0IGluCglSSURfTlVMTC4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFN0aWxsIHNldCBpdHMgdHlwZSBoZXJlLgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogRG9uJ3QgcHJvZHVjZSBudWxsX3BvaW50ZXJfbm9kZS4KCShjb252ZXJ0X3RvX3BvaW50ZXJfZm9yY2UpOiBMaWtld2lzZS4KCShudWxsX3B0cl9jc3RfcCk6IENoZWNrIGZvciBudWxsX3BvaW50ZXJfbm9kZTsgb25seSBhY2NlcHQgKHZvaWQqKTAKCWlmICghIHBlZGFudGljKS4KCSogY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFVzZSBudWxsX3B0cl9jc3RfcC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBMaWtld2lzZS4gIERvbid0IHByb2R1Y2UKCW51bGxfcG9pbnRlcl9ub2RlLgoKCSogZXJyb3IuYyAoYXJnc19hc19zdHJpbmcpOiBIYW5kbGUgbGlzdHMgb2YgYWN0dWFsIGFyZ3MsIHRvby4KCSogY3Z0LmMgKG51bGxfcHRyX2NzdCk6IFN1cHBvcnQgKHZvaWQqKTAgZm9yIG5vdy4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSW1wcm92ZSBkaWFnbm9zdGljcy4KCShidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX29iamVjdF9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3X21ldGhvZF9jYWxsKTogTGlrZXdpc2UuICBNb3ZlIGNhbGwgYmVmb3JlIGRlZiBkaWFnbm9zdGljLi4uCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGVyZS4KCgkqIGN2dC5jIChidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBEb24ndCBjb21wbGFpbiBhYm91dCBubyBtYXRjaCBpZgoJTE9PS1VQX1NQRUNVTEFUSVZFTFkuCgkoYnVpbGRfb3Zlcl9jYWxsKTogRml4ICd0aGlzJyBmb3IgdmlydHVhbCBmbi4KCShidWlsZF9uZXdfbWV0aG9kX2NhbGwpOiBBZGQgZGlhZ25vc3RpYy4KClRodSBBdWcgIDEgMTY6NDU6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUpOiBFeHBlY3QgJ3RoaXMnIGFuZCAnaW5fY2hyZycgZm9yCgljb25zdHJ1Y3RvcnMgdG8gYmUgcGFzc2VkIGluLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBQYXNzIHRoZW0gaW4uCgkoY29udmVydF9saWtlKTogTGlrZXdpc2UuCgkoYnVpbGRfb2JqZWN0X2NhbGwpOiBIYW5kbGUgb3ZlcmxvYWRlZCBjb252ZXJzaW9ucy4KCShidWlsZF9vdmVyX2NhbGwpOiBQYXNzIHRoZSByaWdodCBhcmdzIHRvIGJ1aWxkX3Zmbl9yZWYuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCBwbWYgY29udnMuCgkoam91c3QpOiBIYW5kbGUgY29tcGFyaW5nIHN0YXRpY3MgYW5kIG5vbi1zdGF0aWNzLgoJKGJ1aWxkX25ld19tZXRob2RfY2FsbCk6IE5ldyBmbi4KCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IENhbGwgaXQgaWYgTkVXX09WRVIuCgpUaHUgQXVnICAxIDE2OjA2OjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogRG9uJ3QgdXNlICVPIG9uIElERU5USUZJRVJfT1BOQU1FX1BzLCB1c2UKCSVEIGluc3RlYWQuCgpUaHUgQXVnICAxIDE1OjI0OjAyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfdGhyb3cpOiBVc2UgbWF5YmVfYnVpbGRfY2xlYW51cF9hbmRfZGVsZXRlCglpbnN0ZWFkIG9mIGp1c3QgbWF5YmVfYnVpbGRfY2xlYW51cCBzbyB0aGF0IHdlIGRlYWxsb2NhdGUgdGhlCgl0aHJvd24gb2JqZWN0LgoKVGh1IEF1ZyAgMSAxNToxODowMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBNYWtlIG5vbi1zdGF0aWMgZm9yIHB0LmMncyB1c2UuCgkqIGNwLXRyZWUuaCAoZmluaXNoX3ByZXZ0YWJsZV92YXJkZWNsKTogQWRkIGRlY2wuCgpUaHUgQXVnICAxIDExOjUzOjUxIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIGNvbXBsZXRlX3R5cGUuICBBbHNvLCBpZgoJd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgd2UganVzdCBpbnN0YW50aWF0ZWQgYSB0ZW1wbGF0ZQoJY2xhc3Mgd2l0aCBhIHZ0YWJsZSwgY2FsbCBmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBEb24ndCBleHBsb2RlIChvciBleHBsb2RlIG1vcmUgZ3JhY2VmdWxseQoJYXMgYXBwcm9wcmlhdGUpIGlmIHRoZSBvYmplY3QgYmVpbmcgZHVtcGVkIGhhcyBhIG51bGwgdHlwZS4KCShkdW1wX2V4cHIpOiBMaWtld2lzZS4KCgkqIHNlYXJjaC5jIChidWlsZF9taV9tYXRyaXgpOiBFbnN1cmUgdGhhdCBtaV9zaXplIGlzIGxhcmdlIGVub3VnaCwKCWJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygbm9kZXMgdGhhdCB3ZSdsbCBuZWVkIGJlZm9yZSBhbGxvY2F0aW5nCgl0aGUgYXJyYXkuCgkobG9va3VwX2ZuZmllbGRzKTogRml4IGNvbW1lbnQuCgkoYnJlYWR0aF9maXJzdF9zZWFyY2gpOiBGaXggY29tbWVudC4KCldlZCBKdWwgMzEgMDk6NTc6MDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBQcm9wYWdhdGUgVFlQRV9QQUNLRUQgYW5kCglUWVBFX0FMSUdOLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0KTogQ2FsbCBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgaGVyZS4KCShmaW5pc2hfc3RydWN0XzEpOiBOb3QgaGVyZS4KCSogY3AtdHJlZS5oOiBBZGp1c3QuCgoJKiBwdC5jICh0eXBlX3VuaWZpY2F0aW9uKTogTmV3IHBhcmFtZXRlciBTVFJJQ1QuCgkodW5pZnkpOiBJZiBTVFJJQ1QsIGRvbid0IGFsbG93IGN2IGFkZGl0aW9uIG9yIGJhc2UgZGVkdWN0aW9uLgoJKiBjYWxsLmMsIGNsYXNzLmMsIGN2dC5jLCBjcC10cmVlLmg6IEFkanVzdC4KClR1ZSBKdWwgMzAgMTM6MDY6MTMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGdldF90ZW1wbGF0ZV9iYXNle19yZWN1cnNpdmV9KTogTmV3IGZucy4KCSogcHQuYyAobW9yZV9zcGVjaWFsaXplZCk6IE5ldyBmbi4KCShkb19mdW5jdGlvbl9pbnN0YW50aWF0aW9uKTogVXNlIGl0LgoJKHVuaWZ5KTogSGFuZGxlIGJhc2UgZGVkdWN0aW9uLgoJKiBjdnQuYyAoam91c3QpOiBVc2UgbW9yZV9zcGVjaWFsaXplZC4KCURvbid0IGFyYml0cmFyaWx5IGNob29zZSBiZXR3ZWVuIG5vbi1idWlsdGluIGNhbmRpZGF0ZXMuCgkoYnVpbGRfb3Zlcl9jYWxsKTogQ2FsbCByZXF1aXJlX2NvbXBsZXRlX3R5cGUuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogU3RhdGljcyBhcmUgc3RhdGljIGV2ZW4gaW4gYSAjcHJhZ21hCglpbnRlcmZhY2UgZmlsZS4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfdnRhYmxlKTogRGlzYWJsZSB2dGFibGUgaGV1cmlzdGljIG9uCglzeXN0ZW1zIHdpdGggQVNNX09VVFBVVF9FWFRFUk5BTC4KCgkqIGN2dC5jIChjb21wYXJlX2ljcyk6IEZpeCBjb21wYXJpc29uIG9mIFBNRU1fQ09OViBhbmQgQkFTRV9DT05WLgoJKHN0YW5kYXJkX2NvbnZlcnNpb24pOiBObyBzdGQgY29udiB0byBlbnVtIHR5cGUuCgoJKiBjdnQuYyAoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCBvcmRlciBvZiBhcmdzIHRvIERFUklWRURfRlJPTV9QCglmb3IgcHRtJ3MuCgoJKiBjdnQuYyAocmVmZXJlbmNlX2JpbmRpbmcpOiBCaW5kIGRpcmVjdGx5IHRvIGEgYmFzZSBzdWJvYmplY3Qgb2YKCWEgY2xhc3MgcnZhbHVlLgoKCSogY3Z0LmMgKGJ1aWxkX25ld19vcCk6IEVuZm9yY2UgYWNjZXNzIGNvbnRyb2wuCgpUdWUgSnVsIDMwIDA5OjIyOjUzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrMi5jIChwcm9jZXNzX2luaXRfY29uc3RydWN0b3IpOiBXaGVuIHNjYW5uaW5nIHRoZQoJdW5pb24gZm9yIGEgbmFtZWQgZmllbGQsIHNraXAgdGhpbmdzIHRoYXQgYXJlbid0IEZJRUxEX0RFQ0xzLgoKCSogbWV0aG9kLmMgKHN5bnRoZXNpemVfbWV0aG9kKTogRG9uJ3Qgc2NhbiBmbmRlY2wncyBydGwgaWYKCXdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGU7IGp1c3QgYXNzdW1lIHRoZSBmdW5jdGlvbiBjYW4ndAoJYmUgaW5saW5lZC4KCk1vbiBKdWwgMjkgMTU6NDg6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogU3RpY2sgYSBkdW1teSBjb252ZXJzaW9uIGluIGlmCglpdCBmYWlsZWQuCgoJKiBjdnQuYyAoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IEhhbmRsZSBvdmVybG9hZGVkCgljb252ZXJzaW9uIG9wcy4KCgkqIGN2dC5jIChhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogRG9uJ3QgY29uc2lkZXIgdHlwZSBjb252ZXJzaW9uCglvcGVyYXRvcnMgZm9yIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2Ygb3BlcmF0b3I9LgoKTW9uIEp1bCAyOSAxNTozMzo1NSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlKTogT25seSBjYWxsIGxheW91dF90eXBlIGlmIHdlJ3JlIG5vdAoJZXhwYW5kaW5nIGEgdGVtcGxhdGUuCgpNb24gSnVsIDI5IDE0OjQwOjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjb21wYXJlX2ljcyk6IE9vcHMuCgoJKiBjdnQuYyAob3BfZXJyb3IpOiBPb3BzLgoKCSogY3AtdHJlZS5kZWY6IEFkZCBSVkFMVUVfQ09OViwgcmVuYW1lIEVYQUNUX0NPTlYgdG8gSURFTlRJVFlfQ09OVi4KCSogY3Z0LmM6IEFkZCBJREVOVElUWV9SQU5LIGJlZm9yZSBvdGhlcnMuICBVc2UgcmVhbF9sdmFsdWVfcC4KCShidWlsZF9jb252KTogVXNlIHRoZW0uCgkoaW1wbGljaXRfY29udmVyc2lvbik6IFVzZSB0aGVtLgoJKGNvbnZlcnRfbGlrZSk6IEhhbmRsZSB0aGVtLgoJKGJ1aWxkX25ld19vcCk6IEhhbmRsZSBidWlsdGluIENPTkRfRVhQUiBhZ2Fpbi4KCShhZGRfYnVpbHRpbl9jYW5kaWRhdGVzKTogU3RyaXAgY3YtcXVhbHMuICBGaXggb29wcy4gIEluY2x1ZGUgZW51bXMKCWluIGxpc3RzIG9mIHR5cGVzIGZvciBDT05EX0VYUFIuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRlKTogQWRkIGVudW0gY2FuZGlkYXRlcyBmb3IgQ09ORF9FWFBSLgoKTW9uIEp1bCAyOSAxMjowNTo0MCAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9tb2RpZnlfZXhwcik6IEFsd2F5cyBhdHRlbXB0IHRvIGJ1aWxkIGEgY2FsbCB0bwoJdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIGV2ZW4gaWYgd2UncmUgdXNpbmcgYSBkZWZhdWx0IG9uZS4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IENhbGwgY29tcGxldGVfdHlwZS4KCk1vbiBKdWwgMjkgMTE6MjU6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKHJlZmVyZW5jZV9iaW5kaW5nKTogQSBSRUZfQklORCBnZXRzIHRoZSByZWZlcmVuY2UgdHlwZS4KCShpbXBsaWNpdF9jb252ZXJzaW9uKTogTGlrZXdpc2UuCgkoY29udmVydF9saWtlKTogTGlrZXdpc2UuCgkoY29tcGFyZV9pY3MpOiBMaWtld2lzZS4KCShjb21wYXJlX3F1YWwpOiBMaWtld2lzZS4KCShwcmludF96X2NhbmRpZGF0ZXMpOiBIYW5kbGUgbm8gY2FuZGlkYXRlcy4KCShidWlsZF9uZXdfb3ApOiBEb24ndCBoYW5kbGUgYnVpbHRpbiBDT05EX0VYUFIgZm9yIG5vdy4KClNhdCBKdWwgMjcgMTE6Mjc6NDcgMTk5NiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogSW5pdCBsb2NhbCB2YXIgaW4gYW4gQU5TSSB3YXkuCgpGcmkgSnVsIDI2IDAxOjA3OjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChqb3VzdCk6IElmIHRoZSBjYW5kaWRhdGVzIGFyZSB0aGUgc2FtZSwgYXJiaXRyYXJpbHkgcGljayBvbmUuCgoJKiBjdnQuYyAoYnVpbGRfYnVpbHRpbl9jYW5kaWRhdGUpOiBPb3BzLgoJKGJ1aWxkX25ld19vcCk6IE9vcHMuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBQYXNzIENPTkRfRVhQUiBvbi4KCSogY3Z0LmMgKGJ1aWxkX2J1aWx0aW5fY2FuZGlkYXRlKTogUmVvcmdhbml6ZSwgc3VwcG9ydCBDT05EX0VYUFIuCgkoYWRkX2J1aWx0aW5fY2FuZGlkYXRleyxzfSk6IExpa2V3aXNlLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZXMpOiBMaWtld2lzZS4KCShwcmludF96X2NhbmRpZGF0ZXMsIG9wX2Vycm9yLCBidWlsZF9uZXdfb3ApOiBMaWtld2lzZS4KCSh0eXBlX2RlY2F5c190byk6IE5ldyBmbi4KCSogbGV4LmMgKGluaXRfbGV4KTogSnVzdCBzYXkgPzogZm9yIENPTkRfRVhQUi4KClRodSBKdWwgMjUgMDk6MzM6MzMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbXBsZXRlX3R5cGUpOiBDYWxsIGxheW91dF90eXBlIHJhdGhlciB0aGFuIGJ1aWxkaW5nCglhIG5ldyBhcnJheSB0eXBlLgoKCSogY3Z0LmMgKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IFBvaW50ZXIgYXJpdGhtZXRpYyBjYW5kaWRhdGVzCglvbmx5IHVzZSBwdHJkaWZmX3QuCgpXZWQgSnVsIDI0IDEyOjQ1OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jOiBBbHdheXMgY29tcGlsZSB0aGUgbmV3IG92ZXJsb2FkaW5nIGNvZGUgKGJ1dCBkb24ndCB1c2UgaXQpLgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBBZGQgYSBCQVNFX0NPTlYgd2hlbiBjb252ZXJ0aW5nIHRvCgl0aGUgc2FtZSBjbGFzcyB0eXBlLgoJKGNvbnZlcnRfbGlrZSk6IEhhbmRsZSBCQVNFX0NPTlYuCgpUdWUgSnVsIDIzIDEyOjQ2OjMwIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9uZXdfb3ApOiBTdXBwb3J0IHtNQVgsTUlOfV9FWFBSLgoJKGFkZF9idWlsdGluX2NhbmRpZGF0ZSk6IExpa2V3aXNlLgoKCU5FV19PVkVSIGNoYW5nZXM6CgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBUcnkgYW4gb3BlcmF0b3IgZnVuY3Rpb24KCXdoZW5ldmVyIHdlIGNhbGwgYW4gb2JqZWN0IG9mIGNsYXNzIHR5cGUuCgkqIG1ldGhvZC5jIChidWlsZF9vcGZuY2FsbCk6IFBhc3MgQ0FMTF9FWFBScyB0aHJvdWdoLgoJKiBjdnQuYyAoaW1wbGljaXRfY29udmVyc2lvbik6IERvIGNvbnN0LXJlZiBjYXNlIGZpcnN0LgoJKGFkZF9jb252X2NhbmRpZGF0ZSwgYnVpbGRfb2JqZWN0X2NhbGwsIG9wX2Vycm9yKTogTmV3IGZucy4KCShwdHJfY29tcGxldGVfb2IsIFRZUEVfUFRST0JfUCk6IHZvaWQgaXMgbm90IGFuIG9iamVjdCB0eXBlLgoJKHthZGQsYnVpbGR9X2J1aWx0aW5fY2FuZGlkYXRleyxzfSwgcHJpbnRfel9jYW5kaWRhdGVzKTogRGlzcGxheQoJYnVpbHRpbiBjYW5kaWRhdGVzLgoJKGJ1aWxkX25ld19vcCk6IEhhbmRsZSBDQUxMX0VYUFIuICBEb24ndCB0cnkgdG8gZGVjYXkgdm9pZC4KCUZhbGwgYmFjayBvbiBwcmVpbmNyZW1lbnQgaGFuZGxpbmcuICBVc2Ugb3BfZXJyb3IuCglIYW5kbGUgd2Fybl9zeW50aC4KCShjb252ZXJ0X2xpa2UpOiBQYXNzIElORElSRUNUX0JJTkQuICBEb24ndCB0cnkgdG8gZG8gYW55dGhpbmcgd2l0aAoJYW4gZXJyb3JfbWFya19ub2RlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEhhbmRsZSBQUk9NT1RFX1BST1RPVFlQRVMgYW5kIGVsbGlwc2lzIHByb21vdGlvbnMKCXByb3Blcmx5LgoKTW9uIEp1bCAyMiAxNjoyMTo1NSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogSGFuZGxlIENPTlRJTlVFX1NUTVQuCgpNb24gSnVsIDIyIDE1OjM4OjU4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmXzEpOiBVc2UgYnVpbGRfY29tcG9uZW50X3JlZgoJaW5zdGVhZCBvZiBvcGVuIGNvZGluZyBpdCBoZXJlLgoKTW9uIEp1bCAyMiAxMjoxODo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IERvbid0IGxpbmsgd2l0aCAtbGcrKy4KCglORVdfT1ZFUiBjaGFuZ2VzOgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEb24ndCB1c2UgY29udmVydF9mcm9tX3JlZmVyZW5jZSBvbgoJcmVzdWx0IG9mIGJ1aWxkX3R5cGVfY29udmVyc2lvbi4KCShjcF9jb252ZXJ0KTogT25seSBjYWxsIGJ1aWxkX21ldGhvZF9jYWxsIGZvciBjdG9ycyBpZgoJYnVpbGRfdHlwZV9jb252ZXJzaW9uIGZhaWxlZC4KCShwdHJfY29tcGxldGVfb2IpOiBOZXcgZnVuY3Rpb24uCgkoVFlQRV9QVFJ7LE9CLE1FTX1fUCk6IE5ldyBtYWNyb3MuCgkoe2FkZCxidWlsZH1fYnVpbHRpbl9jYW5kaWRhdGV7LHN9KTogTmV3IGZ1bmN0aW9ucy4KCShwcmludF96X2NhbmRpZGF0ZXMpOiBIYW5kbGUgYnVpbHRpbnMuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IERvbid0IHVzZSBjb252ZXJzaW9uIGZucyBmb3IKCWNvbnZlcnRpbmcgdG8gYSBiYXNlIHR5cGUuCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb25fMSk6IFNldCBJQ1NfVVNFUl9GTEFHIG9uIEFNQklHX0NPTlZzLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uKTogVXNlIGNvbnZlcnRfZnJvbV9yZWZlcmVuY2UuCgkoYnVpbGRfbmV3X29wKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX292ZXJfY2FsbCk6IEZpeCBoYW5kbGluZyBvZiBtZXRob2RzLgoJKGNvbXBhcmVfaWNzKTogSGFuZGxlIEFNQklHX0NPTlYgcHJvcGVybHkuCgkqIHR5cGVjazIuYzogSW5jcmVtZW50IGFib3J0IGNvdW50LgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBGb3J3YXJkIG1vc3QgcmVxdWVzdHMgdG8gYnVpbGRfbmV3X29wLgoJKiBjcC10cmVlLmggKElTX09WRVJMT0FEX1RZUEUpOiBUd2Vhay4KCkZyaSBKdWwgMTkgMTc6NTk6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZHVtcF9leHByLCBjYXNlIENPTlNUUlVDVE9SLCBjYXNlIENBU1RfRVhQUik6IFRha2Ugb3V0CglpbnZhbGlkIHNlY29uZCBhcmd1bWVudCB0byBkdW1wX2V4cHJfbGlzdC4KCkZyaSBKdWwgMTkgMTQ6MDQ6MDUgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogTWFrZSBzdXJlIHdlIGRvIG9iai0+WDo6aSBjb3JyZWN0bHkuCgpUaHUgSnVsIDE4IDE0OjQ4OjIzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBBU01fT1VUUFVUX0VYVEVSTkFMLCBub3QKCUFTU0VNQkxFX0VYVEVSTkFMLgoKTW9uIEp1bCAxNSAxNzo0ODo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKHByb2Nlc3NfaW5pdF9jb25zdHJ1Y3Rvcik6IE5ldyBwZWR3YXJuIGZvciB1c2luZyB7IH0KCXRvIGluaXRpYWxpemUgYSBwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbi4KCSogdHlwZWNrLmMgKGJ1aWxkX3B0cm1lbWZ1bmMxKTogQXZvaWQgdXNlIG9mIGRpZ2VzdF9pbml0IHNvIHRoYXQKCXdlIGNhbiBhdm9pZCB0aGUgbmV3IGVycm9yLgoKTW9uIEp1bCAxNSAxNTo0MjowMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcHRybWVtZnVuYzEpOiBOZXcgZnVuY3Rpb24gdG8gaGlkZSBkZXRhaWxzIG9mCglwb2ludGVyIHRvIG1lbWJlciBmdW5jdGlvbnMgYmV0dGVyLgoKTW9uIEp1bCAxNSAxNDoyMzowMiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IFJlc29sdmUgT0ZGU0VUX1JFRnMgdGhhdCBhcmUKCW1ldGhvZHMgaW50byB0aGUgYWN0dWFsIG1ldGhvZCwgYXMgd2Uga25vdyB0aGUgaW1wbGllZCBvYmplY3QgaXMKCW5vdCB1c2VkLgoKTW9uIEp1bCAxNSAxMzowODoyOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChtYXliZWNvbW1hX3dhcm4pOiBPbmx5IGVtaXQgdGhlIHBlZHdhcm4gaWYgd2UncmUgbm90CglpbnNpZGUgYSBzeXN0ZW0gaGVhZGVyLgoKRnJpIEp1bCAxMiAxNjozMDowNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDYWxsIGNvbXBsZXRlX3R5cGUgb24gdGhlCglpbnN0YW5jZSB0eXBlLgoKVGh1IEp1bCAxMSAxNzoxNjo0MCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEFsd2F5cyBidWlsZCB1cCBhbiBPRkZTRVRfUkVGCglmb3Igb2JqX3B0ci0+ZnVuYyBzbyB0aGF0IHdlIGNhbiBrbm93IHdoaWNoIG9iamVjdCB0byB1c2UgaW4gYQoJbWV0aG9kIGNhbGwuCgpXZWQgSnVsIDEwIDE5OjM2OjM3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9wdHJtZW1mdW5jKTogUmVtb3ZlIHNvcnJ5LCBub3cgd2UgY2FuIGNhc3QKCWFyb3VuZCB0aGluZ3MuICBBbHNvIGltcHJvdmUgbWFpbnRhaW5hYmlsaXR5LgoKV2VkIEp1bCAxMCAxODoyMDoxMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBDaGVjayBmb3Igb3ZlcmZsb3cgd2hlbiBldmFsdWF0aW5nIGFuCglhcnJheSBkaW1lbnNpb24uCgpXZWQgSnVsIDEwIDE3OjI2OjE5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogRG9uJ3QgY2hlY2sgZm9yIGFtYmlndWl0eSB3aXRoIGNvbnN0cnVjdG9yCglpZiBORVdfT1ZFUi4KCgkqIHR5cGVjay5jIChidWlsZF94X2Z1bmN0aW9uX2NhbGwpOiBQYXNzIGZ1bmN0aW9uIG92ZXJsb2FkCglxdWVzdGlvbnMgdG8gbmV3IG92ZXJsb2FkaW5nIGNvZGUgaWYgTkVXX09WRVIuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogT25seSBjaGVjayBmb3IgdHlwZSBjb252ZXJzaW9uIG9wcwoJaWYgd2UncmUgZG9pbmcgY29weS1pbml0aWFsaXphdGlvbiAoaS5lLiBMT09LVVBfT05MWUNPTlZFUlRJTkcpLgoJRG9uJ3QgY2hlY2sgZm9yIGFtYmlndWl0eSB3aXRoIGNvbnN0cnVjdG9yIGlmIE5FV19PVkVSLgoJKiBjdnQuYyAoY29udmVydF90b19yZWZlcmVuY2UpOiBEZXJlZmVyZW5jZSB0aGUgcmVzdWx0IG9mIGEgdHlwZQoJY29udmVyc2lvbiBvcGVyYXRvci4KCShidWlsZF9jb252KTogUHJvcGFnYXRlIElDU19VU0VSX0ZMQUcuCgkoaW1wbGljaXRfY29udmVyc2lvbik6IENhbGwgaW5zdGFudGlhdGVfdHlwZS4KCVBhc3MgTE9PS1VQX09OTFlDT05WRVJUSU5HIGluc3RlYWQgb2YgTE9PS1VQX05PUk1BTC4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogRml4IGN2LXF1YWxzIG9uIGFyZ3R5cGUuCgkocHJpbnRfel9jYW5kaWRhdGVzKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogQ2FsbCBpdC4KCShidWlsZF91c2VyX3R5cGVfY29udmVyc2lvbl8xKTogSWYgTE9PS1VQX09OTFlDT05WRVJUSU5HLCBkb24ndAoJY29uc2lkZXIgbm9uLWNvbnZlcnRpbmcgY29uc3RydWN0b3JzLgoJQ2FsbCBwcmludF96X2NhbmRpZGF0ZXMuCglSZXR1cm4gYW4gQU1CSUdfQ09OViBmb3IgYW4gYW1iaWd1b3VzIGNvbnZlcnNpb24uCgkoYnVpbGRfdXNlcl90eXBlX2NvbnZlcnNpb24pOiBIYW5kbGUgQU1CSUdfQ09OVi4KCShjb252ZXJ0X2xpa2UpOiBGaXggdGVzdCBmb3IgYnVpbGRpbmcgVEFSR0VUX0VYUFIuCglDYWxsIGluc3RhbnRpYXRlX3R5cGUuCglIYW5kbGUgQU1CSUdfQ09OViBhbmQgTFZBTFVFX0NPTlYuCgkoYnVpbGRfb3Zlcl9jYWxsKTogSGFuZGxlIDAgYXJncyBhbmQgZWxsaXBzaXMuCgkqIGNwLXRyZWUuZGVmOiBBZGQgQU1CSUdfQ09OVi4KClR1ZSBKdWwgIDkgMTc6NDg6NDggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogSWYgd2UgZmluZCBtZW0gaW4gb2JqIHdoZW4gcGFyc2luZwoJYG9iai0+bWVtJywgbWFrZSBzdXJlIHdlIHJldHVybiB0aGUgcmlnaHQgdmFsdWUuCgpUdWUgSnVsICA5IDE2OjExOjI4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGdldF9iYXNlX2Rpc3RhbmNlKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKVHVlIEp1bCAgOSAxMjo0NjozNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX2JpbmRpbmdzKTogTWFrZSBzdGF0aWMuCgpNb24gSnVsICA4IDE2OjQyOjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogRG9uJ3QgY2hlY2sgdHlwZSBjb252ZXJzaW9ucyBpZgoJTkVXX09WRVIuCgoJKiBjdnQuYyAoel9jYW5kaWRhdGUpOiBQdXQgYmFjayB0ZW1wbGF0ZSBmaWVsZC4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogU2V0IGl0LgoJKGFkZF90ZW1wbGF0ZV9jYW5kaWRhdGUpOiBMaWtld2lzZS4KCShqb3VzdCk6IFVzZSBpdC4KCShjb21wYXJlX3F1YWwpOiBIYW5kbGUgcmVmZXJlbmNlcyBhbmQgcG9pbnRlcnMgdG8gbWVtYmVycy4KCShjb21wYXJlX2ljcyk6IEhhbmRsZSByZWZlcmVuY2UgYmluZGluZ3MuCgoJKiBkZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IFByb3BhZ2F0ZSBERUNMX09ORV9PTkxZLgoKTW9uIEp1bCAgOCAxNjoxODo1NiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoY29tcHV0ZV9jb252ZXJzaW9uX2Nvc3RzKTogQ2FsbCBjb21wbGV0ZV90eXBlLgoKCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogVXNlIGNvbXB0eXBlcyBpbnN0ZWFkIG9mIGNvbXBhcmluZwoJcG9pbnRlcnMsIHNvIHdlIGNhbiBoYW5kbGUgdGVtcGxhdGUgcGFyYW1ldGVycy4KCkZyaSBKdWwgIDUgMTY6NTE6NTMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY3BfY29udmVydF90b19wb2ludGVyKTogV2UgaGF2ZSB0byBjYWxsIGNvbXBsZXRlX3R5cGUKCWhlcmU7IGxldCdzIG1ha2UgaXQgZXhwbGljaXQgaW5zdGVhZCBvZiBhIHNpZGUgZWZmZWN0IG9mIGFuCgllcnJvciBjaGVjay4KCldlZCBKdWwgIDMgMTY6Mjk6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3Z0LmMgKHpfY2FuZGlkYXRlKTogUmVtb3ZlIHRlbXBsYXRlIGZpZWxkLgoJKHJlZmVyZW5jZV9iaW5kaW5nKTogSGFuZGxlIGJpbmRpbmcgdG8gdGVtcG9yYXJ5LgoJKGltcGxpY2l0X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShhZGRfZnVuY3Rpb25fY2FuZGlkYXRlKTogSGFuZGxlIGFydGlmaWNpYWwgY29uc3RydWN0b3IgcGFybXMuCglIYW5kbGUgZnVuY3Rpb25zIHdpdGggdG9vIGZldyBwYXJtcy4KCShhZGRfdGVtcGxhdGVfY2FuZGlkYXRlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX3VzZXJfdHlwZV9jb252ZXJzaW9uXzEpOiBIYW5kbGUgY29uc3RydWN0b3JzLgoJKGNvbnZlcnRfbGlrZSk6IExpa2V3aXNlLgoJKGJ1aWxkX292ZXJfY2FsbCk6IExpa2V3aXNlLgoJKGJ1aWxkX25ld19mdW5jdGlvbl9jYWxsKTogU3VwcG9ydCB0ZW1wbGF0ZXMuCgkoY29tcGFyZV9pY3MpOiBGaXggcmVmZXJlbmNlLCBpbmhlcml0YW5jZSBoYW5kbGluZy4KCk1vbiBKdWwgIDEgMjI6NTg6MTggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBkZWNsLmM6IEFkZCBzaWduZWRfc2l6ZV96ZXJvX25vZGUuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBCdWlsZCBpdC4KCSogY2xhc3MuYyAocHJlcGFyZV9mcmVzaF92dGFibGUpOiBVc2UgaXQgaW5zdGVhZCBvZiBzaXplX3plcm9fbm9kZQoJd2hlbiB3ZSdyZSB0cnlpbmcgdG8gbWFrZSBhIG5lZ2F0aXZlIGRlbHRhLgoKTW9uIEp1bCAgMSAxNzo1NjoxOSAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJU3RvcCBkb2luZyB0aGlzIGRhbW4gaW5kZXg9PXN0cmNociB2YXJpYWJsZSBuYW1lIGNvbmZ1c2lvbi4KCSogY2xhc3MuYyAoYWRkX3ZpcnR1YWxfZnVuY3Rpb24pOiBDaGFuZ2UgbG9jYWwgdmFyIElOREVYIHRvIGJlCgluYW1lZCBJRFguCgkoYWRkX21ldGhvZCk6IExpa2V3aXNlLgoJKiBsZXguYyAocHJpbnRfcGFyc2Vfc3RhdGlzdGljcyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkc19oZXJlKTogTGlrZXdpc2UuCgkobG9va3VwX2ZpZWxkKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UuCgkoZ2V0X2Jhc2VsaW5rcyk6IExpa2V3aXNlLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogTGlrZXdpc2UuCgkoYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF94X2FycmF5X3JlZik6IENoYW5nZSBJTkRFWCBwYXJtIHRvIGJlIG5hbWVkIElEWC4KCShnZXRfbWVtYmVyX2Z1bmN0aW9uX2Zyb21fcHRyZnVuYyk6IExpa2V3aXNlLgoJKGJ1aWxkX3B0cm1lbWZ1bmMpOiBDaGFuZ2UgbG9jYWwgdmFyIElOREVYIHRvIGJlIElEWC4KCShjX2V4cGFuZF9zdGFydF9jYXNlKTogTGlrZXdpc2UuCgpTYXQgSnVuIDI5IDE0OjA1OjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBNb3ZlIHVzZXItZGVmaW5lZCB0eXBlIGNvbnZlcnNpb24KCWhhbmRsaW5nIHRvIGJlZm9yZSBleHRyYWN0aW9uIG9mIFRZUEVfUFRSTUVNRlVOQ19GTl9UWVBFLgoJKGNvbnZlcnRfdG9fcmVmZXJlbmNlKTogVXNlIGJ1aWxkX3R5cGVfY29udmVyc2lvbiB0byBjb252ZXJ0IHRvCgl0aGUgcmVmZXJlbmNlIHR5cGUgZGlyZWN0bHkuCgkoc3RhbmRhcmRfY29udmVyc2lvbik6IEZpeCB2b2lkKiBjYXNlLCBub24tY29udmVyc2lvbnMuCgkocmVmZXJlbmNlX2JpbmRpbmcpOiBGaXggZXhwciA9PSAwIGNhc2UsIG5vbi1jb252ZXJzaW9ucy4KCShjb252ZXJ0X2xpa2UpOiBTdXBwb3J0IFJFRl9CSU5ELgoJKGNvbXBhcmVfcXVhbCk6IFNwbGl0IG91dCBmcm9tIGNvbXBhcmVfaWNzLgoJKGNvbXBhcmVfaWNzKTogVXNlIGl0LCBoYW5kbGUgaWNzZXMgd2l0aCBvbmx5IGEgcXVhbF9jb252LgoKCSogaW5pdC5jIChleHBhbmRfdmVjX2luaXQpOiBEb24ndCBjcmFzaCBpZiBkZWNsIGlzIE5VTEwuCgpGcmkgSnVuIDI4IDExOjUyOjUxIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1jb25maWcuaW46IE5ldyBmaWxlLCBjb25maWd1cnkgZm9yIE1hYyBNUFcuCgkqIG1wdy1tYWtlLnNlZDogTmV3IGZpbGUsIG1ha2VmaWxlIGVkaXRpbmcgZm9yIE1QVy4KClRodSBKdW4gMjcgMTU6MTg6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBDYWxsIHJlcG9fdGVtcGxhdGVfdXNlZC4KCgkqIHNlYXJjaC5jIChsb29rdXBfY29udmVyc2lvbnMpOiBPbmx5IGxvb2t1cCBjb252ZXJzaW9ucyBpbgoJY29tcGxldGUgdHlwZXMuCgpUaHUgSnVuIDI3IDEyOjU5OjUzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuZGVmOiBSZW5hbWVkIGZyb20gdHJlZS5kZWYsIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoCglnY2MncyB0cmVlLmRlZi4KCSogY3AtdHJlZS5oLCBsZXguYzogSW5jbHVkZSBjcC10cmVlLmRlZi4KCSogTWFrZWZpbGUuaW4gKENYWF9UUkVFX0gpOiBSZWZlcmVuY2UgY3AtdHJlZS5kZWYuCgpXZWQgSnVuIDI2IDE4OjI5OjQ3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlXzEpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgpNb24gSnVuIDI0IDE3OjE3OjMyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdGFydF9hbm9uX2Z1bmMpOiBNYWtlIHN1cmUgYW5vbnltb3VzIGZ1bmN0aW9ucyBhcmUKCW5ldmVyIGV4dGVybmFsLgoKRnJpIEp1biAyMSAxNToxMDo1OCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IElmIGZ1bmN0aW9uX2RlcHRoID4gMSwgc2V0IG5lc3RlZC4KCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IFJldmVydCBCb2IncyBjaGFuZ2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IEZpeCBoYW5kbGluZyBvZiBuYW1lZCBiaXRmaWVsZCB3aWR0aHMuCgpUaHUgSnVuIDIwIDIzOjM1OjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGFkZF9wZW5kaW5nX3RlbXBsYXRlKTogSGFuZGxlIHR5cGVzLgoJKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IFdpdGggLWZleHRlcm5hbC10ZW1wbGF0ZXMsIGp1c3QgYWRkIHRoZSBjbGFzcwoJdG8gcGVuZGluZ190ZW1wbGF0ZXMgaW5zdGVhZCBvZiBpbnN0YW50aWF0aW5nIGl0IG5vdy4KCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBIYW5kbGUgdHlwZXMgaW4gcGVuZGluZ190ZW1wbGF0ZXMuCgpUaHUgSnVuIDIwIDE0OjA4OjQwIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2JpdGZpZWxkKTogSGFuZGxlIGNvbnN0YW50IGRlY2xzIGFwcHJvcHJpYXRlbHkuCglHaXZlIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2Ugbm93IGluc3RlYWQgb2Ygc3Bld2luZyBjb3JlCglsYXRlci4KClRodSBKdW4gMjAgMTM6MDE6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYzogRG9uJ3QgdHVybiBvbiB0aHVua3MgYnkgZGVmYXVsdCBmb3Igbm93LgoKV2VkIEp1biAxOSAxMTozNzowNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IEhhbmRsZSBlcnJvcl9tYXJrX25vZGUuCgkoY29tbW9uX3R5cGUsIE9GRlNFVF9UWVBFKTogSGFuZGxlIHRlbXBsYXRlX3R5cGVfcGFybXMuCgpUdWUgSnVuIDE4IDEwOjAyOjE1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBJZiBhdF9lb2YsIGNhbGwgaW1wb3J0X2V4cG9ydF9kZWNsCglyZWdhcmRsZXNzIG9mIERFQ0xfSU5MSU5FLgoKCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBTZXQgVFJFRV9BRERSRVNTQUJMRSBvbiBDT05TVFJVQ1RPUnMuCgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0X2JpdHMpOiBDb3B5IFRZUEVfU0laRS4KCgkqIHJ0dGkuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogU3VwcG9ydCB0ZW1wbGF0ZXMuCgkqIHRyZWUuZGVmOiBTdXBwb3J0IERZTkFNSUNfQ0FTVF9FWFBSLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoKTW9uIEp1biAxNyAxNToyMzozNiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfc3RhdGljX2Nhc3QpOiBTdXBwb3J0IHRlbXBsYXRlcy4KCShidWlsZF9jb25zdF9jYXN0KTogTGlrZXdpc2UuCgkqIHRyZWUuZGVmOiBTdXBwb3J0IENPTlNUL1NUQVRJQ19DQVNUX0VYUFIuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgkqIGRlY2wyLmMgKGJ1aWxkX2V4cHJfZnJvbV90cmVlKTogTGlrZXdpc2UuCgpTdW4gSnVuIDE2IDEyOjMzOjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IERvbid0IHRydXN0CglUUkVFX1NZTUJPTF9SRUZFUkVOQ0VEIGZvciB2dGFibGVzIG9mIGxvY2FsIGNsYXNzZXMuCgpGcmkgSnVuIDE0IDE4OjEzOjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogSGFuZGxlIG9wZXJhdG9yIFQuCgpXZWQgSnVuIDEyIDE3OjUyOjQwIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfZGVsZXRlKTogTW92ZSBjcmVhdGlvbiBvZiBQQVJNUyBpbnNpZGUgdGVzdCBvZgoJVFlQRV9IQVNfREVTVFJVQ1RPUiwgc2luY2UgaXQncyBuZXZlciB1c2VkIG91dHNpZGUgb2YgdGhhdCBibG9jay4KClR1ZSBKdW4gMTEgMTU6MDk6MTggMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29uZGl0aW9uYWxfZXhwcik6IERvbid0IGFzc3VtZSB0aGF0Cgl0aGUgYXJndW1lbnRzIHRvID86IGFyZSBhbHdheXMgcG9pbnRlcnMgb3IgcmVjb3Jkcy4KClR1ZSBKdW4gMTEgMTM6NTY6MjMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogU3RpbGwgZW1pdCBzdGF0aWMvd2Vhay9jb21kYXQKCWNvcGllcyBvZiBpbmxpbmUgdGVtcGxhdGUgZnVuY3Rpb25zIHdpdGggLWZuby1pbXBsaWNpdC10ZW1wbGF0ZXMuCgpUdWUgSnVuIDExIDExOjQyOjEzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogaW5pdC5jIChidWlsZF9kZWxldGUpOiBEZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGJhc2V0eXBlCglwYXRoIHRvIHRoZSBkZXN0cnVjdG9yIHdlJ3JlIGNhbGxpbmcuCgpGcmkgSnVuICA3IDE1OjMwOjEwIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZGVjbC5jIChidWlsZF9lbnVtZXJhdG9yKTogQWx3YXlzIGNvcHkgdGhlIElOVEVHRVJfQ1NUIHVzZWQgdG8KCWluaXRpYWxpemUgdGhlIGVudW0sIGJlY2F1c2Ugd2UgcmVhbGx5IGFuZCB0cnVseSBkb24ndCBrbm93IHdoZXJlCglpdCBjYW1lIGZyb20uCgkoc3RhcnRfZW51bSk6IERvbid0IGNvcHkgaW50ZWdlcl96ZXJvX25vZGUgYmVjYXVzZQoJYnVpbGRfZW51bWVyYXRvciB3aWxsIGRvIGl0LgoKRnJpIEp1biAgNyAxMToxMTowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IERvIGFjY2VzcyBjb250cm9sIG9uIGJhc2UgZGVzdHJ1Y3RvcnMuCgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgRlVOQ1RJT05fREVDTCk6IFNldCB1cAoJSURFTlRJRklFUl9HTE9CQUxfVkFMVUUgZm9yIG1lbWJlciBmdW5jdGlvbnMgc28gcHVzaGRlY2wgZG9lc24ndAoJaG9zZSB1cy4KCkZyaSBKdW4gIDcgMTA6Mzc6MzMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IElmIHdlIGhhdmUgYWxyZWFkeSBleHRlbmRlZCB0aGUKCWxpZmV0aW1lIG9mIHRoZSB0ZW1wb3JhcnksIGRvbid0IHRyeSBpdCBhZ2Fpbi4KCSogdHlwZWNrLmMgKGNfZXhwYW5kX3JldHVybik6IERvbid0IHRyeSBhbmQgY29udmVydCB0aGUgcmV0dXJuCgl2YWx1ZSB0d2ljZSB3aGVuIHdlIHdhbnQgYSByZWZlcmVuY2UsIG9uY2UgaXMgZW5vdWdoLgoKVHVlIEp1biAgNCAxNTo0MTo0NSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfZXhwciwgY2FzZSBERUNMX1NUTVQpOiBEb24ndCBwYXNzCglMT09LVVBfT05MWUNPTlZFUlRJTkcgYXQgYWxsIGZvciBub3cuCgoJKiBzZWFyY2guYyAoYWRkX2NvbnZlcnNpb25zKTogUHV0IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9uIGluCglUUkVFX1ZBTFVFLCB0aGUgYmFzZXR5cGUgaW4gVFJFRV9QVVJQT1NFLgoJKiBjdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogQWRqdXN0LgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBBZGp1c3QuCgkqIGNhbGwuYyAodXNlcl9oYXJzaG5lc3MpOiBBZGp1c3QuCgpNb24gSnVuICAzIDE1OjMwOjUyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogUHJldGVuZCB0aGlzIGlzIGEgRlVOQ1RJT05fREVDTCBmb3IgdGhlCgliYWNrZW5kJ3MgYmVuZWZpdC4KCk1vbiBKdW4gMTAgMTg6NTg6MTkgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IEFkZCBhIGR1bW15IHJlZ2lvbiwgaWYgd2UKCWdldCBhbiBlcnJvciwgc28gdGhhdCB3ZSBjYW4gYXZvaWQgY29yZSBkdW1waW5nIGxhdGVyLgoKRnJpIE1heSAzMSAxNDo1NjoxMyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKE9GRlNFVF9SRUYpOiBSZW1vdmUuCgkqIHRyZWUuZGVmIChDUF9PRkZTRVRfUkVGKTogUmVuYW1lIHRvIE9GRlNFVF9SRUYuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBDbGVhbnVwIGNhbGxlcnMgb2YgZXhwYW5kX2V4cHIuCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3KTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChleHBhbmRfdGFyZ2V0X2V4cHIpOiBMaWtld2lzZS4KCkZyaSBNYXkgMzEgMTQ6MjI6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogRG9uJ3QgdXNlIFRSRUVfVkFMVUUgb24gYQoJVEFSR0VUX0VYUFIuCgpXZWQgTWF5IDI5IDE3OjA0OjMzIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBSZWRvIGhvdyBhbmQgd2hlbiB0ZW1wb3JhcmllcyBhcmUKCWNyZWF0ZWQuCgkqIGRlY2wuYyAoZ3Jva19yZWZlcmVuY2VfaW5pdCk6IERvbid0IHRyeSBhbmQgYmUgc21hcnQgYWJvdXQKCXJ1bm5pbmcgY2xlYW51cHMuCgpXZWQgTWF5IDI5IDE2OjAyOjA4IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF91cF9yZWZlcmVuY2UpOiBBZGQgTlVMTF9UUkVFIHRvIGFsbCBjYWxscyB0byBidWlsZAoJKFRBUkdFVF9FWFBSLi4uKSwgbm93IHRoYXQgaXQgaGFzIDQgYXJndW1lbnRzLgoJKiB0cmVlLmMgKGJ1aWxkX2NwbHVzX25ldyk6IExpa2V3aXNlLgoKVGh1IE1heSAyMyAxNjo0MDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIsIGNhc2UgQ0FTVF9FWFBSKTogSGFuZGxlIFQoKSBwcm9wZXJseS4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBEb24ndCBjYWxsIHB1c2gvcG9wX2NwX2Z1bmN0aW9uX2NvbnRleHQuCgkqIGRlY2wuYyAoc3RydWN0IHNhdmVkX3Njb3BlKTogUmVtb3ZlIG5hbWVkX2xhYmVscywKCXtiYXNlLG1lbWJlcn1faW5pdF9saXN0LgoJKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3Qgc2V0IHRoZW0uICBDYWxsCglwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQgaWYgYXBwcm9wcmlhdGUuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoZG9fYnVpbGRfYXNzaWduX3JlZik6IFJlbW92ZSBvYnNvbGV0ZSBjaGVjayBvZgoJVFlQRV9IQVNfQVNTSUdOX1JFRiAoYmFzZXR5cGUpLgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogRGlhZ25vc2UgdXNlciBkZWZpbml0aW9uIG9mCglpbXBsaWNpdGx5LWRlY2xhcmVkIG1ldGhvZHMuCgpUaHUgTWF5IDIzIDEyOjEzOjA4IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBBZGQgY29kZSB0byBnaXZlCgltZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgkoZG9fYnVpbGRfYXNzaWduX3JlZik6IERvbid0IHN5bnRoZXNpemUgYXNzaWdubWVudCBvcGVyYXRvcnMgZm9yCgljbGFzc2VzIGNvbnRhaW5pbmcgcmVmZXJlbmNlIG9yIGNvbnN0IG1lbWJlcnMuCgoJKiBjbGFzcy5jIChzdHJ1Y3QgYmFzZV9pbmZvKTogUmVtb3ZlIGNhbnRfc3ludGhfY29weV9jdG9yCglhbmQgY2FudF9zeW50aF9hc25fcmVmLgoJKGZpbmlzaF9iYXNlX3N0cnVjdCk6IFJlbW92ZSB0aGUgY29kZSB0aGF0IHRyaWVzIHRvIGNvbmRpdGlvbmFsaXplCglzeW50aGVzaXMgb2YgY29weSBjb25zdHJ1Y3RvcnMgJiBhc3NpZ25tZW50IG9wZXJhdG9ycyBiYXNlZCBvbgoJYWNjZXNzIHBlcm1pc3Npb25zLiAgSW5zdGVhZCwgbGV0IGl0IGZhaWwgd2hlbiBpdCB0cmllcyB0bwoJc3ludGhlc2l6ZSB0aGUgY29weSBjb25zdHJ1Y3Rvci4gIFRoaXMgd2lsbCBnaXZlIG1lYW5pbmdmdWwgZXJyb3IKCW1lc3NhZ2VzIGluc3RlYWQgb2Ygc2lsZW50bHkgZ2VuZXJhdGluZyBjb2RlIHRvIHBlcmZvcm0gYSBiaXRjb3B5LgoKV2VkIE1heSAyMiAxMTo0NToxOSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogUmVtb3ZlIG9sZC1uLWNydWZ0eSAjaWYgMCBjb2RlIGZvcgoJZGV0ZXJtaW5pbmcgdHlwZXMgZm9yIGNvbnN0YW50IHZhbHVlcy4KCgkqIGRlY2wuYyAoc3RydWN0IG5hbWVkX2xhYmVsX2xpc3QpOiBVc2UgaW5zdGVhZCBvZiBzdHVmZmluZwoJcmFuZG9tIGl0ZW1zIGludG8gYSBUUkVFX0xJU1Qgbm9kZS4KCShuYW1lZF9sYWJlbF91c2VzKTogVXNlIHRoZSBuZXcgc3RydWN0LgoJKHBvcGxldmVsKTogTGlrZXdpc2UuCgkobG9va3VwX2xhYmVsKTogTGlrZXdpc2UuCgkoZGVmaW5lX2xhYmVsKTogQWRkIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGVsbCB0aGUgdXNlciB0aGUgbGluZQoJd2hlcmUgdGhlIGdvdG8gaXMgbG9jYXRlZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVzdGluYXRpb24gb2YgdGhlCglnb3RvLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogVXNlIE5VTEwgaW5zdGVhZCBvZiBOVUxMX1RSRUUgdG8gaW5pdGlhbGl6ZQoJbmFtZWRfbGFiZWxfdXNlcy4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCgkoc3RhcnRfZGVjbCk6IENvbXBsYWluIGFib3V0IGRlZmluaW5nIGEgc3RhdGljIGRhdGEgbWVtYmVyCglpbiBhIGRpZmZlcmVudCB0eXBlIGZyb20gd2hpY2ggaXQgd2FzIGRlY2xhcmVkLgoKV2VkIE1heSAyMiAwOTozMzoyMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoYnVpbGRfZXhwcl90eXBlX2NvbnZlcnNpb24pOiBBZGp1c3QuCgpUdWUgTWF5IDIxIDExOjIxOjU2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBBbHdheXMgY29udmVydCAndGhpcycgdG8gdGhlCglhcHByb3ByaWF0ZSB0eXBlLgoKCSogc2VhcmNoLmMgKGFkZF9jb252ZXJzaW9ucyk6IFB1dCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBpbgoJVFJFRV9WQUxVRSwgdGhlIHR5cGUgaW4gVFJFRV9QVVJQT1NFLgoJKiBjdnQuYyAoYnVpbGRfdHlwZV9jb252ZXJzaW9uKTogQWRqdXN0LgoJKiBjYWxsLmMgKHVzZXJfaGFyc2huZXNzKTogQWRqdXN0LgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBDYWxsIHRlbXBvcmFyeV9hbGxvY2F0aW9uIGFuZAoJcGVybWFuZW50X2FsbG9jYXRpb24gYXJvdW5kIHRoZSBBU01fT1VUUFVUX01JX1RIVU5LIGNhc2UsIHRvby4KCgkqIHRyZWUuYyAoYnVpbGRfY3BsdXNfYXJyYXlfdHlwZSk6IEhhbmRsZSB0d2Vha2luZyBvZgoJVFlQRV9NQUlOX1ZBUklBTlQgaGVyZS4KCSogdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogTm90IGhlcmUuCgoJKiB0eXBlY2suYyAoY29tcGxldGVfdHlwZSk6IE9ubHkgdHJ5IHRvIGNvbXBsZXRlIGFuIGFycmF5IHR5cGUgaWYKCWl0IGhhcyBhIGRvbWFpbi4KCk1vbiBNYXkgMjAgMTQ6NTU6NTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rdmFyZGVjbCk6IENhbGwgY29tcGxldGVfdHlwZS4KCShncm9rZGVjbGFyYXRvcik6IENhbGwgY29tcGxldGVfdHlwZSBmb3IgUEFSTV9ERUNMcy4KCkZyaSBNYXkgMTcgMTY6NDE6MTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZS1zZXQKCUNMQVNTVFlQRV9HT1RfU0VNSUNPTE9OIGFmdGVyIGNhbGxpbmcgZmluaXNoX3N0cnVjdF8xLgoKRnJpIE1heSAxNyAxNDo1Njo1NSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGNwX2V4cGFuZF9kZWNsX2NsZWFudXApOiBSZW1vdmUsIHRoZSBiYWNrZW5kIGlzIG5vdwoJc21hcnQgZW5vdWdoIHRvIGRvIGl0IHJpZ2h0LgoJKiB0cmVlLmMgKGNwX2V4cGFuZF9kZWNsX2NsZWFudXApOiBMaWtld2lzZS4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IFVzZSBleHBhbmRfZGVjbF9jbGVhbnVwIGluc3RlYWQgb2YKCWNwX2V4cGFuZF9kZWNsX2NsZWFudXAuCgkoc3RvcmVfcGFybV9kZWNscyk6IExpa2V3aXNlLgoJKGhhY2tfaW5jb21wbGV0ZV9zdHJ1Y3R1cmVzKTogTGlrZXdpc2UuCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2NsZWFudXApOiBMaWtld2lzZS4KCkZyaSBNYXkgMTcgMTM6MTM6NTEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwciwgY29uZCBVTlNBVkVfRVhQUik6IE1vdmUgZnJvbSB0aGUgQysrCglmcm9udGVuZCB0byB0aGUgYmFja2VuZCB3aGVyZSBpdCBiZWxvbmdzLgoJKiB0cmVlLmMgKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCgkodW5zYXZlX2V4cHJfbm93KTogTGlrZXdpc2UuCgkqIHRyZWUuZGVmIChVTlNBVkVfRVhQUik6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKHVuc2F2ZV9leHByKTogTGlrZXdpc2UuCgkodW5zYXZlX2V4cHJfbm93KTogTGlrZXdpc2UuCgpGcmkgTWF5IDE3IDExOjAyOjQxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZW1pdF9iYXNlX2luaXQpOiBNYWtlIHN1cmUgdGhlIHBhcnRpYWwgRUggY2xlYW51cHMgbGl2ZQoJb24gdGhlIGZ1bmN0aW9uX29ic3RhY2suCgpUaHUgTWF5IDE2IDE1OjI5OjMzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogZXhwci5jIChkb19jYXNlKTogRG9uJ3QgdHJ5IHRvIGRlcmVmZXJlbmNlIG51bGwgVFJFRV9UWVBFcwoJd2hlbiBjaGVja2luZyBmb3IgcG9pbnRlciB0eXBlcy4KClRodSBNYXkgMTYgMTM6Mzg6NTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBSZW1vdmUgb2Jzb2xldGUgY2hlY2sgZm9yCglhY2Nlc3MgZGVjbGFyYXRpb25zLgoKVGh1IE1heSAxNiAxMzozNDoxNSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX292ZXJsb2FkX2NhbGwpOiBTaW1wbGlmeSBjYWxscyB0bwoJYnVpbGRfb3ZlcmxvYWRfY2FsbCBieSByZW1vdmluZyBsYXN0IHBhcmFtZXRlci4KCShidWlsZF9tZXRob2RfY2FsbCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmg6IExpa2V3aXNlLgoJKiBtZXRob2QuYyAoYnVpbGRfb3BmbmNhbGwpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IExpa2V3aXNlLgoKVGh1IE1heSAxNiAxMzoxNTo0MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGRlZmF1bHRfcGFybV9jb252ZXJzaW9ucyk6IEZhY3RvciBvdXQgY29tbW9uIGNvZGUuCgkoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogVXNlIGl0LgoKV2VkIE1heSAxNSAxNDo0NjoxNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogQWxsb3cgaW1wbGljaXQgJiBvbiBNRVRIT0RfVFlQRXMsCglidXQgcGVkd2FybiBhcyB0aGUgY29kZSBpcyBib2d1cy4KCSogdHlwZWNrLmMgKGRlY2F5X2NvbnZlcnNpb24pOiBMaWtld2lzZS4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBVc2UgYnVpbGRfYWRkcl9mdW5jIGluc3RlYWQgb2YKCWRlZmF1bHRfY29udmVyc2lvbi4gIERvbid0IGFsbG93IHBvaW50ZXItdG8tbWV0aG9kIGZ1bmN0aW9ucyBkb3duCgloZXJlLgoJKGJ1aWxkX3VuYXJ5X29wKTogVXNlIHJlYWwgcG9pbnRlci10by1tZW1iZXIgZnVuY3Rpb25zIGluc3RlYWQgb2YKCWZha2Ugb25lcy4KCShidWlsZF9wdHJtZW1mdW5jKTogVXNlIGJ1aWxkX2FkZHJfZnVuYyBpbnN0ZWFkIG9mIGJ1aWxkX3VuYXJ5X29wLgoJKGNvbnZlcnRfZm9yX2Fzc2lnbm1lbnQpOiBSZW1vdmVkIHNvbWUgb2Jzb2xldGUgY29kZS4KCSogZGVjbDIuYyAocmVwYXJzZV9hYnNkY2xfYXNfZXhwcik6IFBhc3MgY3VycmVudF9jbGFzc19yZWYgdG8KCWJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBpbnN0ZWFkIG9mIGN1cnJlbnRfY2xhc3NfcHRyLiAgT25seSBjYWxsCglkaWdlc3RfaW5pdCBvbmNlIG9uIGFuIGluaXRpYWxpemVyLCB3ZSBkbyB0aGlzIGp1c3QgY2hlY2tpbmcKCVRSRUVfVFlQRS4KCShidWlsZF9leHByX2Zyb21fdHJlZSk6IFBhc3MgY3VycmVudF9jbGFzc19yZWYgdG8KCWJ1aWxkX3hfZnVuY3Rpb25fY2FsbCBpbnN0ZWFkIG9mIGN1cnJlbnRfY2xhc3NfcHRyLgoJKiBpbml0LmMgKGJ1aWxkX21lbWJlcl9jYWxsKTogTGlrZXdpc2UuCgkqIHBhc2UueTogTGlrZXdpc2UuCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IEhhbmRsZSBPRkZTRVRfUkVGcyBiZXR0ZXIuCgkqIHB0LmMgKHVuaWZ5KTogSGFuZGxlIHBvaW50ZXItdG8tbWVtYmVyIGZ1bmN0aW9ucyBiZXR0ZXIuCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogQ2xlYXIgb3V0IGN1cnJlbnRfY2xhc3NfcmVmIGp1c3QgbGlrZQoJd2UgZG8gZm9yIGN1cnJlbnRfY2xhc3NfcHRyLgoKCSogdHlwZWNrLmMgKGdldF9kZWx0YV9kaWZmZXJlbmNlKTogSGFuZGxlIHZpcnR1YWwgYmFzZXMgYmV0dGVyLgoKVHVlIE1heSAxNCAxNjozNzozNyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yKTogVXNlIHRoZSBkZWx0YSBmb3IKCXRoZSBvcmlnaW5hbCBiYXNldHlwZSBmb3IgdGhpcyB2aXJ0dWFsIGZ1bmN0aW9uIHdpdGggdGh1bmtzLgoJKGJ1aWxkX3NpZ25hdHVyZV9tZXRob2RfY2FsbCk6IFdlIHN0aWxsIG5lZWQgdG8gYWRqdXN0ICd0aGlzJwoJd2l0aCB0aHVua3MuCgpUdWUgTWF5IDE0IDE2OjI3OjI1IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfYWRkcl9mdW5jKTogTmV3IHJvdXRpbmUuICBVc2VkIHRvIGdldCB0aGUgYHJlYWwnCglhZGRyZXNzIG9mIGEgZnVuY3Rpb24gb3IgYSBtZXRob2QuICBOZWVkZWQgdG8gYXZvaWQgZ2V0dGluZyBhCglwb2ludGVyLXRvLW1lbWJlciBmdW5jdGlvbi4KCShidWlsZF9jYWxsKTogTmV3IHJvdXRpbmUgdG8gYnVpbGQgQ0FMTF9FWFBScy4KCShidWlsZF9tZXRob2RfY2FsbCk6IFVzZSBpdC4KCSogY3Z0LmMgKGNvbnZlcnRfdG9fYWdncik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfZnVuY3Rpb25fY2FsbF9yZWFsKTogTGlrZXdpc2UuCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfdGFibGVfY29uc3RydWN0b3IpOiBVc2UgYnVpbGRfYWRkcl9mdW5jLgoJKiBjcC10cmVlLmggKGJ1aWxkX2NhbGwsIGJ1aWxkX2FkZHJfZnVuYyk6IERlY2xhcmUgdGhlbS4KClR1ZSBNYXkgMTQgMTI6NDc6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChMT09LVVBfQUdHUik6IFJlbW92ZSwgdW51c2VkLgoJKiBwYXJzZS55OiBSZW1vdmUgdXNlcyBvZiBMT09LVVBfQUdHUi4KClR1ZSBNYXkgMTQgMTI6MDc6NTEgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogKi5bY2h5XTogUmVuYW1lIGN1cnJlbnRfY2xhc3NfZGVjbCB0byBjdXJyZW50X2NsYXNzX3B0ciwgYW5kCglDX0NfRCB0byBjdXJyZW50X2NsYXNzX3JlZi4KCk1vbiBNYXkgMTMgMTY6NTU6MjMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIChjb252ZXJ0X2hhcnNobmVzcyk6IFRpZ2h0ZW4gdXAgcG9pbnRlciBjb252ZXJzaW9ucy4KClNhdCBNYXkgMTEgMDQ6MzM6NTAgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IFN1cnJvdW5kIERFQ0xfT05FX09OTFkgd2l0aCBpZmRlZi4KCShmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoKRnJpIE1heSAxMCAxMTowOTo1NyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjdnQuYyAoY29udmVydF9mbl9wdHIpOiBXZSBkb24ndCB1c2UgdGh1bmtzIGZvciBwbWZzLgoKCSogbWV0aG9kLmMgKGVtaXRfdGh1bmspOiBTZXQgZmxhZ19vbWl0X2ZyYW1lX3BvaW50ZXIgaW4gZGVmYXVsdAoJY29kZS4KClRodSBNYXkgIDkgMTg6MTg6MzAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYzogVHVybiBvbiB0aHVua3MgYnkgZGVmYXVsdCB3aGVyZSBzdXBwb3J0ZWQuCgpUdWUgTWF5ICA3IDIwOjM5OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNwLXRyZWUuaCAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9tYXliZSk6IFJlbW92ZWQuCgkqIGNhbGwuYyAoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogSW52ZXJ0IG1lYW5pbmcgb2YgbGFzdCBhcmcgdG8KCWJlIHJlcXVpcmVfY29tcGxldGUuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbCk6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogVXNlIGJ1aWxkX292ZXJsb2FkX2NhbGxfcmVhbAoJaW5zdGVhZCBvZiBidWlsZF9vdmVybG9hZF9jYWxsX21heWJlLgoKTW9uIE1heSAgNiAwMToyMzozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IHRyeSB0byBlbWl0IGZ1bmN0aW9ucyB0aGF0IGhhdmVuJ3QKCWJlZW4gY29tcGlsZWQuCgpGcmkgTWF5ICAzIDA5OjMwOjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF92dGFibGVfdmFyZGVjbCk6IE9vcHMuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG8gc2F2ZSBwcmV2aW91c19jbGFzc18qLgoJQWxzbyBzdG9yZSB0aGUgYmluZGluZ3MgZnJvbSBwcmV2aW91c19jbGFzc192YWx1ZXMuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUmVzdG9yZSB0aGVtLgoKVGh1IE1heSAgMiAyMTo1Njo0OSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBPbmx5IHdyaXRlIG91dCB2dGFibGUgaWYgaXRzCglzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShmaW5pc2hfZmlsZSk6IFJlLWpvaW4gc3ludGhlc2lzL3Z0YWJsZSBsb29wIHdpdGggaW5saW5lIGVtaXNzaW9uCglsb29wLCBkaXNhYmxlIGlubGluaW5nIHdoZW4gYW4gaW5saW5lIGlzIG91dHB1dC4KClRodSBNYXkgIDIgMTc6MjA6MDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBTZXR1cCBzYXZlZF9pbl9jYXRjaC4KCShwdXNoX2VoX2NsZWFudXApOiBSZXNldCBfX2VoX2luX2NhdGNoLgoJKGV4cGFuZF9zdGFydF9jYXRjaF9ibG9jayk6IFNldCBfX2VoX2luX2NhdGNoLgoKVGh1IE1heSAgMiAxNjoyMToxNyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAocHVzaF9laF9jbGVhbnVwKTogQWRkIHRyYWNraW5nIGZvciB3aGV0aGVyIG9yIG5vdCB3ZQoJaGF2ZSBhbiBhY3RpdmUgZXhjZXB0aW9uIG9iamVjdC4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBpdCB0byBtYWtlIHN1cmUgYSByZXRocm93IHdpdGhvdXQgYW4KCWV4Y2VwdGlvbiBvYmplY3QgaXMgY2F1Z2h0LgoKVGh1IE1heSAgMiAxMToyNjo0MSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogQ2xlYXIgb3V0IGNsYXNzLWxldmVsIGJpbmRpbmdzCgljYWNoZS4KCldlZCBNYXkgIDEgMTE6MjY6NTIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBBbHNvIHVzZSBzZW50cmllcyBmb3IgdmFycyB3aXRoCglERUNMX09ORV9PTkxZIG9yIERFQ0xfV0VBSyBzZXQgKHNob3VsZCBhbnkgc3VjaCBoYXBwZW4gdG8gYmUKCWNyZWF0ZWQpLgoKCSogbGV4LmMgKGhhbmRsZV9jcF9wcmFnbWEpOiBEaXNhYmxlICNwcmFnbWEKCWludGVyZmFjZS9pbXBsZW1lbnRhdGlvbiBpZiBTVVBQT1JUU19PTkVfT05MWSA+IDEuCgpUdWUgQXByIDMwIDExOjI1OjQ2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChlbWl0X3RodW5rKTogV3JhcCBkZWZhdWx0IGNhc2UgaW4KCXRlbXBvcmFyeS9wZXJtYW5lbnRfYWxsb2NhdGlvbi4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVXNlIERFQ0xfT05FX09OTFkuCgkoZW1pdF90aHVuayk6IENhbGwgYXNzZW1ibGVfZW5kX2Z1bmN0aW9uLgoKTW9uIEFwciAyOSAxNTozODoyOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChpbXBvcnRfZXhwb3J0X3Z0YWJsZSk6IFVzZSBERUNMX09ORV9PTkxZLgoJKGltcG9ydF9leHBvcnRfZGVjbCk6IExpa2V3aXNlLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IERpc2FibGUgdnRhYmxlIGhhY2sgaWYKCVNVUFBPUlRTX09ORV9PTkxZID4gMS4KCk1vbiBBcHIgMjkgMTQ6MzI6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogUFJFSU5DUkVNRU5UX0VYUFIgYW5kCglQUkVERUNSRU1FTlRfRVhQUnMgdGFrZSB0d28gYXJndW1lbnRzLCBub3Qgb25lLgoKTW9uIEFwciAyOSAwMDoyNzo1MyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChidWlsZF92dGFibGVfZW50cnkpOiBEb24ndCBidWlsZCB0aHVua3MgZm9yIGFic3RyYWN0Cgl2aXJ0dWFscy4KCgkqIGxleC5jIChyZWFsX3l5bGV4KTogRml4IGhhbmRsaW5nIG9mIF9fUFJFVFRZX0ZVTkNUSU9OX18gbGlrZSBDCglmcm9udGVuZC4KClNhdCBBcHIgMjcgMTY6NDU6MzUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoc2V0X3J0dGlfZW50cnkpOiBVc2Ugc2l6ZV96ZXJvX25vZGUuCgkoYnVpbGRfdnRhYmxlKTogTGlrZXdpc2UuCgpTYXQgQXByIDI3IDE0OjQ4OjU3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogUGFzcyBzaXplX3plcm9fbm9kZSB0byBzZXRfcnR0aV9lbnRyeS4KCShwcmVwYXJlX2ZyZXNoX3Z0YWJsZSk6IExpa2V3aXNlLgoKRnJpIEFwciAyNiAxMzoxNDoxNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IENhbGwgbWFya191c2VkIG9uIHRoZSB0YXJnZXQgZnVuY3Rpb24uCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogRG9uJ3Qgd2FybiBhYm91dCBwZW5kaW5nIHRlbXBsYXRlcy4KClRodSBBcHIgMjUgMTQ6NTU6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBGaXggbGlzdCB3YWxraW5nIGxvZ2ljLgoKCSogdHlwZWNrMi5jIChjaGVja19mb3JfbmV3X3R5cGUpOiBPbmx5IHdhcm4gaWYgLXBlZGFudGljLgoKV2VkIEFwciAyNCAxNTo0MToxNSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IFJlbW92ZSBvbGQgY29kZSBmb3IKCWRvbnRfYWxsb3dfdHlwZV9kZWZpbml0aW9ucy4KCSogY3AtdHJlZS5oOiBMaWtld2lzZS4KCSogc3Bldy5jOiBNYWtlIHN1cmUgY3AtdHJlZS5oIGlzIGluY2x1ZGVkIGJlZm9yZSBwYXJzZS5oLCBzbyB0aGUKCWRlZmluaXRpb24gb2YgZmxhZ2dlZF90eXBlX3RyZWUgaXMgZm91bmQgYmVmb3JlIGl0IGlzIHVzZWQuCgkqIGxleC5jOiBMaWtld2lzZS4KCSogcGFyc2UueTogQWRkZWQgdGhlIGZ0eXBlIG1lbWJlciB0byB0aGUgdHlwZSB1bmlvbiwgYW5kIGNoYW5nZWQgYQoJbnVtYmVyIG9mIHJ1bGVzIHRvIHVzZSBpdCBpbnN0ZWFkIG9mIHR0eXBlLiAgQWRkZWQgY2FsbHMgdG8KCWNoZWNrX2Zvcl9uZXdfdHlwZSgpIGFzIGFwcHJvcHJpYXRlLgoJKiB0eXBlY2syLmMgKGNoZWNrX2Zvcl9uZXdfdHlwZSk6IE5ldyBmdW5jdGlvbiBmb3IgY2hlY2tpbmcKCWlmIGEgbmV3bHkgZGVmaW5lZCB0eXBlIGFwcGVhcnMgaW4gdGhlIHNwZWNpZmllZCB0cmVlLgoJKiBjcC10cmVlLmg6IEFkZCBuZXcgdHlwZSBmbGFnZ2VkX3R5cGVfdHJlZS4gIEFkZCBhIHByb3RvdHlwZQoJZm9yIGNoZWNrX2Zvcl9uZXdfdHlwZSgpLgoKV2VkIEFwciAyNCAwMDozNjoyMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IE9ubHkgdXNlIGEgc2VudHJ5IGlmIHRoZSBkZWNsIGlzIHB1YmxpYy4KCgkqIHB0LmMgKHRzdWJzdF9leHByLCBERUNMX1NUTVQpOiBJZiB3ZSBkb24ndCBoYXZlIGFuIGluaXRpYWxpemVyLAoJZG9uJ3QgcGFzcyBMT09LVVBfT05MWUNPTlZFUlRJTkcuCgpUdWUgQXByIDIzIDE3OjE4OjQ3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGNvbW1vbl90eXBlKTogRml4IHRoZSBBUlJBWV9UWVBFIGNhc2Ugc28gaXQKCXByb3Blcmx5IGtlZXBzIHRyYWNrIG9mIGNvbnN0IGFuZCB2b2xhdGlsZSB0eXBlIG1vZGlmaWVycy4KClR1ZSBBcHIgMjMgMTA6NTI6NTYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChjcF90cmVlX2VxdWFsKTogQysrIHZlcnNpb24gb2Ygc2ltcGxlX2NzdF9lcXVhbC4KCSogcHQuYyAoY29tcF90ZW1wbGF0ZV9hcmdzKTogVXNlIGl0LgoKCSogcnR0aS5jIChnZXRfdGluZm9fZm4sIGJ1aWxkX2R5bmFtaWNfY2FzdCwgZXhwYW5kXypfZGVzYyk6IENhbGwKCWFzc2VtYmxlX2V4dGVybmFsIGZvciBhcnRpZmljaWFsIGZ1bmN0aW9uIGRlY2xzLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IE9vcHMuCgpNb24gQXByIDIyIDE3OjI4OjI3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IFB1dCBzdGF0aWMgZGF0YSBtZW1iZXIgdGVtcGxhdGVzCglpbnRvIGNvbW1vbiBzdG9yYWdlLCBvciBtYWtlIHRoZW0gd2VhaywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhleQoJYXJlIGR5bmFtaWNhbGx5IG9yIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuCgkoZ2V0X3NlbnRyeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfZmlsZSk6IERvIGltcG9ydF9leHBvcnRfZGVjbCBmb3Igc3RhdGljIGRhdGEgbWVtYmVycyBiZWZvcmUKCWJ1aWxkaW5nIHRoZSBpbml0L2ZpbmkgZnVuY3Rpb25zLiAgRG9uJ3QgaW5pdC9maW5pIGEgdmFyaWFibGUgdGhhdCdzCglFWFRFUk5BTC4gIFVzZSBhIHNlbnRyeSBmb3IgdmFyaWFibGVzIGluIGNvbW1vbi4gIEZpeCBtaXNtYXRjaGluZwoJcHVzaC9wb3BfdGVtcF9zbG90cy4KCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IElmIERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4sIGRvIHRoZQoJZXhwYW5kX3N0YXRpY19pbml0IHRoYW5nLgoJKiBtZXRob2QuYyAoZ2V0X2lkXzIpOiBOZXcgZnVuY3Rpb24uCgpNb24gQXByIDIyIDE1OjMyOjQ1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZW1wdHlfcGFybXMpOiBNYWtlIHN1cmUgd2UgdXNlIEMrKy1zdHlsZSBwcm90b3R5cGVzCgl3aGVuIHdlJ3JlIGRlY2xhcmluZyBtZW1iZXIgZnVuY3Rpb25zLgoKU3VuIEFwciAyMSAxMDowODoyMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogMTYgcy9yIGNvbmZsaWN0cy4KCSogcGFyc2UueSAoc2VsZl90ZW1wbGF0ZV90eXBlKTogTmV3IG5vbnRlcm1pbmFsLgoKVGh1IEFwciAxOCAwODo1Njo1NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG1ha2VfdHlwZW5hbWVfdHlwZSk6IEhhbmRsZSBnZXR0aW5nIGEgVFlQRV9ERUNMIGZvciBhCgluYW1lLgoJKiBwYXJzZS55IChiYXNlX2NsYXNzLjEpOiBBbGxvdyAndHlwZW5hbWUgZm9vOjpiYXInLgoKCSogbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBSZW1vdmUgI3ByYWdtYSBjb2RlIHRoYXQgcGxheXMgd2l0aCB0aGUKCWlucHV0IHN0cmVhbSwgc2luY2Ugd2Ugbm93IGRlYWwgd2l0aCB0b2tlbnMuICBDbGVhciBuZXh0Y2hhciB3aGVuCgl3ZSdyZSBkb25lLgoJKGhhbmRsZV9jcF9wcmFnbWEpOiBVc2UgcmVhbF95eWxleC4KCShoYW5kbGVfc3lzdl9wcmFnbWEpOiBEb24ndCBkbyBza2lwbGluZSBoZXJlLiAgT25seSBjYWxsIHJlYWxfeXlsZXgKCWluIG9uZSBwbGFjZS4KCgkqIGxleC5jIChjaGVja19mb3JfbWlzc2luZ19zZW1pY29sb24pOiBIYW5kbGUgU0VMRk5BTUUuCgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IEZpeCAiI3ByYWdtYSBpbXBsZW1lbnRhdGlvbiIuCgpXZWQgQXByIDE3IDE2OjUxOjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnk6IE5ldyB0b2tlbiBTRUxGTkFNRSBmb3IgcG90ZW50aWFsIGNvbnN0cnVjdG9yLgoJKiBzcGV3LmMgKHl5bGV4KTogSGFuZGxlIGl0LgoJKiBsZXguYyAoaWRlbnRpZmllcl90eXBlKTogUHJvZHVjZSBpdC4KCgkqIHBhcnNlLnkgKGNvbXBsZXRlX3R5cGVfbmFtZSk6IEluIDo6IGNhc2UsIGRvbid0IHB1c2ggY2xhc3MgYmluZGluZy4KCShjb21wbGV4X3R5cGVfbmFtZSk6IExpa2V3aXNlLgoKV2VkIEFwciAxNyAxNTowMjo0MCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfcmVpbnRlcnByZXRfY2FzdCk6IEhhbmRsZSBwb2ludGVyIHRvIG1lbWJlcgoJZnVuY3Rpb25zLgoKV2VkIEFwciAxNyAxMjoyODoyNiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBsZXguYyAoaGFuZGxlX2NwX3ByYWdtYSk6IE5ldyBmdW5jdGlvbiwgd2l0aCBkZWNsLCBkb2luZyB0aGUgY2MxcGx1cwoJcHJhZ21hcy4KCShjaGVja19uZXdsaW5lKTogUHV0IHRoZSB2dGFibGUvdW5pdC9pbXBsZW1lbnRhdGlvbi9pbnRlcmZhY2UgcHJhZ21hCgljb2RlIGludG8gaGFuZGxlX2NwX3ByYWdtYSwgcmVwbGFjaW5nIGl0IHdpdGggYSBjYWxsLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSk6IEdpdmUgaW50IHJldHVybiB0eXBlLCBhbmQgdGFrZSBGSU5QVVQgYW5kIFRPS0VOCglhcmdzLiAgR2V0IHRoZSBuZXh0IHRva2VuIGFmdGVyIGhhbmRsaW5nIHRoZSBwcmFnbWEgdG9rZW4uCgpXZWQgQXByIDE3IDEwOjI4OjM0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChjcF9jb252ZXJ0X3RvX3BvaW50ZXIpOiBBdm9pZCBkb2luZyBiYXNlIGFuYWx5c2lzIG9uIHBtZnMuCgkoY29udmVydF90b19wb2ludGVyX2ZvcmNlKTogTGlrZXdpc2UuCgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IEZpeCBhcnJheSBuZXcgd2l0aG91dCAtZmNoZWNrLW5ldy4KClR1ZSBBcHIgMTYgMTM6NDQ6NTggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oLCBjYWxsLmMsIGNsYXNzLmMsIGRlY2wuYywgcGFyc2UueSwgcHQuYywgcnR0aS5jLAoJdHJlZS5jOiBMb3NlIFRZUEVfTkVTVEVEX05BTUUuCgoJKiBwYXJzZS55IChuZXN0ZWRfbmFtZV9zcGVjaWZpZXJfMSk6IERvbid0IHRyZWF0IG5vbi1pZGVudGlmaWVycwoJYXMgaWRlbnRpZmllcnMuCgoJKiB0cmVlLmRlZjogQWRkIFZFQ19JTklUX0VYUFIuCgkqIGV4cHIuYyAoY3BsdXNfZXhwYW5kX2V4cHIpOiBIYW5kbGUgaXQuCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIGl0IGluc3RlYWQgb2YgdGhlIFJUTF9FWFBSIG5hc3RpbmVzcyBhbmQKCXRoZSBleHRyYSBmaWxlLXNjb3BlIHN5bWJvbCBuYXN0aW5lc3MuCgpNb24gQXByIDE1IDE2OjIxOjI5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChtYWtlX3RodW5rKTogVGh1bmtzIGFyZSBzdGF0aWMuCgkoZW1pdF90aHVuayk6IFVzZSBBU01fT1VUUFVUX01JX1RIVU5LIGlmIGl0J3MgZGVmaW5lZC4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBFbWl0IHRodW5rcyBhcyBuZWVkZWQuCgkoZmluaXNoX2ZpbGUpOiBEb24ndCBlbWl0IHRoZW0gaGVyZS4KClN1biBBcHIgMTQgMTE6MzQ6MzkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBIYW5kbGUgbnVsbCBwb2ludGVycy4KCShpZm5vbm51bGwpOiBOZXcgZnVuY3Rpb24uCgpGcmkgQXByIDEyIDA5OjA4OjI3IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2FsbC5jIChidWlsZF9tZXRob2RfY2FsbCk6IFJlbWVtYmVyIHRoZSBvcmlnaW5hbCBiYXNldHlwZSB3ZQoJd2VyZSBjYWxsZWQgd2l0aC4gIEdpdmUgYW4gZXJyb3IgbWVzc2FnZSBpbnN0ZWFkIG9mIHRyeWluZwoJKGluY29ycmVjdGx5KSB0byBjYWxsIGEgbm9uLXN0YXRpYyBtZW1iZXIgZnVuY3Rpb24gdGhyb3VnaCBhCglub24taW5oZXJpdGVkIGNsYXNzLgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogTWFyayB0aGUgbmV3IGZpeHVwIGFzCglERUNMX0FSVElGSUNJQUwuCgpUaHUgQXByIDExIDAzOjU3OjA5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfbmV3KTogVXNlIGEgVEFSR0VUX0VYUFIgZm9yIGFsbG9jX2V4cHIuCgoJKiBjbGFzcy5jIChzZXRfcnR0aV9lbnRyeSk6IEZpeCBmb3IgdGh1bmtzLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF9kZWNsKTogU3RpbGwgZW1pdCB0eXBlaW5mbyBmbnMgZm9yCgljdi12YXJpYW50cyBvZiBidWlsdGluIHR5cGVzLgoKCSogcnR0aS5jIChleHBhbmRfY2xhc3NfZGVzYyk6IFNldCB1cCBiYXNlX2luZm9fdHlwZV9ub2RlIGhlcmUuCgkoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBJbnN0ZWFkIG9mIGhlcmUuCgpXZWQgQXByIDEwIDE0OjE3OjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBEbyBpbml0IHJlZ2FyZGxlc3Mgb2YgLWZydHRpLgoJKGJ1aWxkX3R5cGVpZCk6IE9ubHkgY29tcGxhaW4gYWJvdXQgdGFraW5nIGR5bmFtaWMgdHlwZWlkIHdpdGhvdXQKCS1mcnR0aS4KCgkqIGRlY2wyLmM6IGZsYWdfcnR0aSBkZWZhdWx0cyB0byAxLgoKCSogcnR0aS5jIChnZXRfdGluZm9fdmFyKTogVGhlIGdlbmVyYWwgY2xhc3MgY2FzZSBpcyBub3cgc21hbGxlci4KCShpbml0X3J0dGlfcHJvY2Vzc2luZyk6IFBhY2sgdGhlIGxhdHRlciB0aHJlZSBmaWVsZHMgb2YgYmFzZV9pbmZvCglpbnRvIDMyIGJpdHMuCgpXZWQgQXByIDEwIDEzOjUwOjE0IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogRG9uJ3QgZHVtcCBpZiBuYW1lIGlzIE5VTExfVFJFRS4KCldlZCBBcHIgMTAgMTI6NTY6MDIgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKG1ha2VfbWVtb2l6ZWRfdGFibGVfZW50cnkpOiBVbmRlZmVyIHRoZSBwb3AsIGlmIG5lY2Vzc2FyeS4KCShwdXNoX21lbW9pemVkX2NvbnRleHQpOiBTcGxpdCBvdXQgY29kZSB0byB1bmRlZmVyIHBvcF90eXBlX2xldmVsIHRvCgkoY2xlYXJfbWVtb2l6ZWRfY2FjaGUpOiBoZXJlLgoJKHBvcF9tZW1vaXplZF9jb250ZXh0KTogV2UgY2FuIG9ubHkgaGFuZGxlIG9uZSBsYXllciBvZiBkZWZlcnJhbCBvZgoJcG9wX3R5cGVfbGV2ZWwgc28gY2xlYXIgdGhlIGNhY2hlLCBpZiB0aGVyZSB3YXMgYSBwcmV2aW91cyBsZXZlbC4KClR1ZSBBcHIgIDkgMjM6MDY6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChpbml0X3J0dGlfcHJvY2Vzc2luZyk6IEJ1aWxkIHVwIGJhc2VfaW5mb190eXBlX25vZGUuCgkoZXhwYW5kX2NsYXNzX2Rlc2MpOiBVc2Ugb25lIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgYmFzZV9pbmZvCglzdHJ1Y3RzLCBwYXNzZWQgdXNpbmcgYSBDT05TVFJVQ1RPUi4KClR1ZSBBcHIgIDkgMTQ6MjA6NTcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYnVpbGRfdmJhc2VfcGF0aCk6IFJlbW92ZSBibG9jayBleHRlcm4gZm9yCglmbGFnX2Fzc3VtZV9ub25udWxsX29iamVjdHMgaGVyZS4KCShidWlsZF92Zm5fcmVmKTogU3BsaXQgb3V0IGZ1bmN0aW9uYWxpdHkgaW50byBidWlsZF92dGJsX3JlZi4KCShidWlsZF92dGJsX3JlZik6IE5ldyByb3V0aW5lLgoJKGJ1aWxkX3Z0YWJsZSk6IFNldCB1cCBydHRpIGluZm8gaGVyZS4KCShhZGRfdmlydHVhbF9mdW5jdGlvbik6IE5vdGUgaW4gQ0xBU1NUWVBFX1JUVEkgdGhlIGJlc3QKCXBsYWNlIHdoZXJlIHdlIGNhbiBnZXQgdGhlIHJ0dGkgcG9pbnRlcnMgZnJvbSB0byBhdm9pZCBoYXZpbmcgdG8KCXNlYXJjaCBhcm91bmQgZm9yIGEgcGxhY2UuCgkoZmluaXNoX2Jhc2Vfc3RydWN0KTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuICBOZXZlciBjcmVhdGUgdG90YWxseSBuZXcgdnRhYmxlcwoJd2l0aCB0b3RhbGx5IG5ldyB2dGFibGUgcG9pbnRlcnMgZm9yIHJ0dGkuICBEaXNhYmxlIGNvZGUgdG8gbGF5b3V0Cgl2dGFibGUgcG9pbnRlcnMgYmV0dGVyIHVudGlsIHdlIHdhbnQgdG8gYnJlYWsgYmluYXJ5Cgljb21wYXRpYmlsaXR5LgoJKiBydHRpLmMgKGJ1aWxkX2hlYWRvZl9zdWIpOiBOZXcgcm91dGluZSB0byBjb252ZXJ0IGRvd24gdG8gYQoJc3ViLW9iamVjdCB0aGF0IGhhcyBhbiBydHRpIHBvaW50ZXIgaW4gdGhlIHZ0YWJsZS4KCShidWlsZF9oZWFkb2YpOiBVc2UgaXQuICBBbHNvLCB1c2UgYnVpbGRfdnRibF9yZWYgbm93IHRvIGJlIG1vcmUKCW1haW50YWluYWJsZS4KCShidWlsZF9keW5hbWljX2Nhc3QpOiBNYWtlIHN1cmUgd2UgaGF2ZSBzYXZlZCBpdCwgaWYgd2UgbmVlZCB0by4KCSogc2VhcmNoLmMgKGRmc19pbml0X3ZiYXNlX3BvaW50ZXJzKTogRGlzYWJsZSBjb2RlIHRoYXQgZGVhbHMgd2l0aAoJYSBtb3JlIGVmZmljaWVudCB2dGFibGUgbGF5b3V0LCBlbmFibGUgbGF0ZXIuCgkqIGNhbGwuYyAoZmxhZ19hc3N1bWVfbm9ubnVsbF9vYmplY3RzKTogTW92ZWQgZGVjbGFyYXRpb24gdG8KCSogY3AtdHJlZS5oOiBoZXJlLiAgRGVjbGFyZSBidWlsZF92dGJsX3JlZi4KCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBVc2UgTlVMTF9UUkVFIGluc3RlYWQgb2YgMCBpbgoJZnVuY3Rpb24gY2FsbHMgdGhhdCB3YW50IGEgdHJlZS4KClR1ZSBBcHIgIDkgMTI6MTA6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jIChidWlsZF9keW5hbWljX2Nhc3QpOiBIYW5kbGUgZG93bmNhc3RpbmcgdG8gWCogZ2l2ZW4KCW90aGVyIFggc3Vib2JqZWN0cyBpbiB0aGUgbW9zdCBkZXJpdmVkIHR5cGUuICBBY2suCgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IE5vIG5lZWQgdG8gc3RyaXAgY3YtcXVhbHMgaGVyZSwKCWdldF90eXBlaWQgd2lsbCBkbyBpdCBmb3IgdXMuCgkoZ2V0X3R5cGVpZF8xKTogQnJlYWsgb3V0IGNhbGwtYnVpbGRpbmcgZm9yIGV4cGFuZF8qX2Rlc2MgdG8gdXNlLgoJKGdldF90eXBlaWQpOiBDYWxsIGl0LgoJKGV4cGFuZF8qX2Rlc2MpOiBMaWtld2lzZS4KCSogZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IERvbid0IHNldCBUWVBFX0JVSUxUX0lOIG9uIGNoYXIgKgoJYW5kIHZvaWQgKi4KCShpbml0X2RlY2xfcHJvY2Vzc2luZyk6IExvc2UgYnVpbHRpbl90eXBlX3RkZXNjcyBsb3NzYWdlLgoJKiBkZWNsMi5jIChmaW5pc2hfdnRhYmxlX3ZhcmRlY2wpOiBSZW1vdmUgb2Jzb2xldGUgY29kZS4KCk1vbiBBcHIgIDggMTc6MjM6MjMgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3QpOiBXaGVuIGNhbGxpbmcgc2V0X25lc3RlZF90eXBlbmFtZSwgdXNlCglUWVBFX05FU1RFRF9OQU1FIChjdXJyZW50X2NsYXNzX3R5cGUpIGluc3RlYWQgb2YKCWN1cnJlbnRfY2xhc3NfbmFtZS4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBMaWtld2lzZS4KCShwdXNoZGVjbF9jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKGdyb2tkZWNsYXJhdG9yKTogVXNlIE5VTExfVFJFRSBpbnN0ZWFkIG9mIDAgaW4gdGhlIGNhbGwgdG8KCXNldF9uZXN0ZWRfdHlwZW5hbWUuCgpTdW4gQXByICA3IDEwOjQ0OjMxIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEhhbmRsZSBhcnJheXMuCgoJKiBjcC10cmVlLmggKERFQ0xfUkVBTExZX0VYVEVSTik6IE5ldyBtYWNyby4KClNhdCBBcHIgIDYgMTM6NTY6MjcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcnR0aS5jICh0aHJvd19iYWRfY2FzdCk6IFVzZSBlbnRyeSBwb2ludCBfX3Rocm93X2JhZF9jYXN0LgoJKGluaXRfcnR0aV9wcm9jZXNzaW5nKTogTG9zZSBiYWRfY2FzdF90eXBlLgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IFVzZSB0aHJvd19iYWRfY2FzdC4KCgkqIHJ0dGkuYyAoc3ludGhlc2l6ZV90aW5mb19mbik6IEhhbmRsZSBlbnVtcyBhbmQgcG1mcy4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG9uJ3Qgc3ludGhlc2l6ZSBhcnRpZmljaWFsIGZ1bmN0aW9ucwoJdGhhdCBhcmUgZXh0ZXJuYWwgYW5kIG5vdCBpbmxpbmUuCgoJKiBydHRpLmMgKGdldF90aW5mb19mbik6IElmIGF0X2VvZiwgY2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wuCgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEhhbmRsZSBoYXZpbmcgbmV3IGlubGluZXMgYWRkZWQgdG8KCXNhdmVkX2lubGluZXMgYnkgc3ludGhlc2lzLgoKCSogcnR0aS5jIChnZXRfYmFkX2Nhc3Rfbm9kZSk6IERvbid0IHJlcXVpcmUgPHR5cGVpbmZvPi4KCkZyaSBBcHIgIDUgMTc6MDI6MDkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCVJUVEkgcmV3cml0ZSB0byBpbml0aWFsaXplIG5vZGVzIGFzIG5lZWRlZCwgbm90IHJlcXVpcmUgdGhhdAoJdXNlcnMgI2luY2x1ZGUgPHR5cGVpbmZvPiwgY29tcGxldGUgZnVuY3Rpb25hbGl0eSBhbmQgcmVkdWNlIHdhc3RlZAoJc3BhY2UuCgkqIHJ0dGkuYyAoaW5pdF9ydHRpX3Byb2Nlc3NpbmcpOiBOZXcgZm4uCgkoYnVpbGRfdHlwZWlkKTogVGhlIHZ0YWJsZSBlbnRyeSBpcyBub3cgYSBmdW5jdGlvbi4KCShnZXRfdGluZm9fdmFyKTogTmV3IGZuLgoJKGdldF90aW5mb19mbik6IExpa2V3aXNlLgoJKGdldF90eXBlaWQpOiBVc2UgaXQuCgkoYnVpbGRfZHluYW1pY19jYXN0KTogRGVjbGFyZSBhbmQgdXNlIGVudHJ5IHBvaW50IF9fZHluYW1pY19jYXN0LgoJKGJ1aWxkXypfZGVzYyk6IFJlbmFtZSB0byBleHBhbmRfKl9kZXNjIGFuZCByZXdyaXRlIHRvIHVzZSBlbnRyeQoJcG9pbnRzIF9fcnR0aV8qLgoJKGFkZF91bmluc3RhbnRpYXRlZF9kZXNjLCBnZXRfZGVmX3RvX2ZvbGxvdywgYnVpbGRfdF9kZXNjKTogTG9zZS4KCShzeW50aGVzaXplX3RpbmZvX2ZuKTogTmV3IGZuLgoJKiBtZXRob2QuYyAoYnVpbGRfdF9kZXNjX292ZXJsb2FkKTogTG9zZS4KCShidWlsZF9vdmVybG9hZF93aXRoX3R5cGUpOiBNb3JlIGdlbmVyaWMuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBDYWxsIGluaXRfcnR0aV9wcm9jZXNzaW5nLgoJKiBjbGFzcy5jIChzZXRfcnR0aV9lbnRyeSk6IFVzZSBnZXRfdGluZm9fZm4uCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBNYXJrIHRoZSBydHRpIGZ1bmN0aW9uLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IERvbid0IGJ1aWxkX3RfZGVzYy4KCShpbXBvcnRfZXhwb3J0X2RlY2wpOiBIYW5kbGUgdGluZm8gZnVuY3Rpb25zLgoJKGZpbmlzaF9maWxlKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChpbmxpbmVfY29udmVyc2lvbik6IE5ldyBmbi4KCShidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBVc2UgaXQuCgkqIGNwLXRyZWUuaDogQWRkIGRlY2xzLgoKCSogbWV0aG9kLmMgKGhhY2tfaWRlbnRpZmllcik6IEFsc28gY29udmVydCBjb21wb25lbnRfcmVmcyBmcm9tCglyZWZlcmVuY2VzLgoKCSogbGV4LmMgKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IFVzZSB0aGUgdHlwZSwgbm90IHRoZSBuYW1lLCBpbgoJZGVjbHNwZWNzLgoKCSogZGVjbDIuYyAoaW1wb3J0X2V4cG9ydF92dGFibGUpOiBGaXggd2VhayB2dGFibGVzLgoKRnJpIEFwciAgNSAxMzozMDoxNyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHNlYXJjaC5jIChnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBGaXggYWNjZXNzIGNoZWNrcyBmb3IKCXByb3RlY3RlZCBiYXNlcy4KCkZyaSBBcHIgIDUgMTE6MDI6MDYgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY2FsbC5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IERlbGV0ZSB1bm5lZWRlZCBkZWNsLCBpdCdzIGluCgljcC10cmVlLmguCgkoY29udmVydF9oYXJzaG5lc3MpOiBBZGQgcHJvdG90eXBlcyB3cmFwcGVkIGJ5IFBST1RPLgoJKiBkZWNsMi5jIChncm9rX2Z1bmN0aW9uX2luaXQpOiBMaWtld2lzZS4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogQ2hhbmdlIHRvIHZvaWQgcmV0dXJuIHR5cGUuCgkqIGNsYXNzLmMgKGJ1aWxkX3Z0YWJsZV9lbnRyeSk6IFJlbW92ZSBkZWNsIG9mIG1ha2VfdGh1bmsuCgkobWVyZ2Vfb3ZlcnJpZGVzKTogRml4IG9yZGVyIG9mIGFyZyBkZWZpbml0aW9ucy4KCShmaW5pc2hfdnRibHMpOiBMaWtld2lzZS4KCShmaXh1cF92dGFibGVfZGVsdGFzKTogTGlrZXdpc2UuCgkobW9kaWZ5X2FsbF9kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKG1vZGlmeV9hbGxfaW5kaXJlY3RfdnRhYmxlcyk6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAoZ2V0X2Jhc2VfZGlzdGFuY2VfcmVjdXJzaXZlKTogTGlrZXdpc2UuCgkoZ2V0X2Fic3RyYWN0X3ZpcnR1YWxzXzEpOiBMaWtld2lzZS4KCShmaXh1cF92aXJ0dWFsX3VwY2FzdF9vZmZzZXRzKTogTGlrZXdpc2UuCgkobG9va3VwX2ZuZmllbGRzXzEpOiBBZGQgcHJvdG90eXBlcyB3cmFwcGVkIGJ5IFBST1RPLgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBGaXggb3JkZXIgb2YgYXJnIGRlZmluaXRpb25zLgoJKGV4cGFuZF9hZ2dyX2luaXRfMSk6IEFkZCBwcm90b3R5cGVzIHdyYXBwZWQgYnkgUFJPVE8uCgkqIGNwLXRyZWUuaCAobWFrZV90aHVuayk6IEFkZCBkZWNsLgoJKG92ZXJsb2FkX3RlbXBsYXRlX25hbWUsIHB1c2hfdGVtcGxhdGVfZGVjbCk6IEFkZCBkZWNscy4KCShkb190b3BsZXZlbF91c2luZ19kZWNsKTogQ2hhbmdlIHRvIHZvaWQgcmV0dXJuIHR5cGUuCgkodmVjX2JpbmZvX21lbWJlcik6IEFkZCBkZWNsLgoKVGh1IEFwciAgNCAxMzozMzoxMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAobWFya19hZGRyZXNzYWJsZSwgY29udmVydF9mb3JfYXNzaWdubWVudCwKCWNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLCBwb2ludGVyX2ludF9zdW0sIHBvaW50ZXJfZGlmZiwKCXVuYXJ5X2NvbXBsZXhfbHZhbHVlKTogQWRkIHByb3RvdHlwZXMgd3JhcHBlZCBieSBQUk9UTy4KCShjb252ZXJ0X3NlcXVlbmNlKTogI2lmIDAgZm4gZGVjbCwgc2luY2UgZGVmaW5pdGlvbiBhbHNvIGlzLgoKVGh1IEFwciAgNCAxMTowMDo1MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBydHRpLmMgKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IE1ha2Ugc3VyZSB3ZSBzdHJpcCBxdWFsaWZpZXJzIG9uCgljYXN0IHRvIHBvaW50ZXIgdHlwZXMgZm9yIHR5cGUgc2VhcmNoaW5nLgoKV2VkIEFwciAgMyAxNzoxMDo1NyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoZ2V0X2RlbHRhX2RpZmZlcmVuY2UpOiBVc2UgY3BfZXJyb3IsIG5vdCBlcnJvciwgaW4gdGhlCgljYXNlIHdoZXJlIEJJTkZPID09IDAuCgpXZWQgQXByICAzIDEyOjAxOjAyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBGaXggd29yZGluZyBvZiBlcnJvciBtZXNzYWdlcyBzbwoJY29uc3RydWN0b3JzIGNvbWUgb3V0IHJpZ2h0LgoKVHVlIEFwciAgMiAxNjowNjo1OSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocHVzaF9vdmVybG9hZGVkX2RlY2wpOiBEb24ndCB3YXJuIGFib3V0IGhpZGRlbgoJY29uc3RydWN0b3JzIHdoZW4gYm90aCB0aGUgdHlwZSBhbmQgdGhlIGZ1bmN0aW9uIGFyZSBkZWNsYXJlZAoJaW4gYSBzeXN0ZW0gaGVhZGVyIGZpbGUuCgpNb24gQXByICAxIDA5OjAzOjEzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogUHJvcGFnYXRlIHRoZSBUWVBFX1BBQ0tFRAoJZmxhZyBmb3IgdGhlIHR5cGUgdG8gdGhlIHR5cGUncyBmaWVsZHMuCgpTYXQgTWFyIDMwIDEyOjE0OjMzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKGNvbXBsZXhfcGFybWxpc3QsIEVMTElQU0VTKTogVGFrZSBvdXQgQVJNLWJhc2VkIHdhcm5pbmcuCgpGcmkgTWFyIDI5IDE1OjUxOjM2IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoYmFzZV9pbmZvLCBmaW5pc2hfYmFzZV9zdHJ1Y3QpOiBSZXBsYWNlCgluZWVkc192aXJ0dWFsX2R0b3Igd2l0aCBiYXNlX2hhc192aXJ0dWFsLgoKCShmaW5pc2hfc3RydWN0XzEpOiBSZW1vdmUgdGhlIG9sZCBjb2RlIHRoYXQgdHJpZWQgdG8gbWFrZSBkZWZhdWx0CglkZXN0cnVjdG9ycyB2aXJ0dWFsLiAgVXNlIGJhc2VfaGFzX3ZpcnR1YWwgd2hlbiBjaGVja2luZyBpZiB3ZSBuZWVkCgl0byBhZGQgYSB2dGFibGUgZW50cnkgZm9yIHRoZSBydHRpIGNvZGUuCgpGcmkgTWFyIDI5IDE0OjAyOjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IENvbXBsYWluIGFib3V0IHRlbXBsYXRlIGRlY2wgd2l0aAoJaW5hcHByb3ByaWF0ZSBkZWNsYXJhdGlvbi4KCkZyaSBNYXIgMjkgMTI6MTU6MzUgMTk5NiAgQm9iIE1hbnNvbiAgPG1hbnNvbkBjaGFybWVkLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfeF91bmFyeV9vcCk6IFJlbW92ZSBib2d1cyBjaGVjayBmb3IgdGFraW5nCgl0aGUgYWRkcmVzcyBvZiBhIG1lbWJlciBmdW5jdGlvbi4KCkZyaSBNYXIgMjkgMTE6NTY6MDIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IE9ubHkgcHVzaCB0aGUgY2xhc3MgaWYKCXdlIGFyZSBub3QgYWxyZWFkeSBpbiB0aGUgY2xhc3MuCgpGcmkgTWFyIDI5IDA5OjQxOjAyIDE5OTYgIEplZmZyZXkgQS4gTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoZW1pdF90aHVuayk6IFJlbW92ZSBjdXJyZW50X2NhbGxfaXNfaW5kaXJlY3Qgbm9uc2Vuc2UuCglBZGQgYWRkaXRpb25hbCBhcmd1bWVudCB0byBJTklUX0NVTVVMQVRJVkVfQVJHUy4KClRodSBNYXIgMjggMTY6NDE6MzkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChzaGFkb3dfdGFnKTogRml4IGVycm9yIGFib3V0IGFub24gdW5pb24gd2l0aCBtZXRob2RzLgoKCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBPbmx5IGdlbmVyYXRlIGEgc2VsZi1yZWZlcmVuY2UgaWYgdGhpcwoJaXMgYSBub24tdGVtcGxhdGUgY2xhc3MuCgkob3B0LmNvbXBvbmVudF9kZWNsX2xpc3QpOiBPbmx5IHVzZSBpdCBpZiBpdCB3YXMgZ2VuZXJhdGVkLgoKCSogcGFyc2UueSAoY29tcG9uZW50X2RlY2xfMSk6IFVzZSBjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yLgoJKGZuLmRlZjIpOiBMaWtld2lzZS4KCShub3R5cGVfY29tcG9uZW50X2RlY2xhcmF0b3IwKTogTGlrZXdpc2UuCgpUaHUgTWFyIDI4IDE1OjExOjM1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfdW5hcnlfb3ApOiBBZGQgY2hlY2tzIGZvciB0YWtpbmcgdGhlIGFkZHJlc3MKCW9mIGEgVEFSR0VUX0VYUFIgb3Igb2YgYSBtZW1iZXIgZnVuY3Rpb24sIGFuZCBnaXZlIGFwcHJvcHJpYXRlCgl3YXJuaW5ncy4KClRodSBNYXIgMjggMTQ6NDk6MjYgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAocHJvY2Vzc190ZW1wbGF0ZV9wYXJtKTogQWxsb3cgdGVtcGxhdGUgdHlwZSBwYXJtcyB0byBiZQoJdXNlZCBhcyB0eXBlcyBmb3IgdGVtcGxhdGUgY29uc3QgcGFybXMuCgpXZWQgTWFyIDI3IDE1OjUxOjE5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRW5zdXJlIHRoZSBlaCBjbGVhbnVwcyBhcmUgb24gdGhlCglmdW5jdGlvbl9vYnN0YWNrLgoKV2VkIE1hciAyNyAxMDoxNDozMCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBCZSBldmVuIG1vcmUgcGlja3kgYWJvdXQgdGhlCglhbWJpZ3VvdXMgbG9va3VwIHdhcm5pbmcuCgkoZ3Jva2RlY2xhcmF0b3IpOiBUd2VhayBTQ09QRV9SRUYgY29uc3RydWN0b3IgZGVjbGFyYXRvcnMgaGVyZS4KCSogcGFyc2UueSAoY29uc3RydWN0b3JfZGVjbGFyYXRvcik6IFJhdGhlciB0aGFuIGhlcmUuCgoJKiBwYXJzZS55IChjb25zdHJ1Y3Rvcl9kZWNsYXJhdG9yKTogTmV3IG5vbnRlcm1pbmFsLgoJKGZuLmRlZjEpOiBVc2UgaXQuCgkoZXhwbGljaXRfaW5zdGFudGlhdGlvbik6IExpa2V3aXNlLgoKVHVlIE1hciAyNiAxMzo0MTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJQWRkIGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGNsYXNzIG5hbWUgYXQgY2xhc3Mgc2NvcGUuCgkqIGRlY2wuYyAobG9va3VwX25hbWVfcmVhbCk6IFJlc3RyaWN0IHBlZHdhcm4gYWJvdXQgYW1iaWd1b3VzIGxvb2t1cC4KCSogcGFyc2UueSAoc2VsZl9yZWZlcmVuY2UpOiBOZXcgbm9udGVybWluYWwuCgkob3B0LmNvbXBvbmVudF9kZWNsX2xpc3QpOiBVc2UgaXQuCgkoZm4uZGVmMSk6IEFkZCBuZXN0ZWRfbmFtZV9zcGVjaWZpZXIgdHlwZV9uYW1lIGNhc2VzLgoJKiBjbGFzcy5jIChidWlsZF9zZWxmX3JlZmVyZW5jZSk6IE5ldyBmdW5jdGlvbi4KCShmaW5pc2hfc3RydWN0KTogSGFuZGxlIGFjY2Vzc19kZWZhdWx0IGxhdGVyLCBtb3ZlIHNlbGYtcmVmZXJlbmNlCglkZWNsIHRvIHRoZSBlbmQuCgkqIHB0LmMgKGxvb2t1cF90ZW1wbGF0ZV9jbGFzcyk6IEhhbmRsZSBnZXR0aW5nIGEgVFlQRV9ERUNMLgoJKiBjcC10cmVlLmg6IEFkanVzdC4KCgkqIHB0LmMgKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBTZXBhcmF0ZSBoYW5kbGluZyBvZiBtZW1iZXIKCWZ1bmN0aW9ucyBhbmQgbm9uLW1lbWJlciBmdW5jdGlvbnMgcHJvcGVybHkuCgpNb24gTWFyIDI1IDE0OjIzOjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHByb2Nlc3NfdGVtcGxhdGVfcGFybSk6IEltcHJvdmUgZXJyb3IgZm9yICd2b2xhdGlsZSBjbGFzcyBLJy4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENoZWNrIHRoZSByaWdodCBzbG90IGZvciBkZXN0cnVjdG9ycy4KCgkqIGRlY2wuYyAoc3RhcnRfZW51bSk6IENvbXBsYWluIGFib3V0IGVudW0gdGVtcGxhdGVzLgoKTW9uIE1hciAyNSAxMzoyNTozMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKHJlc29sdmVfb2Zmc2V0X3JlZik6IE9mZnNldCBwb2ludGVycyB0byBtZW1iZXIgZGF0YSBieSBvbmUuCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSk6IExpa2V3aXNlLgoKTW9uIE1hciAyNSAxMzozMDo0MiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjX2V4cGFuZF9yZXR1cm4pOiBDaGVjayBmb3IgYSByZXR1cm5lZCBsb2NhbAoJYXJyYXkgbmFtZSwgc2ltaWxhciB0byB0aGUgY2hlY2sgZm9yIGFuIEFERFJfRVhQUi4KCk1vbiBNYXIgMjUgMTM6MDc6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IERvbid0IGJ1aWxkIGNsZWFudXBzIGZvciBzdGF0aWMKCXZhcmlhYmxlcyBoZXJlLgoKRnJpIE1hciAyMiAxNzo1Nzo1NSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfbW9kaWZ5X2V4cHIpOiBGaXggZXJyb3IgbWVzc2FnZXMgdG8gYmUgbW9yZQoJYWNjdXJhdGUuCgkqIGNwLXRyZWUuaCAoYXNzb3BfYXNfc3RyaW5nKTogUGFyYWxsZWwgdG8gb3BfYXNfc3RyaW5nLCBidXQgZm9yCglhc3NpZ25tZW50IG9wZXJhdG9ycy4KCSogZXJyb3IuYyAoYXNzb3BfYXNfc3RyaW5nKTogTGlrZXdpc2UuICBBZGQgc3VwcG9ydCBmb3IgYCVRJyBmb3IKCWFzc2lnbm1lbnQgb3BlcmF0b3JzLgoKRnJpIE1hciAyMiAxMzo0ODoyOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ2FsbCBiYWRfc3BlY2lmaWVycyBmb3IgdHlwZWRlZnMuICBBbHNvCglnaXZlIGFuIGVycm9yIGlmIGluaXRpYWxpemVkLiAgcGVkd2FybiBhYm91dCBuZXN0ZWQgdHlwZSB3aXRoIHRoZQoJc2FtZSBuYW1lIGFzIGl0cyBlbmNsb3NpbmcgY2xhc3MuCgoJKiBwdC5jICh0c3Vic3QsIGNhc2UgVFlQRV9ERUNMKTogU2V0IERFQ0xfQ09OVEVYVC4KCgkqIHR5cGVjay5jIChyZXF1aXJlX2NvbXBsZXRlX3R5cGUpOiBCZSBzdXJlIHRvIGluc3RhbnRpYXRlIHRoZQoJTUFJTl9WQVJJQU5UIG9mIHRoZSB0eXBlLgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBJbnN0YW50aWF0ZSBwZW5kaW5nIHRlbXBsYXRlcyBiZWZvcmUKCXByb2Nlc3Npbmcgc3RhdGljIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMuCgoJKiBwdC5jIChpbnN0YW50aWF0ZV9kZWNsKTogRG9uJ3QgaW5zdGFudGlhdGUgZnVuY3Rpb25zIGF0IHRvcGxldmVsCgl1bmxlc3MgYXRfZW9mLgoKRnJpIE1hciAyMiAwOTozMDoxNyAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IElmIGVycm9yX21hcmtfbm9kZSBpcyBwYXNzZWQKCWluIGFzIGFuIGV4cHJlc3Npb24sIHF1aXQgd2hpbGUgd2UncmUgYWhlYWQuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogR2l2ZSBhbiBlcnJvciBtZXNzYWdlIGlmIGBmcmllbmQnCglpcyBjb21iaW5lZCB3aXRoIGFueSBzdG9yYWdlIGNsYXNzIHNwZWNpZmllcnMuCgpXZWQgTWFyIDIwIDE0OjUxOjU1IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHBhcnNlLnkgKG5hbWVkX2NvbXBsZXhfY2xhc3NfaGVhZF9zYW5zX2Jhc2V0eXBlKTogRG9uJ3QgY3Jhc2ggb24KCWRlZmluaXRpb24gb2Ygbm9uZXhpc3RlbnQgbmVzdGVkIHR5cGUuCgoJKiBlcnJvci5jIChkdW1wX2RlY2wsIGNhc2UgVFlQRV9ERUNMKTogRml4IGRlY2lzaW9uIGZvciB3aGV0aGVyIG9yCglub3QgdG8gc2F5ICd0eXBlZGVmJy4KCldlZCBNYXIgMjAgMDA6MTE6NDcgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgbGFuZ190eXBlKTogTWFrZSBzZWFyY2hfc2xvdCBhIHRyZWUsIG5vdCBhIGNoYXIqLgoJKiBzZWFyY2guYyAoZGZzX3dhbGssIGRmc19pbml0X3ZiYXNlX3BvaW50ZXJzLAoJZXhwYW5kX3VwY2FzdF9maXh1cHMpOiBSZW1vdmUgY2FzdCBvZiBDTEFTU1RZUEVfU0VBUkNIX1NMT1QuCgkoZGZzX2ZpbmRfdmJhc2VzKTogUmVtb3ZlIGNhc3QgZm9yIENMQVNTVFlQRV9TRUFSQ0hfU0xPVCBpbml0LgoKVHVlIE1hciAxOSAxNzo1NjowMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoYnVpbGRfdGhyb3cpOiBTdXBwb3J0IG1pbmltYWwgcGFyc2UuCgkqIHB0LmMgKHRzdWJzdF9jb3B5KTogU3VwcG9ydCBUSFJPV19FWFBSLgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IExpa2V3aXNlLgoKCSogcHQuYyAobWFuZ2xlX2NsYXNzX25hbWVfZm9yX3RlbXBsYXRlKTogQWx3YXlzIGFsbG9jYXRlCglzY3JhdGNoX2ZpcnN0b2JqLgoKVHVlIE1hciAxOSAxNjozNDozMSAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogY3Z0LmMgKGNwX2NvbnZlcnRfdG9fcG9pbnRlcik6IEdpdmUgYW4gYXBwcm9wcmlhdGUgZXJyb3IKCXdoZW4gdHJ5aW5nIHRvIGNhc3QgZnJvbSBhbiBpbmNvbXBsZXRlIHR5cGUuCgpUdWUgTWFyIDE5IDE2OjAwOjMzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX2NsYXNzX3RlbXBsYXRlKTogRG9uJ3QgYm90aGVyIHNldHRpbmcgdXAKCUNMQVNTVFlQRV9UQUdTIGV4cGxpY2l0bHksIGFzIHRoZSBuZXN0ZWQgdHlwZXMgd2lsbCBhZGQKCXRoZW1zZWx2ZXMuCgpUdWUgTWFyIDE5IDE1OjQ4OjQzIDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AYmVhdXR5LmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHNoYWRvd190YWcpOiBSZW1vdmUgb2xkIGVycm9yIGNoZWNrIGZvciB1c2FnZSBvZgoJYW4gZW51bSB3aXRob3V0IGEgcHJldmlvdXMgZGVjbGFyYXRpb24uCgkoeHJlZl90YWcpOiBBZGQgZXJyb3IgbWVzc2FnZSBhYm91dCB1c2FnZSBvZiBlbnVtcyB3aXRob3V0IGEKCXByZXZpb3VzIGRlY2xhcmF0aW9uLgoKVHVlIE1hciAxOSAwOToyMTozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IE9ubHkgZG8gbmFtZSBjb25zaXN0ZW5jeSBjaGVjayBpZiB3ZSdyZQoJcGFyc2luZy4KCgkqIHB0LmMgKHB1c2hfdGVtcGxhdGVfZGVjbCk6IERvbid0IGNyYXNoIGlmIHdlIGdldCBhIG1lbWJlciBkZWZuCgl0aGF0IGRvZXNuJ3QgbWF0Y2guCgoJKiBkZWNsLmMgKHhyZWZfdGFnX2Zyb21fdHlwZSk6IE5ldyBmdW5jdGlvbiB0byBkbyBhbiB4cmVmIHdpdGhvdXQKCWFsd2F5cyBoYXZpbmcgdG8gZmlndXJlIG91dCBjb2RlX3R5cGVfbm9kZS4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoJKiBwdC5jIChpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBpdCBmb3IgZnJpZW5kIGNsYXNzZXMuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogVXNlIGl0LgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBQdWxsIG91dCBhIHNpbmdsZSBwYXJtIGJlZm9yZQoJcGFzc2luZyBpdCB0byBidWlsZF9jX2Nhc3QuCgpUdWUgTWFyIDE5IDA5OjA3OjE1IDE5OTYgIEJvYiBNYW5zb24gIDxtYW5zb25AYmVhdXR5LmN5Z251cy5jb20+CgoJKiBleHByLmMgKGRvX2Nhc2UpOiBHaXZlIGFuIGVycm9yIG1lc3NhZ2UgaWYgYSBwb2ludGVyIGlzCglnaXZlbiBhcyBhIGNhc2UgdmFsdWUuCgpNb24gTWFyIDE4IDIxOjU3OjU0IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBEb24ndCBwdWxsIHNpbmdsZSBURU1QTEFURV9ERUNMIG91dCBvZgoJYW4gb3ZlcmxvYWQgbGlzdC4KCgkqIGxleC5jIChjb25zX3VwX2RlZmF1bHRfZnVuY3Rpb24pOiBSZWFsbHksIG5vdywgaW50ZXJmYWNlIGhhY2tlcnkKCWRvZXMgbm90IGFwcGx5IHRvIHN5bnRoZXNpemVkIG1ldGhvZHMuCgpNb24gTWFyIDE4IDE4OjIwOjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBDdG9ycyBhbmQgZHRvcnMgbm93IGhhdmUgc3BlY2lhbCBuYW1lcwoJd2l0aCByZXNwZWN0IHRvIGxvb2t1cHMuCgkqIGNsYXNzLmMgKGFkZF9tZXRob2QpOiBMaWtld2lzZS4KCShncm93X21ldGhvZCk6IExpa2V3aXNlLgoJKGZpbmlzaF9zdHJ1Y3RfbWV0aG9kcyk6IExpa2V3aXNlLgoJKHdhcm5faGlkZGVuKTogTGlrZXdpc2UuCgkoZmluaXNoX3N0cnVjdF8xKTogTGlrZXdpc2UuCgkqIGN2dC5jIChjb252ZXJ0X3RvX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKGNvbnZlcnRfdG9fYWdncik6IExpa2V3aXNlLgoJKGNwX2NvbnZlcnQpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoY2hlY2tfY2xhc3Nmbik6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9kZWZhdWx0X2luaXQpOiBMaWtld2lzZS4KCShleHBhbmRfYWdncl9pbml0XzEpOiBMaWtld2lzZS4KCShidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfbmV3KTogTGlrZXdpc2UuCgkoYnVpbGRfZGVsZXRlKTogTGlrZXdpc2UuCgkqIGxleC5jIChkb19pbmxpbmVfZnVuY3Rpb25faGFpcik6IExpa2V3aXNlLgoJKiBzZWFyY2guYyAobG9va3VwX2ZpZWxkXzEpOiBMaWtld2lzZS4KCShsb29rdXBfZm5maWVsZHNfaGVyZSk6IExpa2V3aXNlLgoJKGxvb2t1cF9maWVsZCk6IExpa2V3aXNlLgoJKGxvb2t1cF9mbmZpZWxkcyk6IExpa2V3aXNlLgoJKGdldF92aXJ0dWFsX2Rlc3RydWN0b3IpOiBMaWtld2lzZS4KCShkZnNfZGVidWdfbWFyayk6IExpa2V3aXNlLgoJKGRmc19wdXNoZGVjbHMpOiBMaWtld2lzZS4KCShkZnNfY29tcHJlc3NfZGVjbHMpOiBMaWtld2lzZS4KCSogdHJlZS5jIChsYXlvdXRfYmFzZXR5cGVzKTogTGlrZXdpc2UuCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogTGlrZXdpc2UuCgkoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBMaWtld2lzZS4KCShjb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKENMQVNTVFlQRV9GSVJTVF9DT05WRVJTSU9OKTogTGlrZXdpc2UuCgkoQ1RPUl9OQU1FKTogTmV3LgoJKERUT1JfTkFNRSk6IE5ldy4KCSogZGVjbC5jIChjdG9yX2lkZW50aWZpZXIpOiBOZXcuCgkoZHRvcl9pZGVudGlmaWVyKTogTmV3LgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogU2V0IHRoZW0uCgpNb24gTWFyIDE4IDE4OjAwOjUxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGZpZWxkcyB3aG9zZQoJY29udGV4dCBoYXMgbm8gdHlwZSBuYW1lLCBsaWtlIHBvaW50ZXIgdG8gbWVtYmVyIGZ1bmN0aW9ucy4KCk1vbiBNYXIgMTggMTM6MTk6MDMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEhhbmRsZSB0eXBlZGVmIHdpdGhvdXQgZGVjbGFyYXRvci4KCgkqIHB0LmMgKHRzdWJzdCk6IEhhbmRsZSBTQ09QRV9SRUYgaW4gZGVjbGFyYXRvci4KCgkqIHBhcnNlLnkgKGJhZF9wYXJtKTogQ2F0Y2ggYW5vdGhlciBjYXNlIG9mIG1pc3NpbmcgYHR5cGVuYW1lJy4KCgkqIGxleC5jICh5eXByaW50KTogSGFuZGxlIFRZUEVfREVDTHMuCgoJKiBkZWNsLmMgKHN0YXJ0X2Z1bmN0aW9uKTogRG9uJ3QgdHJ5IHRvIGJlIGNsZXZlci4KCgkqIGxleC5jOiBMb3NlIGNvbXBpbGVyX2Vycm9yX3dpdGhfZGVjbC4KCSogdHlwZWNrMi5jOiBMb3NlIGVycm9yX3dpdGhfYWdncl90eXBlLgoJKGluY29tcGxldGVfdHlwZV9lcnJvcik6IFVzZSBjcF8qIGluc3RlYWQgb2Ygb2xkIGZ1bmN0aW9ucy4KCShyZWFkb25seV9lcnJvcik6IExpa2V3aXNlLgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBMaWtld2lzZS4KCSogc2VhcmNoLmMgKGxvb2t1cF9uZXN0ZWRfZmllbGQpOiBMaWtld2lzZS4KCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBMaWtld2lzZS4KCSogZGVjbC5jIChncm9rcGFybXMpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oOiBVcGRhdGUuCgoJKiB0cmVlLmMgKG1pbl90cmVlX2NvbnMpOiBDYWxsIGNvcHlfdG9fcGVybWFuZW50IGZvciB0aGUgcHVycG9zZQoJYW5kIHZhbHVlLgoKTW9uIE1hciAxOCAxMToyNTo1MiAxOTk2ICBCb2IgTWFuc29uICA8bWFuc29uQGJlYXV0eS5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKGJ1aWxkX29wZm5jYWxsKTogV2hlbiBkZWxldGluZyBhIHBvaW50ZXIgdG8gYW4KCWFycmF5LCBidWlsZCBhIG5ldyBwb2ludGVyIHRvIHRoZSB0cmVlIHBhc3QgYW55IEFSUkFZX1RZUEUKCW5vZGVzLgoKTW9uIE1hciAxOCAxMDoxMTo0NiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF9uYW1lX3JlYWwpOiBJbml0aWFsaXplIGxvY2FsIHZhciBUWVBFIHRvIE5VTExfVFJFRS4KCkZyaSBNYXIgMTUgMTE6MDM6NTcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IE9ubHkgY2FsbCBpbXBvcnRfZXhwb3J0X2RlY2wgaWYgYXRfZW9mCglhbmQgISBERUNMX0lOTElORS4KCgkqIGRlY2wuYyAoZmluaXNoX2Z1bmN0aW9uKTogRG9uJ3Qgc2V0IG5lc3RlZCBiYXNlZCBvbgoJaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQuCgkqIHBhcnNlLnkgKGZ1bmN0aW9uX3RyeV9ibG9jayk6IENoZWNrIGZvciBuZXN0ZWQgZnVuY3Rpb24uCgkocGVuZGluZ19pbmxpbmVzKTogTGlrZXdpc2UuCgoJKiBkZWNsMi5jIChidWlsZF9leHByX2Zyb21fdHJlZSk6IElmIGEgdW5hcnkgb3AgYWxyZWFkeSBoYXMgYQoJdHlwZSwganVzdCByZXR1cm4gaXQuCgoJKiBkZWNsMi5jIChmaW5pc2hfcHJldnRhYmxlX3ZhcmRlY2wpOiBVc2UgQURKVVNUX1ZUQUJMRV9MSU5LQUdFLgoKCSogZGVjbDIuYyAod2Fsa192dGFibGVzKTogdmFyZGVjbF9mbiByZXR1cm5zIGludDsgcmV0dXJuIDEgaWYgaXQgZG9lcy4KCShmaW5pc2hfZmlsZSk6IENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Ygd2Fsa192dGFibGVzLgoJKGZpbmlzaF9wcmV2dGFibGVfdmFyZGVjbCk6IFJldHVybiBpbnQuCgkoZmluaXNoX3Z0YWJsZV92YXJkZWNsKTogTGlrZXdpc2UuCgkocHJ1bmVfdnRhYmxlX3ZhcmRlY2wpOiBMaWtld2lzZS4KCSogbGV4LmMgKHNldF92YXJkZWNsX2ludGVyZmFjZV9pbmZvKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaDogQWRqdXN0IHJldHVybiB0eXBlcy4KCgkqIGNsYXNzLmMgKGRlbGV0ZV9kdXBsaWNhdGVfZmllbGRzXzEpOiBEb24ndCBjb21wbGFpbiBhYm91dAoJZHVwbGljYXRlIG5lc3RlZCB0eXBlcyBpZiB0aGV5J3JlIHRoZSBzYW1lIHR5cGUuCgkoZmluaXNoX3N0cnVjdCk6IFJlbW92ZSBjaGVjayBmb3IgZHVwbGljYXRlLgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBEb24ndCBjaGVjayBmb3IgdHlwZWRlZiBvZiBhbm9ueW1vdXMgdHlwZS4KClRodSBNYXIgMTQgMTA6MDA6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oOiBMb3NlIFNJR05BVFVSRV9HUk9LS0lOR19UWVBFREVGLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IExvc2Ugc3BlY2lhbCBoYW5kbGluZyBvZiBjbGFzcy1sZXZlbAoJdHlwZWRlZi4gIExvc2UgU0lHTkFUVVJFX0dST0tLSU5HX1RZUEVERUYuICBTZXQKCVNJR05BVFVSRV9IQVNfT1BBUVVFX1RZUEVERUNMUyBsYXRlci4KCgkqIGN2dC5jIChjb252ZXJ0X3BvaW50ZXJfdG9fcmVhbCk6IFJldGFpbiBjdi1xdWFscyBpbiBjb252ZXJzaW9uLgoKCSogcHQuYyAodHN1YnN0X2NvcHkpOiBTdHJpcCBjdi1xdWFscyBmcm9tIGRlc3RydWN0b3IgbmFtZSB0eXBlcy4KCgkqIHNlYXJjaC5jIChjb21wdXRlX2FjY2Vzcyk6IEZpeCBoYW5kbGluZyBvZiBhbm9ueW1vdXMgdW5pb24KCW1lbWJlcnMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IFByb3BhZ2F0ZSBUUkVFX3tQUklWQVRFLFBST1RFQ1RFRH0KCWZyb20gYW5vbnltb3VzIHVuaW9ucyB0byB0aGVpciBtZW1iZXJzLgoKCSogdHlwZWNrLmMgKGJ1aWxkX3hfZnVuY3Rpb25fY2FsbCk6IEZvciBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucywKCWhhbmQgb2ZmIHRvIGJ1aWxkX21lbWJlcl9jYWxsLgoKV2VkIE1hciAxMyAxNDowMzozNCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEhhbmRsZSBPRkZTRVRfUkVGcy4KCgkqIGluaXQuYyAoZXhwYW5kX3ZlY19pbml0KTogRml4IGluaXQgPT0gMCBjYXNlLgoKVHVlIE1hciAxMiAxNDozNjowMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX25ldyk6IHBlZHdhcm4gYWJvdXQgaW5pdCBhbmQgYXJyYXkgbmV3LgoJKGV4cGFuZF92ZWNfaW5pdCk6IEhhbmRsZSBsaXN0cywgdXNlIGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfZm9yX2luaXRpYWxpemF0aW9uKTogUGFzcyBMT09LVVBfTk9fQ09OVkVSU0lPTgoJd2hlbiBjb252ZXJ0aW5nIHRvIGFuIGFnZ3JlZ2F0ZSB0eXBlLgoJKiBjdnQuYyAoY3BfY29udmVydCk6IFBhc3MgaXQgdGhyb3VnaC4KCgkqIHR5cGVjay5jIChidWlsZF9jb25kaXRpb25hbF9leHByKTogSGFuZGxlIHVzZXItZGVmaW5lZAoJY29udmVyc2lvbnMgdG8gc2xpZ2h0bHkgZGlmZmVyZW50IHR5cGVzLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEZvcmNlIGFuIGFycmF5IHR5cGUgaW4gYSBwYXJtIHRvIGJlCglwZXJtYW5lbnQuCgoJKiBkZWNsMi5jIChkb191c2luZ19kaXJlY3RpdmUpOiBTb3JyeS4KCShkb19uYW1lc3BhY2VfYWxpYXMpOiBMaWtld2lzZS4KCSogbGV4LmMgKHJlYWxfeXlsZXgpOiBXYXJuIGFib3V0IHVzaW5nIHRoZSBgbmFtZXNwYWNlJyBrZXl3b3JkLgoKU3VuIE1hciAxMCAyMjoyNjowOSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChkYXRhZGVmKTogTW92ZSBjYWxsIHRvIG5vdGVfbGlzdF9nb3Rfc2VtaWNvbG9uIHVwLgoKRnJpIE1hciAgOCAxMTo0NzoyNiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHVuc2F2ZV9leHByKTogRG9uJ3QgdW5zYXZlLCBVTlNBVkVfRVhQUnMuCgpGcmkgTWFyICA4IDExOjI5OjA2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBUaGUgZXhjZXB0aW9uIHJlZ2lvbnMgaGF2ZSB0byBiZQoJbmVzdGVkLCBub3Qgb3ZlcmxhcHBpbmcuICBXZSBzdGFydCB0aGUgZXhjZXB0aW9uIHJlZ2lvbiBmb3IgYQoJZGVjbCwgYWZ0ZXIgaXQgaGFzIGJlZW4gZnVsbHkgYnVpbHQsIGFuZCBhbGwgdGVtcG9yYXJpZXMgZm9yIGl0CgloYXZlIGJlZW4gY2xlYW5lZCB1cC4KClRodSBNYXIgIDcgMTc6NDY6MDYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHJlZS5jICh2ZWNfYmluZm9fbWVtYmVyKTogRG9uJ3QgY29yZSBkdW1wIGlmIHdlIGhhdmUgbm8gYmFzZXMuCgpUaHUgTWFyICA3IDE0OjExOjQ5IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmOiBBZGQgUkVUVVJOX0lOSVQuCgkqIHB0LmMgKGluc3RhbnRpYXRlX2RlY2wpOiBIYW5kbGUgUkVUVVJOX0lOSVQuCgkqIGRlY2wuYyAoc3RvcmVfcmV0dXJuX2luaXQpOiBIYW5kbGUgbWluaW1hbF9wYXJzZV9tb2RlLgoKCSogdHJlZS5jIChjcF9idWlsZF90eXBlX3ZhcmlhbnQpOiBKdXN0IHJldHVybiBhbiBlcnJvcl9tYXJrX25vZGUuCgkqIGRlY2wuYyAobWFrZV90eXBlbmFtZV90eXBlKTogRG9uJ3QgdHJ5IHRvIGdldCB0aGUgZmlsZSBhbmQgbGluZQoJb2YgYW4gaWRlbnRpZmllci4KCSogdHlwZWNrLmMgKGNvbXB0eXBlcyk6IEhhbmRsZSBUWVBFTkFNRV9UWVBFLgoKV2VkIE1hciAgNiAxODo0Nzo1MCAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBNYWtlIHN1cmUgd2UgY2xlYXIgb3V0IGFuZCByZXN0b3JlIG9sZCBsb2NhbAoJbm9uLVZBUl9ERUNMIHZhbHVlcyBieSBkZWZhdWx0IHdoZW4gdGhleSBnbyBvdXQgb2Ygc2NvcGUuCgpXZWQgTWFyICA2IDA5OjU3OjM2IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChidWlsZF9vdmVybG9hZF92YWx1ZSk6IFVzZSBERUNMX0FTU0VNQkxFUl9OQU1FIGluCglyZWZlcnJpbmcgdG8gYWRkcmVzc2VzIG9mIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zLgoKCSogZXJyb3IuYyAoZHVtcF9leHByKTogU3VwcG9ydCBTSVpFT0ZfRVhQUi4KCgkqIGluaXQuYyAoZG9fZnJpZW5kKTogVXNlIHRoZSByZXR1cm4gdmFsdWUgb2YgY2hlY2tfY2xhc3Nmbi4KCgkqIHR5cGVjay5jIChjb252ZXJ0X2FyZ3VtZW50cyk6IENhbGwgY29tcGxldGVfdHlwZS4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBBZnRlciBnaXZpbmcgYW4gZXJyb3IsIHNldCB2YWx1ZSB0bwoJZXJyb3JfbWFya19ub2RlLgoKVHVlIE1hciAgNSAxNjowMDoxNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKGhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0KTogS2x1ZGdlIGFyb3VuZCBERUNMX0NPTlRFWFQKCWxvc3NhZ2UgZm9yIGxvY2FsIGNsYXNzZXMuCgkqIGNwLXRyZWUuaDogRGVjbGFyZSBpdC4KCSogZGVjbC5jIChsb29rdXBfbmFtZV9yZWFsKTogRXZpbCwgcGFpbmZ1bCBoYWNrIGZvciBsb2NhbCBjbGFzc2VzLgoJKGdyb2tmbmRlY2wpOiBTZXQgREVDTF9DTEFTU19DT05URVhUIGFuZCBERUNMX05PX1NUQVRJQ19DSEFJTiBoZXJlLgoJVXNlIGhhY2tfZGVjbF9mdW5jdGlvbl9jb250ZXh0LgoJKGdyb2tkZWNsYXJhdG9yKTogRG9uJ3Qgc2V0IERFQ0xfTk9fU1RBVElDX0NIQUlOIGhlcmUuCgkoc3RhcnRfZnVuY3Rpb24pOiBVc2UgaGFja19kZWNsX2Z1bmN0aW9uX2NvbnRleHQuCgkoZmluaXNoX2Z1bmN0aW9uKTogTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IExpa2V3aXNlLgoJKiBsZXguYyAocHJvY2Vzc19uZXh0X2lubGluZSk6IExpa2V3aXNlLgoJKGRvX3BlbmRpbmdfaW5saW5lcyk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IFVuc2V0IERFQ0xfU1RBVElDX0ZVTkNUSU9OX1Agd2hlbiB3ZSdyZQoJZG9uZSB3aXRoIGl0LgoKTW9uIE1hciAgNCAyMjozODozOSAxOTk2ICBHZXJhbGQgQmF1bWdhcnRuZXIgIDxnYkBhbGV4YW5kZXIuY3MucHVyZHVlLmVkdT4KCgkqIHNpZy5jIChidWlsZF9zaWduYXR1cmVfcG9pbnRlcl9vcl9yZWZlcmVuY2VfdHlwZSk6IEFsaWduCglzaWduYXR1cmUgcG9pbnRlcnMvcmVmZXJlbmNlcyBvbiA4LWJ5dGUgYm91bmRhcmllcyBzbyB0aGV5IGNhbiBiZQoJZ3JhYmJlZCAyIHdvcmRzIGF0IGEgdGltZSBvbiBhIFNwYXJjLgoKVHVlIE1hciAgNSAxMDoyMTowMSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogUmVxdWlyaW5nIGEgc3RhdGljIGNoYWluIGlzIG5vdyBhCgloYXJkIGVycm9yLgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogU2V0IERFQ0xfTk9fU1RBVElDX0NIQUlOIG9uIG5lc3RlZAoJZnVuY3Rpb25zLgoKTW9uIE1hciAgNCAyMDowMzozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbml0LmMgKGJ1aWxkX29mZnNldF9yZWYpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgoJKiBkZWNsLmMgKHBvcF9mcm9tX3RvcF9sZXZlbCk6IEFsd2F5cyBwb3AgcHJldmlvdXNfY2xhc3NfdHlwZS4KCgkqIHBhcnNlLnk6IEhhbmRsZSBtdWx0aXBsZSBkZWNscyBpbiBhIGZvci1pbml0LXN0YXRlbWVudC4KCSogcHQuYyAodHN1YnN0X2V4cHIpOiBMaWtld2lzZS4KCgkqIHB0LmMgKHRzdWJzdCk6IFVzZSB0c3Vic3RfZXhwciBmb3IgdGhlIHNlY29uZCBvcGVyYW5kIG9mIGFuCglBUlJBWV9SRUYuCgoJKiBkZWNsLmMgKG1heWJlX3B1c2hfdG9fdG9wX2xldmVsKTogRG9uJ3Qgc2F2ZSBwcmV2aW91c19jbGFzc190eXBlLgoJKHBvcGxldmVsX2NsYXNzKTogU2V0IGl0IGhlcmUuCgkocG9wX2Zyb21fdG9wX2xldmVsKTogUG9wIGl0IGhlcmUgaWYgd2UncmUgcmV0dXJuaW5nIHRvIGNsYXNzIHNjb3BlLgoJKiBjbGFzcy5jIChwdXNoY2xhc3MpOiBEb24ndCBzZXQgaXQgaGVyZS4KCgkqIGRlY2wuYyAobWF5YmVfcHVzaF90b190b3BfbGV2ZWwpOiBTYXZlIGN1cnJlbnRfdGVtcGxhdGVfcGFybXMsCglhbmQgY2xlYXIgaXQgaWYgIXBzZXVkby4KCShwb3BfZnJvbV90b3BfbGV2ZWwpOiBSZXN0b3JlIGl0LgoKCSogZGVjbDIuYyAoZmluaXNoX2ZpbGUpOiBQdXNoIHRoZSBkdW1teSBlYWNoIHRpbWUgd2Ugd2FsayB0aGUgbGlzdAoJb2YgdnRhYmxlcy4KCgkqIGVycm9yLmMgKGR1bXBfZXhwcik6IFN1cHBvcnQgTE9PS1VQX0VYUFIgYW5kIGFjdHVhbGx5IGRvCglzb21ldGhpbmcgZm9yIENBU1RfRVhQUi4KCk1vbiBGZWIgMTkgMTQ6NDk6MTggMTk5NiAgUnVzdHkgUnVzc2VsbCAgPHJ1c3R5QGFkZWxhaWRlLm1hcHRlay5jb20uYXU+CgoJKiBjdnQuYyAoY3BfY29udmVydCk6IFdhcm4gYWJvdXQgaW1wbGljaXQgY29udmVyc2lvbiBvZiB0aGUKCWFkZHJlc3Mgb2YgYSBmdW5jdGlvbiB0byBib29sLCBhcyBpdCBpcyBhbHdheXMgdHJ1ZS4KCkZyaSBGZWIgMjMgMjM6MDY6MDEgMTk5NiAgUnVzdHkgUnVzc2VsbCAgPHJ1c3R5QGFkZWxhaWRlLm1hcHRlay5jb20uYXU+CgoJKiB0eXBlY2suYyAoY19leHBhbmRfcmV0dXJuKTogRml4IHdhcm5pbmcgZm9yIGxvY2FsIGV4dGVybnMgcmV0dXJuZWQuCgpNb24gTWFyICA0IDE1OjAzOjExIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobWFwY2FyKTogUHJvcGFnYXRlIGNvbnN0IGFuZCB2b2xhdGlsZSBwcm9wZXJseS4KCgkqIHR5cGVjay5jIChjb21wbGV0ZV90eXBlKTogQmUgc3VyZSB0byBpbnN0YW50aWF0ZSB0aGUKCU1BSU5fVkFSSUFOVCBvZiB0aGUgdHlwZS4KCgkqIG1ldGhvZC5jIChzeW50aGVzaXplX21ldGhvZCk6IENsYXNzIGludGVyZmFjZSBoYWNrZXJ5IGRvZXMgbm90CglhcHBseSB0byBzeW50aGVzaXplZCBtZXRob2RzLgoKTW9uIE1hciAgNCAxNDowNToyMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjb21wX3RlbXBsYXRlX2FyZ3MpOiBVc2UgY29tcHR5cGVzIHJhdGhlciB0aGFuIGp1c3QKCWNoZWNraW5nIGZvciBURU1QTEFURV9UWVBFX1BBUk0gZXF1aXZhbGVuY2UuCgoJKiB0eXBlY2suYyAoYnVpbGRfeF9mdW5jdGlvbl9jYWxsKTogQ2FsbCBjb21wbGV0ZV90eXBlIGJlZm9yZQoJY2hlY2tpbmcgVFlQRV9PVkVSTE9BRFNfQ0FMTF9FWFBSLgoKTW9uIE1hciAgNCAxODo0ODozMCAxOTk2ICBNYW5mcmVkIEhvbGxzdGVpbiAgIDxtYW5mcmVkQGx0cy5zZWwuYWxjYXRlbC5kZT4KCgkqIGcrKy5jIChtYWluKTogQ2hlY2sgYWxzbyBmb3IgbmV3IGRlZmluZSBBTFRfTElCTS4KCkZyaSBNYXIgIDEgMTM6MDk6MzMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBJZiB3ZSBkb24ndCBoYXZlIGEgcGF0dGVybgoJeWV0LCB0aGF0J3MgT0suCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogSWYgd2Ugc2VlIGEgbG9jYWwgY2xhc3MsIGJhaWwuCgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBNYWtlIHN1cmUgdGhlcmUncyBhIHR5cGUgYmVmb3JlCgljaGVja2luZyBpdHMgY29kZS4KCgkqIHB0LmMgKGRvX2Z1bmN0aW9uX2luc3RhbnRpYXRpb24pOiBBdm9pZCBjcmFzaGluZyBvbiBpbnZhbGlkIGRlY2xzLgoJKHB1c2hfdGVtcGxhdGVfZGVjbCk6IExpa2V3aXNlLgoKCSogcGFyc2UueSAobmFtZWRfY2xhc3NfaGVhZCk6IFNldAoJQ0xBU1NUWVBFX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OIGhlcmUgaWYgd2UgaGF2ZSBiYXNldHlwZXMuCgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogRGlhZ25vc2UgcmVkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZQoJdHlwZS1wYXJhbWV0ZXIgbmFtZS4KCgkqIGVycm9yLmMgKGR1bXBfdHlwZSk6IEhhbmRsZSBhbm9ueW1vdXMgdGVtcGxhdGUgdHlwZSBwYXJtcy4KCgkqIHB0LmMgKGluc3RhbnRpYXRlX3RlbXBsYXRlKTogVXNlIFRZUEVfTUFJTl9ERUNMIGluc3RlYWQgb2YKCVRZUEVfU1RVQl9ERUNMLgoJKGNvZXJjZV90ZW1wbGF0ZV9wYXJtcyk6IExpa2V3aXNlLgoKVGh1IEZlYiAyOSAxNjoyNjowMSAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChpbnN0YW50aWF0ZV90eXBlLCBjYXNlIHtBUlJBWSxJTkRJUkVDVH1fUkVGLAoJY2FzZSBBRERSX0VYUFIpOiBEb24ndCBtb2RpZnkgcmhzIGlmIGEgc3ViaW5zdGFudGlhdGlvbiBmYWlscy4KClRodSBGZWIgMjkgMDg6MjA6MjUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBUYWtlIHRoZSBNQUlOX1ZBUklBTlQgb2YgdGhlIHR5cGUKCWJlZm9yZSB0cnlpbmcgdG8gZ2V0IGl0cyBTVFVCX0RFQ0wuCgkoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogTGlrZXdpc2UuCgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV90eXBlX3Bhcm0pOiBJZiB0aGV5IGRpZG4ndCB1c2UgJ2NsYXNzJywKCXByZXRlbmQgdGhleSBkaWQgYWZ0ZXIgZ2l2aW5nIGFuIGVycm9yLgoKCSogcHQuYyAoY29lcmNlX3RlbXBsYXRlX3Bhcm1zKTogRGlhZ25vc2UgdXNlIG9mIGxvY2FsIGNsYXNzLgoKCSogZGVjbC5jIChncm9rX3JlZmVyZW5jZV9pbml0KTogVXNlIGluc3RhbnRpYXRlX3R5cGUuCgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBIYW5kbGUgVEVNUExBVEVfREVDTHMuCgoJKiBwYXJzZS55IChuYW1lZF9jbGFzc19oZWFkKTogRGlhZ25vc2UgbWlzbWF0Y2hpbmcgdHlwZXMgYW5kIHRhZ3MuCgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogVHlwZSBkZWNscyBhbmQgY2xhc3MgdGVtcGxhdGVzIGNsYXNoIHdpdGgKCWFydGlmaWNpYWwgdHlwZSBkZWNscywgbm90IGhpZGUgdGhlbS4KCgkqIGRlY2wuYyAocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlKTogRGlhZ25vc2UgcmVkZWZpbml0aW9uIG9mCgl0ZW1wbGF0ZXMgcHJvcGVybHkuCgkoZHVwbGljYXRlX2RlY2xzKTogRGlhZ25vc2UgZGlzYWxsb3dlZCBvdmVybG9hZHMgZm9yIHRlbXBsYXRlCglmdW5jdGlvbnMsIHRvby4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IENhbGwgY29tcGxldGVfdHlwZSBiZWZvcmUgY2hlY2tpbmcgZm9yIGEKCWRlc3RydWN0b3IuCgoJKiBwdC5jICh0c3Vic3QpOiBVc2UgdHN1YnN0X2V4cHIgb24gdGhlIGVsdHMgb2YgYSBWRUMuCgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogQSBURU1QTEFURV9UWVBFX1BBUk0gaXMgYSBtYXRjaC4KCldlZCBGZWIgMjggMDk6Mjg6NDQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rX29wX3Byb3BlcnRpZXMpOiBEb24ndCBjaGVjayBmb3Igb3BlcmF0b3IrKyhpbnQpIGluCglhIHRlbXBsYXRlLgoKCSogdHJlZS5jIChwZXJtX21hbmlwKTogUmV0dXJuIGEgY29weSBvZiB2YXJpYWJsZSBhbmQgZnVuY3Rpb24KCWRlY2xzIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4KCgkqIHRyZWUuZGVmOiBDaGFuZ2Ugc29tZSBvZiB0aGUgbWluIHRyZWUgY29kZXMgdG8gdHlwZSAiMSIuCgkqIHB0LmMgKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBIYW5kbGUgJ2UncywgcmV0dXJuIDEgZm9yIExPT0tVUF9FWFBScy4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2ludCk6IEVtaXQgc29tZXRoaW5nIGFyYml0cmFyeSBmb3IKCWFueXRoaW5nIGJ1dCBhbiBJTlRFR0VSX0NTVCBpZiB3ZSdyZSBpbiBhIHRlbXBsYXRlLgoKCSogZGVjbC5jIChjcF9maW5pc2hfZGVjbCk6IENhbGwgY29tcGxldGVfdHlwZSBiZWZvcmUgZGVjaWRpbmcKCXdoZXRoZXIgb3Igbm90IHRvIGxheSBvdXQgdGhlIGRlY2wuCgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IENoZWNrIGZvciBERUNMX0lOSVRJQUwgYmVmb3JlIHVzaW5nIGl0LgoKVHVlIEZlYiAyNyAxNjozNTozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2syLmMgKGJ1aWxkX3hfYXJyb3cpOiBDYWxsIGNvbXBsZXRlX3R5cGUuCgoJKiBwdC5jIChhZGRfcGVuZGluZ190ZW1wbGF0ZSk6IEJyb2tlbiBvdXQuCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogSWYgLWZleHRlcm5hbC10ZW1wbGF0ZXMsIGNhbGwgaXQgZm9yIGFsbAoJdGhlIG1ldGhvZHMgb2YgaW1wbGVtZW50ZWQgdHlwZXMuCgkoaW5zdGFudGlhdGVfY2xhc3NfdGVtcGxhdGUpOiBJbnN0ZWFkIG9mIGluc3RhbnRpYXRpbmcgdGhlbSBoZXJlLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBIYW5kbGUgLWZleHRlcm5hbC10ZW1wbGF0ZXMgZWFybGllci4KClR1ZSBGZWIgMjcgMTU6NTE6MzIgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogc2VhcmNoLmMsIGxleC5jLCBkZWNsLmMsIGNsYXNzLmMsIGNwLXRyZWUuaDogRG9uJ3Qgd3JhcCB0aGUKCW1lbW9pemVkIGxvb2t1cCBzdHVmZiBpbnNpZGUgR0FUSEVSX1NUQVRJU1RJQ1MuCgpUdWUgRmViIDI3IDEwOjM4OjA4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6IENvbXBsYWluIGFib3V0IGFycmF5IG9mIGluY29tcGxldGUgdHlwZQoJaGVyZS4KCShncm9rZGVjbGFyYXRvcik6IE5vdCBoZXJlLgoKCSogcGFyc2UueSAodGVtcGxhdGVfcGFybSk6IEV4cGFuZCBmdWxsX3Bhcm0gaW5saW5lIHNvIHdlIGNhbiBzZXQKCXRoZSBydWxlJ3MgcHJlY2VkZW5jZS4KCgkqIHB0LmMgKHRzdWJzdF9leHByKTogSWYgd2UncmUgaW4gYSB0ZW1wbGF0ZSwganVzdCBkbyB0c3Vic3RfY29weS4KCSh0c3Vic3QpOiB0c3Vic3RfZXhwciB0aGUgREVDTF9JTklUSUFMIG9mIEZJRUxEX0RFQ0xzLgoJKiBkZWNsMi5jIChncm9rYml0ZmllbGQpOiBEb24ndCBjaGVjayBmb3IgaW50ZWdlciBjb25zdGFudCBoZXJlLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBDaGVjayBoZXJlLgoKCSogZGVjbC5jIChkZWZpbmVfbGFiZWwpOiBNYWtlIHRoZSBtaW4gZGVjbCBnbyBvbiBwZXJtYW5lbnRfb2JzdGFjay4KCgkqIHB0LmMgKHVuaWZ5KTogRG9uJ3QgaGFuZGxlIENPTlNUX0RFQ0xzLgoJKHVzZXNfdGVtcGxhdGVfcGFybXMpOiBEb24ndCBjaGVjayBERUNMX0lOSVRJQUwgb24gYSBDT05TVF9ERUNMLgoJKHRzdWJzdF9jb3B5KTogTGlrZXdpc2UuCgoJKiBsZXguYyAoZG9faWRlbnRpZmllcik6IERvIHB1bGwgdGhlIERFQ0xfSU5JVElBTCBvdXQgb2YgYQoJQ09OU1RfREVDTCBmb3IgYSB0ZW1wbGF0ZSBwYXJtLgoKTW9uIEZlYiAyNiAxMjo0ODoxOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQ29tcGxhaW4gYWJvdXQgYXJyYXkgb2YgaW5jb21wbGV0ZSB0eXBlCgloZXJlLgoJKHN0YXJ0X2RlY2xfMSk6IE5vdCBoZXJlLgoKCSogcHQuYyAodHN1YnN0KTogSGFuZGxlIHBvaW50ZXItdG8tZnVuY3Rpb24gZGVjbGFyYXRvcnMuCgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogSWYgcGVkYW50aWMsIGRpYWdub3NlIGxvY2FsIGNsYXNzCgltZXRob2RzIHRoYXQgcmVxdWlyZSBhIHN0YXRpYyBjaGFpbi4KCgkqIGRlY2wuYyAoZ3Jva19vcF9wcm9wZXJ0aWVzKTogTm8gbG9uZ2VyIHN0YXRpYy4KCSogY3AtdHJlZS5oOiBEZWNsYXJlIGl0LgoJKiBwdC5jICh0c3Vic3QpOiBDYWxsIGl0IGZvciBvcGVyYXRvcnMuCglVc2UgdHN1YnN0X2NvcHkgZm9yIFRSRUVfVkVDcy4KCgkqIHBhcnNlLnkgKHRlbXBsYXRlX2FyZyk6IFRoZSBleHByIGhhcyBwcmVjZWRlbmNlIGxpa2UgJz4nLgoKRnJpIEZlYiAyMyAxNDo1MTo1MiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChjb2VyY2VfdGVtcGxhdGVfcGFybXMpOiBEb24ndCBjb2VyY2UgYW4gZXhwcmVzc2lvbiB1c2luZwoJdGVtcGxhdGUgcGFybXMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IEFsc28gY2hlY2sgREVDTF9JTklUSUFMIGluIENPTlNUX0RFQ0xzLgoJKHRzdWJzdCk6IERvbid0IHVzZSBidWlsZF9pbmRleF8yX3R5cGUgaWYgdGhlIG1heF92YWx1ZSB1c2VzIHRlbXBsYXRlCglwYXJtcy4KCSogbWV0aG9kLmMgKGJ1aWxkX292ZXJsb2FkX2ludCk6IEVtaXQgc29tZXRoaW5nIGFyYml0cmFyeSBmb3IgYW4KCWV4cHJlc3Npb24gdXNpbmcgdGVtcGxhdGUgcGFybXMuCgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9jbG9zZV9icmFja2V0KTogTmV3IG5vbi10ZXJtaW5hbCB0byBjYXRjaCB1c2UKCW9mICc+PicgaW5zdGVhZCBvZiAnPiA+JyBpbiB0ZW1wbGF0ZSBjbGFzcyBuYW1lcy4KCSh0ZW1wbGF0ZV90eXBlKTogVXNlIGl0LgoJKiBNYWtlZmlsZS5pbiAoQ09ORkxJQ1RTKTogQ2F1c2VzIG9uZSBtb3JlIHIvciBjb25mbGljdC4KCgkqIHRyZWUuZGVmOiBBZGQgQ0FTVF9FWFBSLgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IFVzZSBDQVNUX0VYUFIgaW5zdGVhZCBvZgoJQ09OVkVSVF9FWFBSIGZvciBtaW5pbWFsX3BhcnNlX21vZGUuCgkqIHR5cGVjay5jIChidWlsZF9jX2Nhc3QpOiBMaWtld2lzZS4KCSogcHQuYyAodHN1YnN0X2NvcHkpOiBMaWtld2lzZS4KCSogZGVjbDIuYyAoYnVpbGRfZXhwcl9mcm9tX3RyZWUpOiBMaWtld2lzZS4KCSogZXJyb3IuYyAoZHVtcF9leHByKTogTGlrZXdpc2UuCgpGcmkgRmViIDIzIDEwOjM2OjQ2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChTZXRUZXJtaW5hdGUsIFNldFVuZXhwZWN0ZWQpOiBQdXQgYmFjayBnbG9iYWwgdmFycy4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogUHV0IGJhY2sgZGVjbC9pbml0IG9mCglzZXRfdW5leHBlY3RlZF9mbmRlY2wgYW5kIHNldF90ZXJtaW5hdGVfZm5kZWNsLCBuZWVkZWQgdG8gZ2V0IHRoZQoJZm5zIGZyb20gbGlic3RkYysrLgoKCSogZGVjbC5jIChzdHJ1Y3QgYmluZGluZ19sZXZlbCk6IERlbGV0ZSBBQ0NFUFRfQU5ZIGJpdGZpZWxkLgoJKGRlY2xhcmVfdW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbCwgdW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbF9wKToKCURlbGV0ZSB1bnVzZWQgZm5zLgoJKiBjcC10cmVlLmggKGRlY2xhcmVfdW5pbnN0YW50aWF0ZWRfdHlwZV9sZXZlbCwKCXVuaW5zdGFudGlhdGVkX3R5cGVfbGV2ZWxfcCk6IERlbGV0ZSBwcm90b3R5cGVzLgoKVGh1IEZlYiAyMiAxOTozNjoxNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jICh0c3Vic3RfZXhwcik6IEFkZCBkZWZhdWx0IHJldHVybi4KClRodSBGZWIgMjIgMTY6NDc6MjQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXJyb3IuYyAoZm5kZWNsX2FzX3N0cmluZyk6IERlbGV0ZSB1bnVzZWQgYXJnIENOQU1FLgoJKiBzaWcuYyAoYnVpbGRfc2lnbmF0dXJlX3RhYmxlX2NvbnN0cnVjdG9yLAoJYnVpbGRfc2lnbmF0dXJlX21ldGhvZF9jYWxsKTogRml4IGNhbGxzLgoKCSogY2xhc3MuYyAodGhlX251bGxfdnRhYmxlX2VudHJ5KTogRGVsZXRlIHZhciBkZWZpbml0aW9uLgoJKGluaXRfY2xhc3NfcHJvY2Vzc2luZyk6IERlbGV0ZSB0cmVlIHRoZV9udWxsX3Z0YWJsZV9lbnRyeSBpbml0LgoJKiBkZWNsLmMgKG5vX3ByaW50X3tmdW5jdGlvbnMsIGJ1aWx0aW5zfSk6IERlY2xhcmUgYXMgc3RhdGljLgoJKF9fdHBfZGVzY190eXBlX25vZGUpOiAjaWYgMCB2YXIgZGVmaW5pdGlvbi4KCShpbml0X3R5cGVfZGVzYyk6ICNpZiAwIGluaXQgb2YgX190cF9kZXNjX3R5cGVfbm9kZS4KCSh2Yl9vZmZfaWRlbnRpZmllcik6IE1vdmUgdmFyIGRlY2wgaW50byBpbml0X2RlY2xfcHJvY2Vzc2luZy4KCShjdXJyZW50X2Z1bmN0aW9uX2Fzc2lnbnNfdGhpcyk6IERlY2xhcmUgYXMgc3RhdGljLgoJKGludF9mdHlwZV9wdHJfcHRyX2ludCwgdm9pZF9mdHlwZV9wdHJfaW50X2ludCk6IERlbGV0ZSB2YXIgZGVjbHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgaW5pdCBvZiB2b2lkX2Z0eXBlX3B0cl9wdHJfaW50LgoJTW92ZSBkZWNscyBvZiBzdHJpbmdfZnR5cGVfcHRyX3B0ciBhbmQgaW50X2Z0eXBlX3N0cmluZ19zdHJpbmcgaGVyZS4KCSogZGVjbDIuYyAoZGVsZXRlX3Nhbml0eSk6IERlbGV0ZSBkZWZpbml0aW9uL21vZCBvZiBsb2NhbCB2YXIgRUxUX1NJWkUuCgkqIGluaXQuYyAoQklfaGVhZGVyX3R5cGUsIEJJX2hlYWRlcl9zaXplKTogRGVjbGFyZSBhcyBzdGF0aWMuCgkqIHB0LmMgKHRlbXBsYXRlX2NsYXNzZXMpOiBEZWxldGUgdW51c2VkIHZhci4KCShhZGRfcGVuZGluZ190ZW1wbGF0ZSk6IERlbGV0ZSBkZWNsIGZvciBub24tZXhpc3RlbnQgZm4uCgkobG9va3VwX3RlbXBsYXRlX2NsYXNzKTogRGVsZXRlIHZhcnMgQ09ERSBhbmQgVEFHX0NPREUuCgkoaW5zdGFudGlhdGVfdGVtcGxhdGUpOiBEZWxldGUgdW51c2VkIHZhciBUQVJHUy4KCSogY3AtdHJlZS5oICh2Yl9vZmZfaWRlbnRpZmllciwgY3VycmVudF9mdW5jdGlvbl9hc3NpZ25zX3RoaXMpOgoJRGVsZXRlIGRlY2xzLgoJKF9fdHBfZGVzY190eXBlX25vZGUpOiAjaWYgMCB2YXIgZGVjbC4KCShmbmRlY2xfYXNfc3RyaW5nKTogRml4IHByb3RvdHlwZS4KClRodSBGZWIgMjIgMTU6NTY6MTkgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5kZWY6IEFkZCBHT1RPX1NUTVQuCgkqIHB0LmMgKHRzdWJzdF9leHByKTogU3VwcG9ydCBnb3RvIGFuZCBsYWJlbHMuCgkqIGRlY2wuYyAoZGVmaW5lX2xhYmVsKTogU3VwcG9ydCBtaW5pbWFsIHBhcnNpbmcuCgkqIHBhcnNlLnkgKHNpbXBsZV9zdG10KTogTGlrZXdpc2UuCgpUaHUgRmViIDIyIDE1OjMwOjEyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHhyZWYuYyAoR05VX3hyZWZfbWVtYmVyKTogT25seSBkZWZpbmUvc2V0IHZhciBJIGlmCglYUkVGX1NIT1JUX01FTUJFUl9OQU1FUyBpcyBkZWZpbmVkLCB0byBtYXRjaCB3aGVuIGl0J3MgYWN0dWFsbHkKCXVzZWQuCgkoR05VX3hyZWZfZW5kX3Njb3BlKTogRGVsZXRlIHVudXNlZCBmaWZ0aCBhcmcgVFJOUy4KCShHTlVfeHJlZl9lbmQpOiBGaXggY2FsbC4KCSogZGVjbC5jIChwb3BsZXZlbCwgcG9wbGV2ZWxfY2xhc3MsIGZpbmlzaF9tZXRob2QpOiBGaXggY2FsbHMuCgkqIGNwLXRyZWUuaCAoR05VX3hyZWZfZW5kX3Njb3BlKTogRml4IHByb3RvdHlwZS4KCgkqIHRyZWUuYyAoYnVpbGRfZXhjZXB0aW9uX3ZhcmlhbnQpOiBEZWxldGUgdW51c2VkIHZhcnMgSSwgQSwgVCwKCVQyLCBhbmQgQ05BTUUuCgkobGF5b3V0X3ZiYXNldHlwZXMpOiBEZWxldGUgdW51c2VkIHZhciBOT05WSVJUVUFMX1ZBUl9TSVpFLgoJKG1hcGNhcik6IERlbGV0ZSB1bnVzZWQgdmFyIENPREUuCgkoYnVpbGRfY3BsdXNfbmV3KTogRGVsZXRlIHVudXNlZCBhcmcgV0lUSF9DTEVBTlVQX1AuCgkoYnJlYWtfb3V0X2NsZWFudXBzKTogRml4IGNhbGwuCgkoYm90X21hbmlwKTogTGlrZXdpc2UuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBMaWtld2lzZS4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSwgY29udmVydF90b19yZWZlcmVuY2UsIGNwX2NvbnZlcnQpOgoJTGlrZXdpc2UuCgkqIHR5cGVjay5jICh1bmFyeV9jb21wbGV4X2x2YWx1ZSwgYnVpbGRfbW9kaWZ5X2V4cHIsCgljb252ZXJ0X2Zvcl9pbml0aWFsaXphdGlvbik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IExpa2V3aXNlLgoJKiBjcC10cmVlLmggKGJ1aWxkX2NwbHVzX25ldyk6IEZpeCBwcm90b3R5cGUuCgoJKiByZXBvLmMgKG9wZW5fcmVwb19maWxlKTogRGVsZXRlIHVudXNlZCB2YXIgUS4KCShyZXBvX2NvbXBpbGVfZmxhZ3MsIHJlcG9fdGVtcGxhdGVfZGVjbGFyZWQsCglyZXBvX3RlbXBsYXRlX2RlZmluZWQsIHJlcG9fY2xhc3NfZGVmaW5lZCwgcmVwb19pbmxpbmVfdXNlZCwKCXJlcG9fdnRhYmxlX3VzZWQsIHJlcG9fdGluZm9fdXNlZCk6ICNpZiAwIHVudXNlZCBmbnMuCgkocmVwb19nZXRfaWQsIHJlcG9fdnRhYmxlX3VzZWQpOiBEZWNsYXJlIGFzIHN0YXRpYy4KCSogY3AtdHJlZS5oIChtYXJrX3tkZWNsLGNsYXNzfV9pbnN0YW50aWF0ZWQsIGZpbmlzaF9yZXBvKTogQWRkCglwcm90b3R5cGVzLgoKVGh1IEZlYiAyMiAxNDo1MzozNSAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChwZW5kaW5nX2lubGluZXMpOiBBZGQgZnVuY3Rpb25fdHJ5X2Jsb2NrIGNhc2UuCgoJKiBwdC5jICh1bmlmeSk6IEZpeCBmb3IgdGVtcGxhdGUgY29uc3QgcGFybXMuCgpUaHUgRmViIDIyIDEzOjI0OjE1IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChleHRyYWN0X2ludGVyZmFjZV9pbmZvKTogRGVsZXRlIGZvcndhcmQgZGVjbC4KCShkZWZhdWx0X2NvcHlfY29uc3RydWN0b3JfYm9keSwgZGVmYXVsdF9hc3NpZ25fcmVmX2JvZHkpOiBEZWxldGUKCWRlY2xzIGZvciBub24tZXhpc3RlbnQgZnVuY3Rpb25zLgoJKHN5bnRoX2ZpcnN0b2JqLCBpbmxpbmVfdGV4dF9maXJzdG9ianMpOiBEZWxldGUgdW51c2VkIHZhcnMuCgkoaW5pdF9sZXgpOiBEZWxldGUgc2V0dGluZyB0aGVtLgoJKGNvbnNfdXBfZGVmYXVsdF9mdW5jdGlvbik6IERlbGV0ZSB1bnVzZWQgdmFycyBGVU5DX0JVRiwKCUZVTkNfTEVOLCBhbmQgQ09NUExFWC4gIERlbGV0ZSBjb2RlIHNldHRpbmcgQ09NUExFWC4gIERlbGV0ZSBvbGQKCSNpZiAwJ2Qgc3ludGggY29kZS4KCSh0b3BsZXZlbCwgZXhwcmVzc2lvbl9vYnN0YWNrKTogRGVsZXRlIHVudXNlZCBleHRlcm4gZGVjbHMuCgkodHJlZV9ub2RlX2tpbmQpOiBEZWxldGUgdW51c2VkIGVudW0uCgkodHJlZV9ub2RlX2NvdW50cywgdHJlZV9ub2RlX3NpemVzKTogV3JhcCB3aXRoICNpZmRlZgoJR0FUSEVSX1NUQVRJU1RJQ1MuCgkodHJlZV9ub2RlX2tpbmRfbmFtZXMpOiBEZWxldGUgdW51c2VkIGV4dGVybiBkZWNsLgoJKHN5bnRoX29ic3RhY2spOiBEZWxldGUgdW51c2VkIHZhci4KCShpbml0X2xleCk6IERvbid0IHNldCBpdC4KCShpbml0X3BhcnNlKTogQWRkIGRlY2wgYmVmb3JlIHVzZS4KCShyZWR1Y2VfY291bnQpOiBPbmx5IGRlZmluZSAjaWZkZWYgR0FUSEVSX1NUQVRJU1RJQ1MgJiYgUkVEVUNFX0xFTkdUSC4KCShjdXJyZW50X3VuaXRfe25hbWUsIGxhbmd1YWdlfSk6IERlbGV0ZSB1bnVzZWQgdmFycy4KCShjaGVja19uZXdsaW5lKTogRG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlbSwganVzdCBhY2NlcHQgdGhlICNwcmFnbWEuCgkqIGNwLXRyZWUuaCAoaW5pdF9yZXBvLCBwZWVrX3l5bGV4KTogQWRkIHByb3RvdHlwZXMuCgkoY3VycmVudF91bml0X3tuYW1lLCBsYW5ndWFnZX0pOiBEZWxldGUgZGVjbHMuCgoJKiBzZWFyY2guYzogV3JhcCBhbGwgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9ucywgbWFjcm9zLCBhbmQKCXZhcmlhYmxlcyBpbnNpZGUgI2lmZGVmIEdBVEhFUl9TVEFUSVNUSUNTLgoJKGxvb2t1cF9maWVsZCwgbG9va3VwX2ZuZmllbGRzKTogTGlrZXdpc2UuCgkoaW5pdF9zZWFyY2hfcHJvY2Vzc2luZyk6IExpa2V3aXNlLgoJKHJlaW5pdF9zZWFyY2hfc3RhdGlzdGljcyk6IFdyYXAgd2hvbGUgZnVuY3Rpb24uCgkqIGxleC5jIChyZWluaXRfbGFuZ19zcGVjaWZpYyk6IFdyYXAgY2FsbCB0byByZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MuCgoJKiBkZWNsLmMgKGZpbmlzaF9mdW5jdGlvbik6IE9ubHkgY2FsbCBwb3BfbWVtb2l6ZWRfY29udGV4dCBpZgoJR0FUSEVSX1NUQVRJU1RJQ1MgaXMgZGVmaW5lZC4KCShzdGFydF9mdW5jdGlvbik6IExpa2V3aXNlIGZvciBwdXNoX21lbW9pemVkX2NvbnRleHQuCgkqIGNsYXNzLmMgKHB1c2hjbGFzcywgcG9wY2xhc3MpOiBMaWtld2lzZS4KCgkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX01UQUJMRV9FTlRSWSk6IE1vdmUgZGVmaW5pdGlvbiBmcm9tIGhlcmUuLi4KCSogc2VhcmNoLmMgKENMQVNTVFlQRV9NVEFCTEVfRU5UUlkpOiAuLi4gdG8gaGVyZS4KCgkqIGN2dC5jIChjcF9jb252ZXJ0KTogRGVsZXRlIHVudXNlZCBsb2NhbCB2YXIgRk9STS4KCSogY3AtdHJlZS5oIChjYW5fY29udmVydCwgY2FuX2NvbnZlcnRfYXJnLCByZWFsX2x2YWx1ZV9wKTogQWRkCglwcm90b3R5cGVzLgoKVGh1IEZlYiAyMiAxMzoxOTo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwdC5jIChkb19wb3BsZXZlbCk6IE9vcHM7IHJlYWxseSByZXR1cm4gd2hhdCB3ZSBnZXQgZnJvbQoJcG9wbGV2ZWwgdGhpcyB0aW1lLgoKVGh1IEZlYiAyMiAxMTo0MTo0NCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGlzX2FnZ3JfdHlwZSk6IEFkZCBwcm90b3R5cGUuCgoJKiBjcC10cmVlLmggKHtwdXNoLHBvcH1fY3BfZnVuY3Rpb25fY29udGV4dCk6IEFkZCBkZWNscy4KCSogbWV0aG9kLmMgKHtwdXNoLHBvcH1fY3BfZnVuY3Rpb25fY29udGV4dCk6IERlbGV0ZSBkZWNscy4KCSogZXhjZXB0LmMgKHN0YXJ0X2VoX3Vud2luZGVyLCBlbmRfZWhfdW53aW5kZXIpOiBEZWNsYXJlIGFzIHZvaWQuCgkoU2V0VW5leHBlY3RlZCwgU2V0VGVybWluYXRlKTogRGVsZXRlIHVudXNlZCB2YXJzLgoJKGluaXRfZXhjZXB0aW9uX3Byb2Nlc3NpbmcpOiBEb24ndCBzZXQgU2V0VW5leHBlY3RlZCBvcgoJU2V0VGVybWluYXRlLiAgRG9uJ3Qgc2V0IFNFVF9VTkVYUEVDVEVEX0ZOREVDTCBvciBTRVRfVEVSTUlOQVRFX0ZOREVDTC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogRGVsZXRlIHVudXNlZCBhcnJheSBMQUJFTC4KCShleHBhbmRfaW50ZXJuYWxfdGhyb3cpOiBEZWxldGUgdW51c2VkIHZhciBQQVJBTVMuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogRGVsZXRlIHVudXNlZCB2YXIgQ0xFQU5VUC4KCShlbWl0X2V4Y2VwdGlvbl90YWJsZSk6IERlbGV0ZSB1bnVzZWQgdmFyIEVIX05PREVfREVDTC4KCShleHBhbmRfYnVpbHRpbl90aHJvdyk6IERlbGV0ZSB1bnVzZWQgdmFycyBVTldJTkRfQU5EX1RIUk9XIGFuZAoJR09UT19VTldJTkRfQU5EX1RIUk9XLiAgRG9uJ3Qgc2V0IHRoZW0uCgkoZW5kX2VoX3Vud2luZGVyKTogQWRkIHRvcCBkZWNsLgoJKHBvcF9ydGxfZnJvbV9wZXJtKTogRGVsZXRlIHVudXNlZCBkZWNsIG9mIFBFUk1BTkVOVF9PQlNUQUNLLgoJKGV4Y2VwdGlvbl9zZWN0aW9uLCBwdXNoX3J0bF9wZXJtLCBkb19mdW5jdGlvbl9jYWxsLAoJbGFuZ19pbnRlcmltX2VoLCBwdXNoX2VoX2NsZWFudXAsIGVoX291dGVyX2NvbnRleHQsCglleHBhbmRfZW5kX2VoX3NwZWMsIGVuZF9laF91bndpbmRlcik6IERlY2xhcmUgYXMgc3RhdGljLgoJKHNhdmVkX3BjLCBzYXZlZF90aHJvd190eXBlLCBzYXZlZF90aHJvd192YWx1ZSwgc2F2ZWRfY2xlYW51cCwKCXRocm93X3VzZWQpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChleHBhbmRfZW5kX2VoX3NwZWMpOiBEZWxldGUgcHJvdG90eXBlLgoKCSogc2VhcmNoLmMgKGRmc19tYXJrLCBkZnNfbWFya192dGFibGVfcGF0aCwKCWRmc191bm1hcmtfdnRhYmxlX3BhdGgsIGRmc19tYXJrX25ld192dGFibGUsCglkZnNfdW5tYXJrX25ld192dGFibGUsIGRmc19jbGVhcl9zZWFyY2hfc2xvdCwKCWRmc19zZWFyY2hfc2xvdF9ub25lbXB0eV9wLCBiZnNfbWFya2VkcCwgYmZzX3VubWFya2VkcCwKCWJmc19tYXJrZWRfdnRhYmxlX3BhdGhwLCBiZnNfdW5tYXJrZWRfdnRhYmxlX3BhdGhwLAoJYmZzX21hcmtlZF9uZXdfdnRhYmxlcCwgYmZzX3VubWFya2VkX25ld192dGFibGVwKTogI2lmIDAgdW51c2VkCglmdW5jdGlvbnMuCgkobl9maWVsZHNfc2VhcmNoZWQsIG5fY2FsbHNfbG9va3VwX2ZpZWxkLCBuX2NhbGxzX2xvb2t1cF9maWVsZF8xLAoJbl9jYWxsc19sb29rdXBfZm5maWVsZHMsIG5fY2FsbHNfbG9va3VwX2ZuZmllbGRzXzEsCgluX2NhbGxzX2dldF9iYXNlX3R5cGUsIG5fb3V0ZXJfZmllbGRzX3NlYXJjaGVkLCBuX2NvbnRleHRzX3NhdmVkKToKCU9ubHkgZGVmaW5lICNpZmRlZiBHQVRIRVJfU1RBVElTVElDUy4KCShyZWluaXRfc2VhcmNoX3N0YXRpc3RpY3MpOiBPbmx5IGluaXQgc29tZSB2YXJzIGlmIEdBVEhFUl9TVEFUSVNUSUNTCglpcyBkZWZpbmVkLgoJKHZiYXNlX2RlY2wpOiBEZWxldGUgdmFyIGRlZmluaXRpb24uCgkoaW5pdF9zZWFyY2gpOiBEZWxldGUgb2xkIGRlY2wuCgkoaW5pdF92YmFzZV9wb2ludGVycyk6IERlbGV0ZSBidWlsZGluZyBvZiBWQkFTRV9ERUNMLCBzaW5jZSBpdCdzCgluZXZlciBhY3R1YWxseSB1c2VkLgoJKGV4cGFuZF9pbmRpcmVjdF92dGJsc19pbml0KTogRGVsZXRlIGluaXQgb2YgVkJBU0VfREVDTC4KCShnZXRfYmFzZV9kaXN0YW5jZV9yZWN1cnNpdmUpOiBEZWxldGUgdW51c2VkIGZvdXJ0aCBhcmcKCUJBU0VUWVBFX1BBVEguICBGaXggY2FsbCAuCgkoZ2V0X2Jhc2VfZGlzdGFuY2UpOiBGaXggY2FsbC4KCShwdXNoX2NsYXNzX2RlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgSUQuCgkobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSk6IERlY2xhcmUgYXMgc3RhdGljLgoJKGJyZWFkdGhfZmlyc3Rfc2VhcmNoKTogRGVjbGFyZSBhcyBzdGF0aWMuCgkodHJlZV9oYXNfYW55X2Rlc3RydWN0b3JfcCk6IERlY2xhcmUgYXMgc3RhdGljLgoJKHBvcF9jbGFzc19kZWNscyk6IERlbGV0ZSB1bnVzZWQgYXJnIHBvcF9jbGFzc19kZWNscy4KCSogY2xhc3MuYyAocG9wY2xhc3MpOiBGaXggY2FsbCB0byBwb3BfY2xhc3NfZGVjbHMuCgkqIGNwLXRyZWUuaCAobWFrZV9tZW1vaXplZF90YWJsZV9lbnRyeSwgYnJlYWR0aF9maXJzdF9zZWFyY2gsCgl0cmVlX2hhc19hbnlfZGVzdHJ1Y3Rvcl9wKTogRGVsZXRlIHByb3RvdHlwZXMuCgoJKiBydHRpLmMgKGJ1aWxkX3B0bWZfZGVzYyk6IERlbGV0ZSB1bnVzZWQgYXJnIFRZUEUuCgkoYnVpbGRfdF9kZXNjKTogRml4IGNhbGwuICBEZWxldGUgdW51c2VkIHZhcnMgRUxFTVMgYW5kIFRULgoJKGJ1aWxkX2R5bmFtaWNfY2FzdCk6IERlbGV0ZSB1bnVzZWQgbG9jYWwgdmFycyBUTVAxIGFuZCBSRVRWQUwuCgkoYnVpbGRfdXNlcl9kZXNjKTogRGVsZXRlIHVudXNlZCB2YXIgVC4KCShidWlsZF9jbGFzc19kZXNjKTogRGVsZXRlIHVudXNlZCB2YXJzIFQgYW5kIE9GRi4KCShidWlsZF90X2Rlc2MpOiBEZWxldGUgdW51c2VkIHZhciBOQU1FX1NUUklORy4KCShidWlsZF9oZWFkb2YpOiBNYWtlIHN0YXRpYy4KCShnZXRfYmFkX2Nhc3Rfbm9kZSk6IExpa2V3aXNlLgoJKGdldF9kZWZfdG9fZm9sbG93KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoaW5pdF90eXBlX2Rlc2MpOiBBZGQgcHJvdG90eXBlLgoJKGJ1aWxkX2hlYWRvZik6IFJlbW92ZSBwcm90b3R5cGUuCgpUaHUgRmViIDIyIDAwOjU0OjIyIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHB0LmMgKHRzdWJzdCk6IE9ubHkgbG9vayBmb3IgbWF0Y2hpbmcgZGVjbHMgYXQgZmlsZSBzY29wZSBmb3IKCW5vbi1tZW1iZXIgZnVuY3Rpb25zLgoKCSogY2FsbC5jIChidWlsZF9zY29wZWRfbWV0aG9kX2NhbGwpOiBIYW5kbGUgc2NvcGVkIGRlc3RydWN0b3IKCWNhbGxzIGluIHRlbXBsYXRlcy4KCgkqIGRlY2wuYyAoKl90b3BfbGV2ZWwpOiBBbHNvIHNhdmUgcHJldmlvdXNfY2xhc3NfdmFsdWVzLgoKCSogcHQuYyAodHN1YnN0X2V4cHIpOiBTdXBwb3J0IGRvIHt9IHdoaWxlIGxvb3BzLgoJKiBwYXJzZS55IChzaW1wbGVfc3RtdCk6IExpa2V3aXNlLgoJKiB0cmVlLmRlZjogTGlrZXdpc2UuCgoJKiBtZXRob2QuYyAoYnVpbGRfb3ZlcmxvYWRfaWRlbnRpZmllcik6IEZvciBhIGNsYXNzIG5lc3RlZCBpbiBhCgl0ZW1wbGF0ZSBjbGFzcywgZG9uJ3QgbWFuZ2xlIGluIHRoZSB0ZW1wbGF0ZSBwYXJtcyBmcm9tIG91cgoJY29udGV4dC4KCgkqIGxleC5jLCBjcC10cmVlLmg6IFJlbW92ZSBzdXBwb3J0IGZvciB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9ucyBpbgoJdGhlIHBlbmRpbmdfaW5saW5lcyBjb2RlLgoJKiBwdC5jOiBSZW1vdmUgZGVhZCBmdW5jdGlvbnMgYW5kIHVudXNlZCBhcmd1bWVudHMuCgkodXNlc190ZW1wbGF0ZV9wYXJtcyk6IFRZUEVOQU1FX1RZUEVzIGFsd2F5cyB1c2UgdGVtcGxhdGUgcGFybXMuCgkqIHBhcnNlLnk6IFN0b3AgcGFzc2luZyBhbnl0aGluZyB0byBlbmRfdGVtcGxhdGVfZGVjbC4KCSogdHJlZS5jIChwcmludF9sYW5nX3N0YXRpc3RpY3MpOiBPbmx5IHByaW50IHRpbnN0IGluZm8gI2lmZGVmCglHQVRIRVJfU1RBVElTVElDUy4KCldlZCBGZWIgMjEgMTY6NTc6MzMgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogaW5pdC5jIChleHBhbmRfcmVjdXJzaXZlX2luaXR7LF8xfSk6IERlbGV0ZSBkZWNscy4KCShzb3J0X21lbWJlcl9pbml0KTogRGVsZXRlIHVudXNlZCB2YXIgSU5JVC4KCShlbWl0X2Jhc2VfaW5pdCk6IERlbGV0ZSB1bnVzZWQgdmFyIFguCgkoYnVpbGRfb2Zmc2V0X3JlZik6IERlbGV0ZSB1bnVzZWQgdmFyIENOQU1FLgoJKHNvcnRfbWVtYmVyX2luaXQpOiBEZWxldGUgdW51c2VkIHZhciBGSUVMRFNfVE9fVU5NQVJLLgoJKGVtaXRfYmFzZV9pbml0KTogRGVsZXRlIHVudXNlZCBsb2NhbCB2YXIgQkFTRS4gIERlbGV0ZSBleHRlcm4KCWRlY2wgb2YgSU5fQ0hBUkdFX0lERU5USUZJRVIuCgkoYnVpbGRfZGVsZXRlKTogRGVsZXRlIHVudXNlZCBsb2NhbCB2YXIgVklSVFVBTF9TSVpFLgoKCSogaW5pdC5jIChidWlsZF92ZWNfZGVsZXRlKTogRGVsZXRlIHVudXNlZCB0aGlyZCBhcmcgRUxUX1NJWkUuCgkoYnVpbGRfZGVsZXRlKTogRml4IGNhbGwuCgkqIGRlY2wyLmMgKGRlbGV0ZV9zYW5pdHkpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChidWlsZF92ZWNfZGVsZXRlKTogVXBkYXRlIHByb3RvdHlwZS4KCgkqIHR5cGVjay5jIChjb21tb25fYmFzZV90eXBlKTogRGVsZXRlIHVudXNlZCB2YXIgVE1QLgoJKGJ1aWxkX2JpbmFyeV9vcCk6IERlbGV0ZSBsb2NhbCB2YXIgQVJHU19TQVZFLgoJKGJ1aWxkX2FycmF5X3JlZik6IERlbGV0ZSB1bnVzZWQgdmFyIElUWVBFLgoJKGNfZXhwYW5kX3JldHVybik6IERlbGV0ZSB1bnVzZWQgdmFyIFVTRV9URU1QLgoKCSogdHlwZWNrLmMgKGNvbXBleGNlcHR0eXBlcyk6IERlbGV0ZSB1bnVzZWQgYXJnIFNUUklDVC4KCShjb21wdHlwZXMpOiBGaXggY2FsbHMuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoY29tcGV4Y2VwdHR5cGVzKTogRGVsZXRlIGV4dHJhIGFyZy4KCgkqIGRlY2wyLmMgKGNoZWNrX2NsYXNzZm4pOiBEZWxldGUgdW51c2VkIHNlY29uZCBhcmcgQ05BTUUuCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCwgZ3Jva2ZuZGVjbCk6IEZpeCBjYWxscy4KCSogaW5pdC5jIChkb19mcmllbmQpOiBMaWtld2lzZS4KCSogY3AtdHJlZS5oIChjaGVja19jbGFzc2ZuKTogVXBkYXRlIHByb3RvdHlwZS4KCgkqIGNwLXRyZWUuaCAoc2lnbmF0dXJlX2Vycm9yLCBpbXBvcnRfZXhwb3J0X3Z0YWJsZSwKCWFwcGVuZF9zaWduYXR1cmVfZmllbGRzLCBpZF9pbl9jdXJyZW50X2NsYXNzLCBtYXJrX3VzZWQsCgljb3B5X2Fzc2lnbm1lbnRfYXJnX3ApOiBBZGQgZGVjbHMuCgkqIGRlY2wyLmMgKG1hcmtfdXNlZCk6IERlbGV0ZSBkZWNsLgoKCSogY2xhc3MuYyAobl8qKTogV3JhcCB3aXRoICNpZmRlZiBHQVRIRVJfU1RBVElTVElDUy4KCgkqIGNsYXNzLmMgKGdldF92dGFibGVfZW50cnkpOiBEaXNhYmxlIHVudXNlZCBmdW5jdGlvbi4KCShkb2luZ19oYXJkX3ZpcnR1YWxzKTogRGVsZXRlIHVudXNlZCBzdGF0aWMgZ2xvYmFsIHZhci4KCShmaW5pc2hfc3RydWN0XzEpOiBEb24ndCBpbml0IERPSU5HX0hBUkRfVklSVFVBTFMuCgkocHJlcGFyZV9mcmVzaF92dGFibGUpOiBEZWxldGUgdW51c2VkIHZhcnMgUEFUSCBhbmQgUkVTVUxULgoJKG92ZXJyaWRlcyk6IERlbGV0ZSB1bnVzZWQgdmFycyBSRVRUWVBFIGFuZCBCQVNFX1JFVFRZUEUuCgkobW9kaWZ5X29uZV92dGFibGUpOiBEZWxldGUgdW51c2VkIHZhciBPTERfUlRUSS4KCShmaW5pc2hfc3RydWN0X2Fub24pOiBEZWxldGUgdW51c2VkIHZhcnMgT0ZGU0VUIGFuZCBYLgoJKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IERlbGV0ZSB1bnVzZWQgdmFyIE1FVEhPRF9WRUMuCgkoZ2V0X2Jhc2VmbmRlY2xzKTogRGVsZXRlIHVudXNlZCB2YXIgUFVSUE9TRS4gIERlbGV0ZSB1bnVzZWQKCWZvci1zY29wZSBsb2NhbCB2YXJpYWJsZSBNRVRIT0RTLgoKCSogY2FsbC5jICh1c2VyX2hhcnNobmVzcyk6IERlbGV0ZSB1bnVzZWQvdW5uZWVkZWQgYXJnIFBBUk0uCgkoaWRlYWxfY2FuZGlkYXRlKTogRGVsZXRlIHVudXNlZCBhcmdzIEJBU0VUWVBFIGFuZCBQQVJNUy4KCShidWlsZF9tZXRob2RfY2FsbCk6IERlbGV0ZSB1bnVzZWQgYXJncyBwYXNzZWQgaW50byBpZGVhbF9jYW5kaWRhdGUuCgkoYnVpbGRfb3ZlcmxvYWRfY2FsbF9yZWFsKTogTGlrZXdpc2UuICBEZWxldGUgdW51c2VkIHZhciBPVkVSTE9BRF9OQU1FLgoJKiBjcC10cmVlLmggKHN5bnRoZXNpemVfbWV0aG9kKTogQWRkIGRlY2wuCgoJKiBkZWNsLmMgKG5vdGVfbGV2ZWxfZm9yX2Zvcik6IEdpdmUgdm9pZCByZXR1cm4gdHlwZS4KCShwdXNoZGVjbF9ub25jbGFzc19sZXZlbCk6IExpa2V3aXNlLgoJKGZpbmlzaF9mdW5jdGlvbik6IERlbGV0ZSB1bnVzZWQgdmFycyBWRklFTERTIGFuZCBBTExPQ0FURURfVEhJUy4KCShwb3BsZXZlbCk6IERlbGV0ZSB1bnVzZWQgdmFyIElNUExJQ0lUX1RSWV9CTE9DSy4KCShzdXNwZW5kX2JpbmRpbmdfbGV2ZWwpOiBEZWxldGUgdW51c2VkIHZhciBMRVZFTC4KCShkdXBsaWNhdGVfZGVjbHMpOiBEZWxldGUgdW51c2VkIHZhciBDVFlQRS4KCShkdXBsaWNhdGVfZGVjbHMpOiBEZWxldGUgdW51c2VkIHZhciBQUkVWSU9VU19DX0RFQ0wuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgdW51c2VkIHZhcnMgRkxPQVRfRU5ETElOSyBhbmQKCVBUUl9FTkRMSU5LLgoJKGdyb2tkZWNsYXJhdG9yKTogRGVsZXRlIHVudXNlZCB2YXIgQy4KCShncm9rZGVjbGFyYXRvcik6IERlbGV0ZSB1bnVzZWQgdmFyIFNJWkVfVkFSSUVTLgoJKGdyb2twYXJtcyk6IERlbGV0ZSB1bnVzZWQgdmFyIFNBV19WT0lELgoJKHN0YXJ0X2Z1bmN0aW9uKTogRGVsZXRlIHVudXNlZCB2YXIgT0xEREVDTC4KCShjcGx1c19leHBhbmRfZXhwcl9zdG10KTogRGVsZXRlIHVudXNlZCB2YXIKCVJFTU9WRV9JTVBMSUNJVF9JTU1FRElBVEVMWS4KCgkqIGNwLXRyZWUuaCAocHVzaGRlY2xfbm9uY2xhc3NfbGV2ZWwpOiBGaXggcHJvdG90eXBlLgoKCSogTWFrZWZpbGUuaW4gKENPTkZMSUNUUyk6IFVwZGF0ZSB0byAxMiBzaGlmdC9yZWR1Y2UuCgpXZWQgRmViIDIxIDAwOjA2OjE3IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYnVpbGRfbWluKTogU2V0IFRSRUVfQ09NUExFWElUWSB0byBsaW5lbm8uCgkoYnVpbGRfbWluX250KTogTGlrZXdpc2UuCgkqIHB0LmMgKGRvX3B1c2hsZXZlbCk6IEVtaXQgbGluZSBub3RlLgoJKGRvX3BvcGxldmVsKTogUmV0dXJuIHdoYXQgd2UgZ2V0IGZyb20gcG9wbGV2ZWwuCgkodHN1YnN0X2V4cHIpOiBTZXQgbGluZW5vIGZyb20gVFJFRV9DT01QTEVYSVRZIGluIHN0bXQgbm9kZXMuCgkqIHBhcnNlLnk6IFVzZSBkb19wdXNobGV2ZWwgYW5kIGRvX3BvcGxldmVsLgoJKiBjcC10cmVlLmg6IERlY2xhcmUgZG9fcG9wbGV2ZWwuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgYXRfZW9mLgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogUGFzcyBpdCB0byByZXN0X29mX2RlY2xfY29tcGlsYXRpb24uCgkqIGRlY2wyLmMgKGltcG9ydF9leHBvcnRfZGVjbCk6IFJlbmFtZWQgZnJvbSBpbXBvcnRfZXhwb3J0X2lubGluZS4KCShmaW5pc2hfZmlsZSk6IENhbGwgaXQgdG8gZG8gaW50ZXJmYWNlIGhhbmRsaW5nIGZvciBzdGF0aWNzLgoJKiBwdC5jICh0c3Vic3RfY29weSk6IENhbGwgbWFya191c2VkIG9uIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zCgl1c2VkIGhlcmUuCgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IERvbid0IGVtaXQgc3RhdGljcyB3ZSBjYW4ndCBnZW5lcmF0ZS4KCSogcHQuYyAoaW5zdGFudGlhdGVfZGVjbCk6IERvbid0IHNldCBpbnRlcmZhY2Ugb24gaW5zdGFudGlhdGlvbnMKCXdlIGNhbid0IGdlbmVyYXRlLgoKCSogY3AtdHJlZS5oIChzdHJ1Y3QgdGluc3RfbGV2ZWwpOiBDaGFuZ2UgJ2NsYXNzbmFtZScgdG8gJ2RlY2wnLgoJKiB0cmVlLmMgKHByaW50X2xhbmdfc3RhdGlzdGljcyk6IFByaW50IG1heCB0ZW1wbGF0ZSBkZXB0aC4KCSogcHQuYyAocHVzaF90aW5zdF9sZXZlbCk6IER1bXAgZW50aXJlIGluc3RhbnRpYXRpb24gY29udGV4dC4KCShpbnN0YW50aWF0ZV9jbGFzc190ZW1wbGF0ZSk6IFVzZSBpdCBhbmQgcG9wX3RpbnN0X2xldmVsLgoJKGluc3RhbnRpYXRlX2RlY2wpOiBMaWtld2lzZS4KCgkqIGNhbGwuYyBjbGFzcy5jIGNwLXRyZWUuaCBkZWNsLmMgZGVjbDIuYyBlcnJvci5jIGxleC5jIG1ldGhvZC5jCglwdC5jIHB0cmVlLmMgdHJlZS5kZWY6IFJlbW92ZSBhbGwgdHJhY2VzIG9mIFVOSU5TVEFOVElBVEVEX1BfVFlQRS4KClR1ZSBGZWIgMjAgMTg6MjE6NTEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2FsbC5jIGNsYXNzLmMgY3AtdHJlZS5oIGN2dC5jIGRlY2wuYyBkZWNsMi5jIGVycm9yLmMgZXhwci5jCglpbml0LmMgbGV4LmMgbWV0aG9kLmMgcGFyc2UueSBwdC5jIHJlcG8uYyBzZWFyY2guYyBzcGV3LmMgdHJlZS5jCgl0cmVlLmRlZiB0eXBlY2suYyB0eXBlY2syLmMgeHJlZi5jOiBNYXNzaXZlLCBzeXN0ZW1pYyBjaGFuZ2VzIGZvcgoJdGhlIG5ldyB0ZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbi4KClR1ZSBGZWIgMjAgMTc6MTQ6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoY2hlY2tfY3BfY2FzZV92YWx1ZSk6IFVzZSBTVFJJUF9UWVBFX05PUFMuCgpUaHUgRmViIDE1IDE4OjQ0OjQyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBEZWxheSBlbWl0dGluZyB0aGUgZGVidWcgaW5mb3JtYXRpb24gZm9yCglhIHR5cGVkZWYgdGhhdCBoYXMgYmVlbiBpbnN0YWxsZWQgYXMgdGhlIGNhbm9uaWNhbCB0eXBlZGVmLCBpZiB0aGUKCXR5cGUgaGFzIG5vdCB5ZXQgYmVlbiBkZWZpbmVkLgoKVGh1IEZlYiAxNSAwOTozOTowOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChncm9rZmllbGQpOiBTdGlsbCBjYWxsIHBvcF9uZXN0ZWRfY2xhc3MgZm9yIGFjY2VzcyBkZWNscy4KCldlZCBGZWIgMTQgMTc6MzA6MDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChsb29rdXBfbGFiZWwpOiBDYWxsIGxhYmVsX3J0eC4KCgkqIGRlY2wuYyAobWFrZV9iaW5kaW5nX2xldmVsKTogTmV3IGZ1bmN0aW9uLgoJKHB1c2hsZXZlbCwgcHVzaGxldmVsX2NsYXNzKTogQ2FsbCBpdCBpbnN0ZWFkIG9mIGV4cGxpY2l0CglkdXBsaWNhdGUgY2FsbHMgdG8geG1hbGxvYy4KCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBEZWxldGUgdXNlbGVzcyBidWlsZF9wb2ludGVyX3R5cGUKCWNhbGwuCgoJKiBkZWNsLmMgKGZsb2F0X2Z0eXBlX2Zsb2F0LCBsZG91YmxlX2Z0eXBlX2xkb3VibGUpOiBBZGQgZGVmaW5pdGlvbnMuCgkoc2l6ZXRfZnR5cGVfc3RyaW5nKTogRGVsZXRlIHZhcmlhYmxlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogQWRkIGJ1aWx0LWluIGZ1bmN0aW9ucyBmYWJzZiwgZmFic2wsCglzcXJ0Ziwgc3FydGwsIHNpbmYsIHNpbiwgc2lubCwgY29zZiwgY29zLCBjb3NsLiAgTmV3IGxvY2FsCgl2YXJpYWJsZSBzdHJsZW5fZnR5cGUsIHVzZWQgZm9yIHN0cmxlbi4KCldlZCBGZWIgMTQgMTY6MjE6MjUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChwdXNoX3RvX3RvcF9sZXZlbCk6IFN0YXJ0IGZyb20gY3VycmVudF9iaW5kaW5nX2xldmVsCglhZ2FpbiBmb3Igbm93OyB0aGUgc3RsIGhhY2tzIGRlcGVuZCBvbiBnKysgYmVpbmcgYnJva2VuIGluIHRoaXMKCXdheSwgYW5kIGl0J2xsIGJlIGZpeGVkIGluIHRoZSB0ZW1wbGF0ZSByZXdyaXRlLgoKCSogdHJlZS5kZWY6IEFkZCBVU0lOR19ERUNMLgoJKiBkZWNsMi5jIChkb19jbGFzc191c2luZ19kZWNsKTogSW1wbGVtZW50LgoJKGdyb2tmaWVsZCk6IFBhc3MgYWNjZXNzIGRlY2xzIG9mZiB0byBkb19jbGFzc191c2luZ19kZWNsIGluc3RlYWQgb2YKCWdyb2tkZWNsYXJhdG9yLgoJKiBlcnJvci5jIChkdW1wX2RlY2wpOiBIYW5kbGUgVVNJTkdfREVDTHMuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBSZW1vdmUgY29kZSBmb3IgaGFuZGxpbmcgYWNjZXNzIGRlY2xzLgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBBZGp1c3QgYWNjb3JkaW5nbHksIHRyZWF0IHVzaW5nLWRlY2xzCglhcyBhY2Nlc3MgZGVjbHMgZm9yIG5vdy4KCShmaW5pc2hfc3RydWN0KTogRG9uJ3QgY2hlY2sgVVNJTkdfREVDTHMgZm9yIG90aGVyIHVzZXMgb2YgdGhlIG5hbWUuCgoJKiBzZWFyY2guYyAoZ2V0X21hdGNoaW5nX3ZpcnR1YWwpOiBVc2UgY3BfZXJyb3JfYXQuCgpXZWQgRmViIDE0IDEwOjM2OjU4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChjb21wdHlwZXMpOiBEZWZhdWx0IENPTVBfVFlQRV9BVFRSSUJVVEVTIHRvIDEsIHRvCgltYXRjaCBjLXR5cGVjay5jLgoJKHNlbGZfcHJvbW90aW5nX2FyZ3NfcCk6IE1vdmUgdGhlIGNoZWNrIHRoYXQgVFlQRSBpcyBub24tbmlsCgliZWZvcmUgdHJ5aW5nIHRvIGxvb2sgYXQgaXRzIG1haW4gdmFyaWFudC4KCSh1bnNpZ25lZF90eXBlLCBzaWduZWRfdHlwZSk6IEFkZCBjaGVja2luZyBvZiBESS9TSS9ISS9RSSBub2Rlcy4KCgkqIGNwLXRyZWUuaCAoREVDTF9XQUlUSU5HX0ZSSUVORFMsIFNFVF9ERUNMX1dBSVRJTkdfRlJJRU5EUyk6CglEZWxldGUgbWFjcm9zLgoJKiBpbml0LmMgKHhyZWZfZnJpZW5kLCBlbWJyYWNlX3dhaXRpbmdfZnJpZW5kcyk6IERlbGV0ZSBmdW5jdGlvbnMuCgkoZG9fZnJpZW5kKTogRGVsZXRlIGNhbGwgdG8geHJlZl9mcmllbmQuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IERlbGV0ZSBjYWxsIHRvIGVtYnJhY2Vfd2FpdGluZ19mcmllbmRzLgoKCSogdHlwZWNrLmMgKGNvbnZlcnRfc2VxdWVuY2UpOiAjaWYgMCB1bnVzZWQgZnVuY3Rpb24uCgoJKiBjcC10cmVlLmggKERFQ0xfSU5fTUVNT1JZX1ApOiBOZXcgbWFjcm8gdy8gdGhlIGNoZWNrIHRoYXQgdXNlZCB0bwoJYmUgaW4gZGVjbF9pbl9tZW1vcnlfcC4KCShkZWNsX2luX21lbW9yeV9wKTogRGVsZXRlIGRlY2wuCgkqIGV4cHIuYyAoZGVjbF9pbl9tZW1vcnlfcCk6IERlbGV0ZSBmbi4KCSogdHlwZWNrLmMgKG1hcmtfYWRkcmVzc2FibGUpOiBVc2UgREVDTF9JTl9NRU1PUllfUC4KCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBVc2UgREVDTF9JTl9NRU1PUllfUC4KClR1ZSBGZWIgMTMgMTI6NTE6MjEgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogQ2hlY2sgZm9yIGEgcHVyZS1zcGVjaWZpZXIgb24gYQoJbm9uLXZpcnR1YWwgZnVuY3Rpb24gaGVyZS4KCgkqIGRlY2wyLmMgKGdyb2tfZnVuY3Rpb25faW5pdCk6IERvbid0IGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0aW9uCglpcyB2aXJ0dWFsIGhlcmUuCgkoZ3Jva2ZpZWxkKTogRG9uJ3QgY2FsbCBjaGVja19mb3Jfb3ZlcnJpZGUgaGVyZS4KCgkqIGRlY2wuYyAocHVzaF90b190b3BfbGV2ZWwpOiBTdGFydCBmcm9tIGlubmVyX2JpbmRpbmdfbGV2ZWwsCgljaGVjayBjbGFzc19zaGFkb3dlZCBpbiBjbGFzcyBsZXZlbHMuCgpNb24gRmViIDEyIDE3OjQ2OjU5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocmVzdW1lX2xldmVsKTogSWdub3JlIHRoaW5ncyB0aGF0IGRvbid0IGhhdmUgbmFtZXMsIGluc3RlYWQKCW9mIGNvcmUgZHVtcGluZy4KCk1vbiBGZWIgMTIgMTU6NDc6NDQgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogU2V0IERFQ0xfVklOREVYIHByb3Blcmx5IGZvciBGVU5DVElPTl9ERUNMcy4KClNhdCBGZWIgMTAgMTc6NTk6NDUgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF8xKTogU2V0IERFQ0xfVklOREVYIHByb3Blcmx5IG9uIGEKCXN5bnRoZXNpemVkIGR0b3IuCgoJKiBwYXJzZS55IChjb21wbGV0ZV90eXBlX25hbWUpOiBCaW5kIGdsb2JhbF9zY29wZSBlYXJsaWVyLgoJKGNvbXBsZXhfdHlwZV9uYW1lKTogTGlrZXdpc2UuCgkocXVhbGlmaWVkX3R5cGVfbmFtZSk6IFJlbW92ZS4KClRodSBGZWIgIDggMTU6MTU6MTQgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZm5kZWNsKTogTW92ZSBjb2RlIHRoYXQgbG9va3MgZm9yIHZpcnR1YWxzIGluIGJhc2UKCWNsYXNzZXMuLi4KCSogY2xhc3MuYyAoY2hlY2tfZm9yX292ZXJyaWRlKTogLi4uIHRvIGEgbmV3IGZ1bmN0aW9uLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgaXQuCgoJKiBjcC10cmVlLmg6IERlY2xhcmUgd2Fybl9zaWduX2NvbXBhcmUuCgoJKiB0eXBlY2suYyAoYnVpbGRfYmluYXJ5X29wX25vZGVmYXVsdCk6IENoZWNrIHdhcm5fc2lnbl9jb21wYXJlCglyYXRoZXIgdGhhbiBleHRyYV93YXJuaW5ncyB0byBkZWNpZGUgd2hldGhlciB0byB3YXJuIGFib3V0Cgljb21wYXJpc29uIG9mIHNpZ25lZCBhbmQgdW5zaWduZWQuCgoJKiBkZWNsMi5jIChsYW5nX2RlY29kZV9vcHRpb24pOiBIYW5kbGUgd2Fybl9zaWduX2NvbXBhcmUuICAtV2FsbAoJaW1wbGllcyAtV3NpZ24tY29tcGFyZS4gIC1XYWxsIGRvZXNuJ3QgaW1wbHkgLVcuCgpXZWQgRmViICA3IDE1OjI3OjU3IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9jb21wb25lbnRfcmVmKTogRml4IHRvIGhhbmRsZSBhbm9uIHVuaW9ucyBpbiBiYXNlCgljbGFzc2VzIGFzIHdlbGwuCgpXZWQgRmViICA3IDE0OjI5OjEyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKHJlc29sdmVzX3RvX2ZpeGVkX3R5cGVfcCk6IERlbGV0ZSBjb2RlIGRlYWxpbmcgd2l0aAoJYSBXSVRIX0NMRUFOVVBfRVhQUiwgc2luY2Ugd2UgZG9uJ3QgZ2VuZXJhdGUgdGhlbSBhbnkgbW9yZS4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IExpa2V3aXNlLgoJKiBkZWNsLmMgKGdyb2tfcmVmZXJlbmNlX2luaXQpOiBMaWtld2lzZS4KCShjcF9maW5pc2hfZGVjbCk6IExpa2V3aXNlLgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBMaWtld2lzZS4KCSogdHJlZS5jIChyZWFsX2x2YWx1ZV9wKTogTGlrZXdpc2UuCgkobHZhbHVlX3ApOiBMaWtld2lzZS4KCShidWlsZF9jcGx1c19uZXcpOiBMaWtld2lzZS4KCSh1bnNhdmVfZXhwcl9ub3cpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKHVuYXJ5X2NvbXBsZXhfbHZhbHVlLCBidWlsZF9tb2RpZnlfZXhwciwKCWNfZXhwYW5kX3JldHVybik6IExpa2V3aXNlLgoKVHVlIEZlYiAgNiAxMzozOToyMiAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJTWFrZSB0aGUgQysrIGZyb250LWVuZCBwYXkgYXR0ZW50aW9uIHRvIGF0dHJpYnV0ZXMgZm9yIHN0cnVjdHVyZXMuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3QpOiBOZXcgYXJndW1lbnQgQVRUUklCVVRFUywgcGFzc2VkIGRvd24gaW50bwoJZmluaXNoX3N0cnVjdF8xLgoJKGZpbmlzaF9zdHJ1Y3RfMSk6IE5ldyBhcmd1bWVudCBBVFRSSUJVVEVTOyBjYWxsIGNwbHVzX2RlY2xfYXR0cmlidXRlcy4KCVRha2Ugb3V0IG9sZCByb3VuZF91cF9zaXplIHVzZSBhbmQgc2V0dGluZyB0aGUgREVDTF9BTElHTiBwb3NzaWJseQoJdXNpbmcgaXQuICBUYWtlIG91dCBzZXR0aW5nIG9mIFRZUEVfQUxJR04gdG8gcm91bmRfdXBfc2l6ZSwgd2hpY2gKCWNhbiBvdmVycmlkZSB3aGF0IHRoZSBhdHRyaWJ1dGUgc2V0LgoJKiBjcC10cmVlLmggKGZpbmlzaF9zdHJ1Y3QpOiBVcGRhdGUgcHJvdG90eXBlLgoJKiBwYXJzZS55ICh0ZW1wbGF0ZV9pbnN0YW50aWF0ZV9vbmNlKTogUGFzcyBhIE5VTExfVFJFRSBmb3IgdGhlCglhdHRyaWJ1dGVzIHRvIGZpbmlzaF9zdHJ1Y3QuCgkoc3RydWN0c3ApOiBGb3IgYSBDTEFTUyBkZWNsLCBhZGQgbWF5YmVfYXR0cmlidXRlIHRvIHJ1bGUgYW5kIHBhc3MgdGhhdAoJdmFsdWUgZG93biBpbnRvIGZpbmlzaF9zdHJ1Y3QuCgkqIE1ha2VmaWxlLmluIChDT05GTElDVFMpOiBTd2l0Y2ggdG8gNyBzaGlmdC9yZWR1Y2UgY29uZmxpY3RzLgoKVHVlIEZlYiAgNiAxMzoxMjoxNSAxOTk2ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiAgUmUtd29yZCBkZWFkIGZvciBsb2NhbCBoYW5kbGluZy4KCShwdXNoZGVjbCk6ICBSZW1vdmUgdXNlbGVzcyBERUNMX0RFQURfRk9SX0xPQ0FMIHRlc3QuCgkoY3BfZmluaXNoX2RlY2wpOiAgSWYgaXNfZm9yX3Njb3BlLCBjaGVjayBmb3IgZHVwbGljYXRlcyBzbwoJd2UgY2FuIGRpc2FibGUgaXNfZm9yX3Njb3BlLiAgT3RoZXJ3aXNlLCBwcmVzZXJ2ZV90ZW1wX3Nsb3RzLgoKCSogbGV4LmMgKGRvX2lkZW50aWZpZXIpOiAgVXNlIGdsb2JhbCBiaW5kaW5nIGluIHByZWZlcmVuY2Ugb2YKCWRlYWQgZm9yIGxvY2FsIHZhcmlhYmxlLgoKTW9uIEZlYiAgNSAxNzo0Njo0NiAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGluaXRpYWxpemluZ19jb250ZXh0KTogSGFuZGxlIGFub24gdW5pb24gY2hhbmdlcywgdGhlCgljb250ZXh0IHdoZXJlIGZpZWxkcyBvZiBhbm9uIHVuaW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgbm93IGhhcyB0byBiZQoJZm91bmQgYnkgd2Fsa2luZyB1cCB0aGUgVFlQRV9DT05URVhUIGNoYWluLgoKRnJpIEZlYiAgMiAxNDo1NDowNCAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoc3RhcnRfZGVjbCk6ICNpZmRlZiBvdXQgY29kZSB0byBzZXQgREVDTF9DT01NT04KCWlmIEFTTV9PVVRQVVR7LF9BTElHTkVEfV9CU1MgaXMgZGVmaW5lZC4KCShvYnNjdXJlX2NvbXBsZXhfaW5pdCk6IElmIGJzcyBpcyBzdXBwb3J0ZWQsIGFsd2F5cyBzZXQKCURFQ0xfSU5JVElBTCB0byBlcnJvcl9tYXJrX25vZGUuCgpUaHUgRmViICAxIDE2OjE5OjU2IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoaXNfZnJpZW5kKTogTWFrZSBzdXJlIHRoZXJlJ3MgYSBjb250ZXh0IGJlZm9yZSB3ZSBzZWUgaWYKCWl0J3MgYW4gYWdnciB0eXBlLgoKVGh1IEZlYiAgMSAxNTo0NDo1MyAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKGlzX2ZyaWVuZCk6IENsYXNzZXMgYXJlIG5vdCBmcmllbmRseSB3aXRoIG5lc3RlZCBjbGFzc2VzLgoKVGh1IEZlYiAgMSAxNToyNzozNyAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIGxleC5jIChjaGVja19uZXdsaW5lKTogUGFzcyBsYXN0IGNoYXJhY3RlciByZWFkIHRvIEhBTkRMRV9QUkFHTUEsCglhbmQgcmVjb3JkIGl0cyByZXN1bHQuCgpUaHUgRmViICAxIDA5OjI3OjAxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYW5vbik6IFN3aXRjaCBhcm91bmQgY29kZSB0byBub3QgbW92ZSBhbm9uCgl1bmlvbiBlbGVtZW50cyBhcm91bmQsIG5vciBtZXNzIHVwIHRoZWlyIGNvbnRleHRzLCBub3Igb2Zmc2V0cywKCWluc3RlYWQgd2Ugbm93IGJ1aWxkIHVwIHRoZSByaWdodCBudW1iZXIgb2YgQ09NUE9ORU5UX1JFRnMgZm9yIGFsbAoJdGhlIGFub24gdW5pb25zIHRoYXQgbWF5IGJlIHByZXNlbnQgYXQgYnVpbGRfY29tcG9uZW50X3JlZiB0aW1lLgoJKiB0eXBlY2suYyAobG9va3VwX2Fub25fZmllbGQpOiBOZXcgcm91dGluZSB0byBoYW5kbGUgZmllbGQgbG9va3VwCglvbiBmaWVsZHMgd2l0aG91dCBuYW1lcy4gIFdlIGZpbmQgdGhlbSwgYmFzZWQgdXBvbiB0aGVpciB1bmlxdWUgdHlwZQoJaW5zdGVhZC4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWYpOiBBbGxvdyBGSUVMRF9ERUNMIGNvbXBvbmVudHMuCglIYW5kbGUgZmluZGluZyBjb21wb25lbnRzIGluIGFub255bW91cyB1bmlvbnMsIGFuZCBlbnN1cmUgdGhhdCBhCglDT01QT05FTlRfUkVGIGlzIGJ1aWx0IGZvciBlYWNoIGxldmVsIGFzIG5lY2Vzc2FyeS4KClR1ZSBKYW4gMzAgMTg6MTg6MjMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IE1ha2UgdGhlIElORElSRUNUX0JJTkQgY2FzZSBjb21lIGFmdGVyCgljb2RlIHRoYXQgZW5zdXJlcyB0aGF0IGNvcHkgY3RvcnMgYXJlIHVzZWQgaWYgYXBwcm9wcmlhdGUuCgpUdWUgSmFuIDMwIDE3OjM1OjE0IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoYnVpbGRfdmVjX2RlbGV0ZSk6IE9ubHkgZ2l2ZSBhbiBlcnJvciBpZiBiYXNlIGlzbid0IGFuCgllcnJvcl9tYXJrX25vZGUuCgpNb24gSmFuIDI5IDE3OjA5OjA2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHNwZXcuYyAoZG9fYWdncik6IGBuZXcgc3RydWN0IFM7JyBpc24ndCBhIGZvcndhcmQgZGVjbGFyYXRpb24uCgkoeXlsZXgpOiBJZiB3ZSBzZWUgYG5ldycsIGtlZXAgc2x1cnBpbmcuCgpUaHUgSmFuIDI1IDE4OjMxOjM2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IE1vdmUgY29kZSBmb3IgaGFuZGxpbmcgYW5vbiB1bmlvbnMuLi4KCShmaW5pc2hfc3RydWN0X2Fub24pOiB0byBoZXJlLiAgRml4dXAgc28gdGhhdCB3ZSBkbyB0aGUgb2Zmc2V0CgljYWxjdWxhdGlvbnMgcmlnaHQsIGFuZCBzbyB0aGF0IHRoZSBmaWVsZHMgYXJlIHBoeXNpY2FsbHkgbW92ZWQgdG8KCXRoZSBjb250YWluZXJzJ3MgY2hhaW4uCgpUaHUgSmFuIDI1IDE4OjI3OjM3IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBBdm9pZCB0cnlpbmcgdG8gZ2V0IGFuIG9wZXJhbmQgb2ZmIGFuCglpZGVudGlmaWVyIG5vZGUuCgpXZWQgSmFuIDI0IDExOjI1OjMwIDE5OTYgIEppbSBXaWxzb24gIDx3aWxzb25AY2hlc3RudXQuY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChwb2ludGVyX2ludF9zdW0pOiBVc2UgVFlQRV9QUkVDSVNJT04gKHNpemV0eXBlKSBub3QKCVBPSU5URVJfU0laRSB0byBhZ3JlZSB3aXRoIGV4cHIuYy4KClRodSBKYW4gMjUgMTM6MDE6MjMgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGxvb2t1cF9maWVsZCk6IERvbid0IHJlcG9ydCBhbWJpZ3VpdGllcyBpZiBwcm90ZWN0IGlzIDAsCglpbnN0ZWFkIHJldHVybiBOVUxMX1RSRUUuCgpXZWQgSmFuIDI0IDEzOjAxOjI2IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IENhbGwgd2Fybl9oaWRkZW4gaWYgd2Ugd2FudCB3YXJuaW5ncwoJYWJvdXQgb3ZlcmxvYWRlZCB2aXJ0dWFsIGZ1bmN0aW9ucy4KCSh3YXJuX2hpZGRlbik6IE5ldyByb3V0aW5lIHRvIHdhcm4gb2YgdmlydHVhbCBmdW5jdGlvbnMgdGhhdCBhcmUKCWhpZGRlbiBieSBvdGhlciB2aXJ0dWFsIGZ1bmN0aW9ucywgdGhhdCBhcmUgbm90IG92ZXJyaWRkZW4uCgkoZ2V0X2Jhc2VmbmRlY2xzKTogTmV3IHJvdXRpbmUsIHVzZWQgYnkgd2Fybl9oaWRkZW4uCgkobWFya19vdmVycmlkZXJzKTogTmV3IHJvdXRpbmUsIHVzZWQgYnkgd2Fybl9oaWRkZW4uCgkqIHNlYXJjaC5jIChnZXRfbWF0Y2hpbmdfdmlydHVhbCk6IFJlbW92ZSBvbGQgd2FybmluZyB0aGF0IGp1c3QKCWlzbid0IHZlcnkgdXNlZnVsLgoKVHVlIEphbiAyMyAxMjoyNjoxMCAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKG91dHB1dF9idWlsdGluX3RkZXNjX2VudHJpZXMpOiAjaWYgMCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCgkqIHR5cGVjay5jIChudWxsX3B0cl9jc3RfcCk6IERlbGV0ZSB1bnVzZWQgZm4uCgkoYnVpbGRfZnVuY3Rpb25fY2FsbF9tYXliZSk6IERlbGV0ZSB1bnVzZWQgZm4uCgoJKiBleHByLmMgKGV4dHJhY3RfaW5pdCk6ICNpZiAwIHRoZSBjb2RlIGFmdGVyIHVuY29uZGl0aW9uYWwgcmV0dXJuIDAKCWZvciBub3cuCgoJRGVsZXRlIG9sZCBjYWRpbGxhYyBjb2RlLgoJKiBlZHNlbC5jOiBSZW1vdmUgZmlsZS4KCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IFRha2UgZWRzZWwuYyBvZmYgdGhlIGxpc3QuCgkqIE1ha2VmaWxlLmluIChDWFhfT0JKUyk6IERlbGV0ZSBlZHNlbC5vLgoJKGVkc2VsLm8pOiBEZWxldGUgcnVsZS4KCSogY3AtdHJlZS5oIChmbGFnX2NhZGlsbGFjKTogRGVsZXRlIHZhciBkZWNsLgoJKiBsYW5nLW9wdGlvbnMuaDogRGVsZXRlICItZmNhZGlsbGFjIiBhbmQgIi1mbm8tY2FkaWxsYWMiLgoJKiBkZWNsMi5jIChmbGFnX2NhZGlsbGFjKTogRGVsZXRlIHZhciBkZWZpbml0aW9uLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IERlbGV0ZSBoYW5kbGluZyBvZiAtZmNhZGlsbGFjIGFuZCAtZm5vLWNhZGlsbGFjLgoJKGdyb2tmaWVsZCk6IERlbGV0ZSBjb2RlIGRlcGVuZGluZyBvbiBmbGFnX2NhZGlsbGFjLgoJKGZpbmlzaF9hbm9uX3VuaW9uKTogTGlrZXdpc2UuCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfMSk6IExpa2V3aXNlLgoJKHB1c2hjbGFzcyk6IExpa2V3aXNlLgoJKHBvcGNsYXNzKTogTGlrZXdpc2UuCgkocHVzaF9sYW5nX2NvbnRleHQpOiBMaWtld2lzZS4KCShwb3BfbGFuZ19jb250ZXh0KTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBMaWtld2lzZS4KCShzdGFydF9kZWNsKTogTGlrZXdpc2UuCgkoY3BfZmluaXNoX2RlY2wpOiBMaWtld2lzZS4KCSh4cmVmX3RhZyk6IExpa2V3aXNlLgoJKGZpbmlzaF9lbnVtKTogTGlrZXdpc2UuCgkoc3RhcnRfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfZnVuY3Rpb24pOiBMaWtld2lzZS4KCShmaW5pc2hfc3RtdCk6IExpa2V3aXNlLgoJKiBsZXguYyAobGFuZ19pbml0KTogTGlrZXdpc2UuCgkoY2hlY2tfbmV3bGluZSk6IExpa2V3aXNlLgoKCSogbGV4LmMgKGRvX3BlbmRpbmdfaW5saW5lcyk6IERlbGV0ZSBzeW50aGVzaXplZCBtZXRob2Qga2x1ZGdlLgoKCURlbGV0ZSBkZWZ1bmN0LCBhbmNpZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbi4KCSogcnR0aS5jOiBOZXcgZmlsZSB3aXRoIHRoZSBSVFRJIHN0dWZmIGZyb20gZ2MuYy4KCSogZ2MuYzogUmVtb3ZlZCBmaWxlIChtb3ZlZCB0aGUgcmVtYWluaW5nIHN0dWZmIGludG8gcnR0aS5jKS4KCSogTWFrZWZpbGUuaW4gKENYWF9PQkpTKTogUmVwbGFjZSBnYy5vIHdpdGggcnR0aS5vLgoJKHJ0dGkubyk6IE5ldyBydWxlLCByZXBsYWNpbmcgZ2Muby4KCSogTWFrZS1sYW5nLmluIChDWFhfU1JDUyk6IFJlcGxhY2UgZ2MuYyB3aXRoIHJ0dGkuYy4KCSogY3AtdHJlZS5oOiBEZWxldGUgZ2MtcmVsYXRlZCBmbiBkZWNscy4KCShERUNMX0dDX09GRlNFVCk6IERlbGV0ZSBtYWNyby4KCShmbGFnX2djKTogRGVsZXRlIGV4dGVybiBkZWNsLgoJKiBkZWNsLmMgKGN1cnJlbnRfZnVuY3Rpb25fb2JzdGFja19pbmRleCk6IERlbGV0ZSB2YXIgZGVjbC4KCShjdXJyZW50X2Z1bmN0aW9uX29ic3RhY2tfdXNhZ2UpOiBEZWxldGUgdmFyIGRlY2wuCgkoc3RhcnRfZnVuY3Rpb24pOiBEZWxldGUgY2xlYXJpbmcgb2YgY3VycmVudF9mdW5jdGlvbl9vYnN0YWNrX2luZGV4CglhbmQgY3VycmVudF9mdW5jdGlvbl9vYnN0YWNrX3VzYWdlLgoJKGluaXRfZGVjbF9wcm9jZXNzaW5nKTogRGVsZXRlIGNvZGUgcmVseWluZyBvbiAtZmdjLgoJRGVsZXRlIGNhbGwgdG8gaW5pdF9nY19wcm9jZXNzaW5nLgoJKGNwX2ZpbmlzaF9kZWNsKTogRGVsZXRlIGNhbGxzIHRvIGJ1aWxkX3N0YXRpY19nY19lbnRyeSBhbmQKCXR5cGVfbmVlZHNfZ2NfZW50cnkuICBEZWxldGUgZ2MgY29kZSBzZXR0aW5nIERFQ0xfR0NfT0ZGU0VULgoJKHN0b3JlX3Bhcm1fZGVjbHMpOiBEZWxldGUgLWZnYyBjYWxscyB0byBjcF9leHBhbmRfZGVjbF9jbGVhbnVwCglhbmQgdG8gZXhwYW5kX2V4cHIgb2YgYSBfX2djX21haW4gY2FsbC4KCShtYXliZV9nY19jbGVhbnVwKTogRGVsZXRlIHZhciBkZWNsLgoJKGZpbmlzaF9mdW5jdGlvbik6IERlbGV0ZSBjYWxsIHRvIGV4cGFuZF9nY19wcm9sb2d1ZV9hbmRfZXBpbG9ndWUuCgkqIGRlY2wyLmMgKGZsYWdfZ2MpOiBEZWxldGUgdmFyIGRlY2wuCgkobGFuZ19mX29wdGlvbnMpOiBEZWxldGUgb2ZmZXJpbmcgb2YgLWZnYy4KCShsYW5nX2RlY29kZV9vcHRpb24pOiBEZWxldGUgLWZnYyBhbmQgLWZuby1nYyBoYW5kbGluZy4KCShnZXRfdGVtcF9yZWd2YXIpOiBEZWxldGUgZ2MgY29kZS4KCSogaW5pdC5jIChidWlsZF9uZXcpOiBEZWxldGUgZ2MgY29kZS4KCSogbGV4LmMgKGluaXRfbGV4KTogRGVsZXRlIGNoZWNraW5nIG9mIGZsYWdfZ2MuCgoJKiB0eXBlY2suYyAoY29udmVydF9hcmd1bWVudHMpOiBEZWxldGUgZ2MgY29kZS4KCShidWlsZF9jb21wb25lbnRfYWRkcik6IERlbGV0ZSAtZmdjIHdhcm5pbmcuCgkoYnVpbGRfbW9kaWZ5X2V4cHIpOiBEZWxldGUgZ2MgY29kZS4KCgkqIGRlY2wyLmMgKGJ1aWxkX3B1c2hfc2NvcGUpOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAoYnVpbGRfcHVzaF9zY29wZSk6IERlbGV0ZSBkZWNsLgoKCSogc2VhcmNoLmMgKGNsZWFyX3NlYXJjaF9zbG90cyk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChjbGVhcl9zZWFyY2hfc2xvdHMpOiBEZWxldGUgZGVjbC4KCgkqIHNlYXJjaC5jICh0cmVlX25lZWRzX2NvbnN0cnVjdG9yX3ApOiBEZWxldGUgZm4uCgkqIGNwLXRyZWUuaCAodHJlZV9uZWVkc19jb25zdHJ1Y3Rvcl9wKTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGlkX2NtcCk6IERlbGV0ZSBmbi4KCgkqIHRyZWUuYyAoc2V0X2ZuYWRkcl9mcm9tX3Z0YWJsZV9lbnRyeSk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChzZXRfZm5hZGRyX2Zyb21fdnRhYmxlX2VudHJ5KTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGRlY2xfdmFsdWVfbWVtYmVyKTogRGVsZXRlIGZuLgoJKiBjcC10cmVlLmggKGRlY2xfdmFsdWVfbWVtYmVyKTogRGVsZXRlIGRlY2wuCgoJKiB0cmVlLmMgKGxpc3RfaGFzaF9sb29rdXBfb3JfY29ucyk6IERlbGV0ZSBmbi4KCSogY3AtdHJlZS5oIChsaXN0X2hhc2hfbG9va3VwX29yX2NvbnMpOiBEZWxldGUgZGVjbC4KCgkqIG1ldGhvZC5jIChjcGx1c19leGNlcHRpb25fbmFtZSk6IERlbGV0ZSBmbi4KCShFWENFUFRJT05fTkFNRV97UFJFRklYLCBMRU5HVEh9KTogRGVsZXRlIG1hY3Jvcy4KCgkqIHNwZXcuYyAoc2hpZnRfdG9rZW5zKTogRGVsZXRlIGZuLgoKTW9uIEphbiAyMiAxNzo0OTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoaW5pdF9leGNlcHRpb25fcHJvY2Vzc2luZyk6IFBhc3MgMSB0byBuZWVkc19wb3AgaW4gY2FsbHMKCXRvIGNwX2ZpbmlzaF9kZWNsLgoJKiBwYXJzZS55OiBMaWtld2lzZS4KCk1vbiBKYW4gMjIgMTc6MzQ6MjkgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9jcGx1c19zdGF0aWNmbl90eXBlKTogRGVsZXRlIGZ1bmN0aW9uIGRlZmluaXRpb247CgluZXZlciB1c2VkLgoJKiBjcC10cmVlLmggKGJ1aWxkX2NwbHVzX3N0YXRpY2ZuX3R5cGUpOiBEZWxldGUgZGVjbC4KCgkqIHRyZWUuYyAodmlydHVhbF9tZW1iZXIpOiBEZWxldGUgZnVuY3Rpb24gZGVmaW5pdGlvbjsgbmV2ZXIgdXNlZC4KCSogY3AtdHJlZS5oICh2aXJ0dWFsX21lbWJlcik6IERlbGV0ZSBkZWNsLgoKRnJpIEphbiAxOSAxODowMzoxNCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfY29tcG9uZW50X3JlZik6IEhhbmRsZSBnZXR0aW5nIHZiYXNlIHBvaW50ZXJzCglvdXQgb2YgY29tcGxleCBtdWx0aXBsZSBpbmhlcml0YW5jZSBiZXR0ZXIuCgpGcmkgSmFuIDE5IDE2OjI3OjQwIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjay5jIChidWlsZF9vYmplY3RfcmVmKTogTWFrZSBzdXJlIHdlIHVzZSB0aGUgcmVhbCB0eXBlLCBub3QKCWFueSByZWZlcmVuY2UgdHlwZS4KCkZyaSBKYW4gMTkgMTY6MDE6NDcgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHJlZS5jIChidWlsZF9leGNlcHRpb25fdmFyaWFudCk6IERvbid0IGNyZWF0ZSBuZXcgdHlwZXMgaWYgd2UKCWRvbid0IGhhdmUgdG8sIGFsc28gYnVpbGQgbmV3IHR5cGVzIG9uIHRoZSByaWdodCBvYnN0YWNrLgoKRnJpIEphbiAxOSAxNDowOTo0NCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHN0b3JlX2JpbmRpbmdzKTogU3BsaXQgb3V0IGZyb20gcHVzaF90b190b3BfbGV2ZWwuCgkocHVzaF90b190b3BfbGV2ZWwpOiBDYWxsIGl0IGZvciBiLT50eXBlX3NoYWRvd2VkIG9uIGNsYXNzIGJpbmRpbmcKCWxldmVscy4KCkZyaSBKYW4gMTkgMTM6NTM6MTQgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogc2VhcmNoLmMgKGV4cGFuZF91cGNhc3RfZml4dXBzKTogRml4IHNvIHRoYXQgb2Zmc2V0cyBzdG9yZWQgaW4KCXZiYXNlX29mZnNldHMgYXJlIGFsd2F5cyByaWdodC4gIEZpeGVzIGEgcHJvYmxlbSB3aGVyZSB2aXJ0dWFsIGJhc2UKCXVwY2FzdGluZyBhbmQgZG93bmNhc3RpbmcgY291bGQgYmUgd3JvbmcgZHVyaW5nIGNvbnZlcnNpb25zIG9uIHRoaXMKCWR1cmluZyB2aXJ0dWFsIGZ1bmN0aW9uIGRpc3BhdGNoIGF0IGN0b3IvZHRvciB0aW1lIHdoZW4gZHluYW1pYwoJdnRhYmxlIGZpeHVwcyBmb3IgZGVsdGFzIGFyZSBuZWVkZWQuICBUaGlzIG9ubHkgc291bmRzIGVhc2llciB0aGFuCglpdCBpcy4gIDotKQoJKGZpeHVwX3ZpcnR1YWxfdXBjYXN0X29mZnNldHMpOiBDaGFuZ2UgdG8gcmVmbGVjdCBuZXcgY2FsbGluZwoJY29udmVudGlvbiBmb3IgZXhwYW5kX3VwY2FzdF9maXh1cHMuCgpGcmkgSmFuIDE5IDEyOjIzOjA4IDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGdyb2tiaXRmaWVsZCk6IFN0cmlwIHRoZSBOT1BzIGZyb20gV0lEVEggYmVmb3JlIHdlCgljaGVjayB0aGF0IGl0J3MgdXNhYmxlIGFzIHRoZSBiaXRmaWVsZCB3aWR0aC4KCldlZCBKYW4gMTcgMjE6MjI6NDAgMTk5NiAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbDIuYyAoZ3Jva2ZpZWxkKTogQ2FsbCBjcGx1c19kZWNsX2F0dHJpYnV0ZXMgd2l0aCB0aGUgYXR0cmxpc3QuCglQYXNzIGEgbnVsbCB0cmVlIHRvIGdyb2tkZWNsYXJhdG9yIGZvciBpdHMgQVRUUkxJU1QgYXJnLCBzaW5jZSBpdCdzCglvbmx5IGV2ZXIgdXNlZCBmb3IgZnVuY3Rpb25zIGluIGl0LgoKV2VkIEphbiAxNyAxMjoxMDozOCAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBwYXJzZS55IChxdWFsaWZpZWRfdHlwZV9uYW1lKTogVXNlIHRoZSBUWVBFX0RFQ0wsIG5vdCB0aGUgdHlwZS4KCShuZXN0ZWRfdHlwZSk6IExpa2V3aXNlLgoJKG5lc3RlZF9uYW1lX3NwZWNpZmllcik6IFVzZSBsYXN0aWRkZWNsLgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IEFkanVzdCBhY2NvcmRpbmdseS4KCSogaW5pdC5jIChleHBhbmRfbWVtYmVyX2luaXQpOiBMaWtld2lzZS4KCSogcGFyc2UueSAoYmFzZV9jbGFzcyk6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGJ1aWxkX2Z1bmN0aW9uYWxfY2FzdCk6IExpa2V3aXNlLgoKCSogdHlwZWNrMi5jIChidWlsZF9mdW5jdGlvbmFsX2Nhc3QpOiBGaWxsIGluIG5hbWUgYWZ0ZXIgd2UndmUKCWNoZWNrZWQgZm9yIG5vbi1hZ2dyIHR5cGUuCgpXZWQgSmFuIDE3IDEwOjE4OjAxIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKHdhcm5fcG9pbnRlcl9hcml0aCk6IERlZmF1bHQgdG8gb24uCgpUdWUgSmFuIDE2IDEyOjQ1OjM4IDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxleC5jIChpc19yaWQpOiBOZXcgZnVuY3Rpb24uCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBEaWFnbm9zZSByZXNlcnZlZCB3b3JkcyB1c2VkIGFzCglkZWNsYXJhdG9yLWlkcy4KClR1ZSBKYW4gMTYgMTE6Mzk6NDAgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jIChnZXRfZGVjbF9saXN0KTogRG9uJ3QgbG9zZSBjdi1xdWFscy4KCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBGaXggU0NPUEVfUkVGIGhhbmRsaW5nIGFuZCBkaWFnbm9zZQoJdHlwZXNwZWNzIHVzZWQgYXMgZGVjbGFyYXRvci1pZHMuCgpUdWUgSmFuIDE2IDExOjA5OjQyIDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAocG9wbGV2ZWwpOiBXaGVuIHBvcGluZyBhIGxldmVsLCBkb24ndCBnaXZlIGEgd2FybmluZyBmb3IKCWFueSBzdWJibG9ja3MgdGhhdCBhbHJlYWR5IGV4aXN0LgoKVHVlIEphbiAxNiAwMDoyNTozMyAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAoYnVpbGRfb2JqZWN0X3JlZik6IEZpbmlzaCB3aGF0IEkgc3RhcnRlZC4KCgkqIHBhcnNlLnkgKHF1YWxpZmllZF90eXBlX25hbWUpOiBEb24ndCBjaGVjayBUWVBFX0JVSUxUX0lOLgoKCSogZGVjbDIuYyAoY29uc3RydWN0b3JfbmFtZV9mdWxsKTogSGFuZGxlIFRFTVBMQVRFX1RZUEVfUEFSTXMuCgoJKiBkZWNsLmMgKGdyb2tkZWNsYXJhdG9yKTogQWxzbyBhY2NlcHQgVEVNUExBVEVfVFlQRV9QQVJNIGFzIGEKCXNjb3BlLgoKTW9uIEphbiAxNSAxNjoxOTozMiAxOTk2ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHhyZWZfdGFnKTogSGFuZGxlIHBhc3NpbmcgYSB0eXBlIGluIGRpcmVjdGx5LgoKCSogcGFyc2UueSAocXVhbGlmaWVkX3R5cGVfbmFtZSk6IFB1bGwgb3V0IHRoZSB0eXBlLgoJKG5lc3RlZF90eXBlKTogTGlrZXdpc2UuCglUYWtlIHR5cGVzIGRpcmVjdGx5IGluc3RlYWQgb2YgYXMgaWRlbnRpZmllcnMuCgkqIGNhbGwuYyAoYnVpbGRfc2NvcGVkX21ldGhvZF9jYWxsKTogVGFrZSB0eXBlcyBkaXJlY3RseSBpbnN0ZWFkIG9mCglhcyBpZGVudGlmaWVycy4KCSogZGVjbC5jICh4cmVmX2Jhc2V0eXBlcyk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKGJ1aWxkX21lbWJlcl9jYWxsKTogTGlrZXdpc2UuCgkoYnVpbGRfb2Zmc2V0X3JlZik6IExpa2V3aXNlLgoJKiB0eXBlY2syLmMgKGJ1aWxkX3Njb3BlZF9yZWYpOiBMaWtld2lzZSwgcmVtb3ZlIGJvZ3VzIGNvZGUuCgkqIG1ldGhvZC5jIChkb19idWlsZF9hc3NpZ25fcmVmKTogTGlrZXdpc2UuCgkqIGRlY2wuYyAoZ3Jva2RlY2xhcmF0b3IpOiBIYW5kbGUgYSB0eXBlIGFwcGVhcmluZyBhcyB0aGUKCWRlY2xhcmF0b3ItaWQgZm9yIGNvbnN0cnVjdG9ycy4KCSogbWV0aG9kLmMgKGRvX2J1aWxkX2NvcHlfY29uc3RydWN0b3IpOiBjdXJyZW50X2Jhc2VfaW5pdF9saXN0IG5vdwoJdXNlcyB0aGUgdHlwZXMgZGlyZWN0bHksIG5vdCB0aGVpciBuYW1lcy4KCSogaW5pdC5jIChzb3J0X2Jhc2VfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9tZW1iZXJfaW5pdCk6IExpa2V3aXNlLgoJKiBpbml0LmMgKGlzX2FnZ3JfdHlwZSk6IE5ldyBmdW5jdGlvbiwgbGlrZSBpc19hZ2dyX3R5cGVkZWYuCgpNb24gSmFuIDE1IDA4OjQ1OjAxIDE5OTYgIEplZmZyZXkgQSBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAobGF5b3V0X2Jhc2V0eXBlcyk6IENhbGwgYnVpbGRfbGFuZ19maWVsZF9kZWNsIGluc3RlYWQKCW9mIGJ1aWxkX2xhbmdfZGVjbCBpZiBmaXJzdCBhcmcgaXMgYSBGSUVMRF9ERUNMLgoKVGh1IEphbiAxMSAxNDo1NTowNyAxOTk2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGNwX2ZpbmlzaF9kZWNsKTogT25seSBjbGVhciBUUkVFX1VTRUQgaWYgREVDTF9OQU1FIGlzCglub24tZW1wdHkuCgkqIGV4Y2VwdC5jIChleHBhbmRfc3RhcnRfY2F0Y2hfYmxvY2spOiBTZXQgVFJFRV9VU0VEIHRvIGF2b2lkCgl3YXJuaW5ncyBhYm91dCB0aGUgY2F0Y2ggaGFuZGxlci4KCk1vbiBKYW4gIDggMTc6MzU6MTIgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGJ1aWxkX21vZGlmeV9leHByKTogVXNlIGEgQ09NUE9VTkRfRVhQUiBpbnN0ZWFkIG9mCglleHBhbmRfdGFyZ2V0X2V4cHIuCgpUaHUgSmFuICA0IDEyOjMwOjMyIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCglGaXggYWNjZXNzIGNvbnRyb2wgdG8gdXNlIHRyZWVzIHJhdGhlciB0aGFuIGludGVnZXJzLgoJKiBjbGFzcy5jIChhY2Nlc3Nfe2RlZmF1bHQsIHB1YmxpYywgcHJvdGVjdGVkLCBwcml2YXRlLAoJZGVmYXVsdF92aXJ0dWFsLCBwdWJsaWNfdmlydHVhbCwgcHJpdmF0ZV92aXJ0dWFsfV9ub2RlKTogQWRkCglkZWZpbml0aW9ucy4KCShpbml0X2NsYXNzX3Byb2Nlc3NpbmcpOiBEbyBjcmVhdGlvbiBvZiB0aG9zZSBub2Rlcy4KCSogY3AtdHJlZS5oIChhY2Nlc3NfdHlwZSk6IERlbGV0ZSBlbnVtIGRlY2wuCgkoYWNjZXNzX3tkZWZhdWx0LCBwdWJsaWMsIHByb3RlY3RlZCwgcHJpdmF0ZSwgZGVmYXVsdF92aXJ0dWFsLAoJcHVibGljX3ZpcnR1YWwsIHByaXZhdGVfdmlydHVhbH1fbm9kZSk6IEFkZCBkZWNscy4KCShjb21wdXRlX2FjY2Vzcyk6IENoYW5nZSByZXR1cm4gdHlwZS4KCSogc2VhcmNoLmMgKGNvbXB1dGVfYWNjZXNzKTogSGF2ZSB0cmVlIHJldHVybiB0eXBlLCBpbnN0ZWFkIG9mIGVudW0uCgkobG9va3VwX2ZpZWxkKTogRGVjbGFyZSBUSElTX1YgYW5kIE5FV19WIHRvIGJlIHRyZWUgbm9kZXMuCgkqIGxleC5jIChyZWFsX3l5bGV4KTogVXNlIHl5bHZhbC50dHlwZSBmb3IgZ2l2aW5nIHRoZSB2YWx1ZSBvZiB0aGUKCWFjY2Vzc18qIG5vZGUgZm9yIGVhY2ggb2YgUklEX3tQVUJMSUMsIFBSSVZBVEUsIFBST1RFQ1RFRH0uCgkqIHBhcnNlLnkgKFZJU1NQRUMpOiBNYWtlIHR0eXBlIHJhdGhlciB0aGFuIGl0eXBlLgoJKGJhc2VfY2xhc3NfYWNjZXNzX2xpc3QpOiBMaWtld2lzZS4KCSogKi5bY3ldOiBDaGFuZ2UgYWxsIHJlZnMgb2YgYGFjY2Vzc19wdWJsaWMnIHRvIGBhY2Nlc3NfcHVibGljX25vZGUnLAoJZXRjLgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogTWFrZSBBQ0NFU1MgYmUgYSB0cmVlLgoJKiBjbGFzcy5jIChhbHRlcl9hY2Nlc3MsIGZpbmlzaF9zdHJ1Y3RfMSwgZmlsdGVyX3N0cnVjdCk6IExpa2V3aXNlLgoJKiBjdnQuYyAoY29udmVydF90b19hZ2dyKTogTGlrZXdpc2UuCgkqIGluaXQuYyAoYnVpbGRfb2Zmc2V0X3JlZiwgcmVzb2x2ZV9vZmZzZXRfcmVmLCBidWlsZF9kZWxldGUpOgoJTGlrZXdpc2UuCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBMaWtld2lzZS4KCSogdHlwZWNrLmMgKGJ1aWxkX2NvbXBvbmVudF9yZWZfMSwgYnVpbGRfY29tcG9uZW50X3JlZik6ICk6IExpa2V3aXNlLgoKVGh1IEphbiAgNCAxMTowMjoyMCAxOTk2ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiB0eXBlY2suYyAocG9pbnRlcl9pbnRfc3VtLCBwb2ludGVyX2RpZmYpOiBNYWtlIGNvZGUgYWdyZWUgd2l0aCBDCglmcm9udGVuZCwgYW5kIG1ha2UgaXQgbW9yZSBjb25zaXN0ZW50IHdpdGggcmVzcGVjdCB0bwoJd2Fybl9wb2ludGVyX2FyaXRoLgoKVHVlIEphbiAgMiAwMDoxMzozOCAxOTk2ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIGRlY2wuYyAocHVzaGRlY2wpOiBDaGVjayBmb3IgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcy4KCldlZCBKYW4gIDMgMDk6MjU6NDggMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBDYWxsIGFzc2VtYmxlX2V4dGVybmFsIGZvciBhdGV4aXQuCgpXZWQgSmFuICAzIDA3OjU1OjE5IDE5OTYgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChkb191bndpbmQpOiBSZW1vdmUgc29tZSBnZW5lcmF0ZWQgZGVhZCBjb2RlLgoJKGVoX291dGVyX2NvbnRleHQpOiBOZXcgcm91dGluZSwgZmFjdG9yIG91dCBzb21lIGNvbW1vbiBjb2RlIGZyb20KCWV4cGFuZF9idWlsdGluX3Rocm93IGFuZCBlbmRfZWhfdW53aW5kZXIuICBBZGQgY29kZSB0byBkbyByZXR1cm4KCWFkZHJlc3MgbWFza2luZyBmb3IgdGhlIFBBLgoJKGV4cGFuZF9idWlsdGluX3Rocm93KTogVXNlIGVoX291dGVyX2NvbnRleHQgaW5zdGVhZCBvZiBvcGVuIGNvZGluZwoJaXQgaGVyZS4KCShlbmRfZWhfdW53aW5kZXIpOiBMaWtld2lzZS4KClR1ZSBKYW4gIDIgMTc6MDA6NTYgMTk5NiAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF90aHJvdyk6IENhbGwgYXNzZW1ibGVfZXh0ZXJuYWwgZm9yIF9fZW1wdHksIGlmIHdlCgl1c2UgaXQuCgpUaHUgRGVjIDI4IDExOjEzOjE1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfYnVpbHRpbl90aHJvdyk6IFVzZSBSRVRVUk5fQUREUl9PRkZTRVQgaW5zdGVhZCBvZgoJTk9STUFMX1JFVFVSTl9BRERSX09GRlNFVC4KCShlbmRfZWhfdW53aW5kZXIpOiBMaWtld2lzZS4KCldlZCBEZWMgMjcgMjI6MTg6MTYgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZ2MuYyAoYnVpbGRfZHluYW1pY19jYXN0KTogTWFrZSBzdXJlIHdlIGRvbid0IGNhc3QgYXdheSBjb25zdAoJd2hlbiBkZWFsaW5nIHdpdGggcmVmZXJlbmNlcywgYW5kIG1ha2Ugc3VyZSB3ZSBoYW5kbGUgZHluYW1pYwoJY2FzdGluZyB0byBhIGN2IHF1YWxpZmllZCByZWZlcmVuY2UuCgpUaHUgRGVjIDIxIDIzOjUwOjM1IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChzdHJ1Y3QgZWhfY29udGV4dCk6IE5ldyBzdHJ1Y3R1cmUgdG9wIGhvbGQgZWggY29udGV4dAoJaW5mb3JtYXRpb24uCgkocHVzaF9laF9jb250ZXh0KTogTmV3IHJvdXRpbmUuCgkocG9wX2VoX2NvbnRleHQpOiBMaWtld2lzZS4KCSogZGVjbC5jIChwdXNoX2NwX2Z1bmN0aW9uX2NvbnRleHQpOiBVc2UgdGhlbS4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IExpa2V3aXNlLgoKV2VkIERlYyAyMCAxMjo0Mjo1MSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IEFsc28gcHJ1bmUgdW5pbnRlcmVzdGluZyBmdW5jdGlvbnMgaW4gdGhlCglpbmxpbmUgZW1pc3Npb24gbG9vcC4KCldlZCBEZWMgMjAgMDI6MzI6MDcgMTk5NSAgSmVmZnJleSBBIExhdyAgPGxhd0BjeWdudXMuY29tPgoKCSogc2lnLmMgKGJ1aWxkX3NpZ25hdHVyZV90YWJsZV9jb25zdHJ1Y3Rvcik6IE1hcmsgZnVuY3Rpb25zCglpbiB0aGUgc2lnbmF0dXJlIGFzIHJlZmVyZW5jZWQuCgpUdWUgRGVjIDE5IDIyOjM2OjU2IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKGZpbmlzaF9maWxlKTogRG8gYWxsIHRoZSB2dGFibGUvc3ludGhlc2lzIHN0dWZmIGJlZm9yZQoJdGhlIGlubGluZSBlbWlzc2lvbiBzdHVmZi4KCk1vbiBEZWMgMTggMTU6NTE6MzMgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3AtdHJlZS5oLCBkZWNsMi5jIChmbGFnX3dlYWspOiBOZXcgZmxhZyB0byBjb250cm9sIHRoZSB1c2Ugb2YKCXdlYWsgc3ltYm9scy4KCSogbGFuZy1vcHRpb25zLmg6IEFkZCAtZntuby0sfXdlYWsuCgkqIGRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBJZiB0aGUgdGFyZ2V0IGRvZXMgbm90IHN1cHBvcnQgd2VhawoJc3ltYm9scywgZG9uJ3QgdXNlIHRoZW0uCgkqIGRlY2wyLmMsIHB0LmM6IHMvU1VQUE9SVFNfV0VBSy9mbGFnX3dlYWsvLgoKU3VuIERlYyAxNyAyMToxMzoyMyAxOTk1ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIGluaXQuYyAoZXhwYW5kX21lbWJlcl9pbml0KTogd2FybmluZyBmb3IgYmFzZSBpbml0IGFmdGVyIG1lbWJlcnMuCgpGcmkgRGVjIDE1IDE1OjMyOjE4IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGN2dC5jIChidWlsZF9leHByX3R5cGVfY29udmVyc2lvbik6IERvbid0IGNvbnZlcnQgdG8gYSByZWZlcmVuY2UKCXR5cGUuCgpUaHUgRGVjIDE0IDE2OjA1OjU4IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChyZXBvcnRfdHlwZV9taXNtYXRjaCk6IEltcHJvdmUgd29yZGluZyBmb3Igdm9sYXRpbGUKCW1pc21hdGNoZXMuCgpUaHUgRGVjIDE0IDE0OjE2OjI2IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGluaXQuYyAoZXhwYW5kX2FnZ3JfaW5pdF8xKTogVXNlIGV4cGFuZF9hZ2dyX2luaXRfMSBpbnN0ZWFkIG9mCglleHBhbmRfYXNzaWdubWVudCwgYXMgdGhlIGxhdGVyIGRvZXNuJ3QgaGFuZGxlIHRoaW5ncyB0aGF0IGhhdmUKCWNvcHkgY29uc3RydWN0b3JzIHdlbGwuICBUaGUgY29tcGlsZXIgd291bGQgZG8gYml0d2lzZSBjb3B5aW5nLAoJaW5zdGVhZCBvZiBjdG9yIGNhbGxpbmcgaW4gc29tZSBjYXNlcy4KCldlZCBEZWMgMTMgMTc6MDU6NTQgMTk5NSAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgoJKiBnKysuYyAobXlfc3RyZXJyb3IpOiBSZXR1cm4gImNhbm5vdCBhY2Nlc3MiIGlmIGVycm5vIGlzIDAuCgkocGZhdGFsX3dpdGhfbmFtZSwgcGVycm9yX2V4ZWMpOiBEb24ndCBhc3N1bWUgdGhhdAoJdGhlIHJldHVybmVkIHZhbHVlIGZyb20gbXlfc3RyZXJyb3IgY29udGFpbnMgbm8gJyUncy4KCShjb25jYXQpOiBSZW1vdmUuCgkoc3lzX25lcnJvcik6IERlY2xhcmUgb25seSBpZiBIQVZFX1NUUkVSUk9SIGlzIG5vdCBkZWZpbmVkLgoKV2VkIERlYyAxMyAxNjoyMjozOCAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJTG9zZSBDTEFTU1RZUEVfTUVUSE9EUy9ERUNMX05FWFRfTUVUSE9EIGNoYWluOyBtYWtlCglUWVBFX01FVEhPRFMvVFJFRV9DSEFJTiBtZWFuIHdoYXQgdGhleSB1c2VkIHRvLgoJKiBkZWNsMi5jIChjb25zdHJ1Y3Rvcl9uYW1lX2Z1bGwpOiBSZWZlciB0byBDTEFTU1RZUEVfTUVUSE9EX1ZFQwoJaW5zdGVhZCBvZiBUWVBFX01FVEhPRFMuCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogTG9zZSByZWZlcmVuY2VzIHRvIERFQ0xfTkVYVF9NRVRIT0QuCgkqIHRyZWUuYyAodHJlZV9jb3B5X2xhbmdfZGVjbF9mb3JfZGVmZXJyZWRfb3V0cHV0KTogTGlrZXdpc2UuCgkqIGNwLXRyZWUuaCAoQ0xBU1NUWVBFX01FVEhPRFMpOiBMb3NlLgoJKENMQVNTVFlQRV9NRVRIT0RfVkVDKTogUG9pbnQgdG8gbGFuZ19zcGVjLT5tZXRob2RzIGluc3RlYWQgb2YKCVRZUEVfTUVUSE9EUy4KCShzdHJ1Y3QgbGFuZ19kZWNsKTogTG9zZSBuZXh0X21ldGhvZCBmaWVsZC4KCShERUNMX05FWFRfTUVUSE9EKTogTG9zZS4KCSogY2xhc3MuYyAoZmluaXNoX3N0cnVjdF9tZXRob2RzKTogRG9uJ3QgbWVzcyB3aXRoIFRZUEVfTUVUSE9EUy4KCShmaW5pc2hfc3RydWN0KTogSnVzdCB1c2UgVFlQRV9NRVRIT0RTOyB3ZSBkb24ndCBuZWVkIGZuX2ZpZWxkcwoJYW55bW9yZS4KCShmaW5pc2hfc3RydWN0X21ldGhvZHMpOiBEb24ndCBtZXNzIHdpdGggdGhlIFRSRUVfQ0hBSU5zIGluCglmbl9maWVsZHMuCgoJKiBzZWFyY2guYyAoYWRkX2NvbnZlcnNpb25zKTogRG9uJ3QgdXNlIFRSRUVfQ0hBSU4gdG8gdHJhdmVyc2UgbWV0aG9kCgl2ZWN0b3IuCgoJKiBjYWxsLmMgKGJ1aWxkX21ldGhvZF9jYWxsKTogU3ludGhlc2l6ZSBoZXJlIGV2ZW4gd2hlbiBub3QgaW5saW5pbmcuCgkqIHR5cGVjay5jIChidWlsZF9mdW5jdGlvbl9jYWxsX3JlYWwpOiBMaWtld2lzZS4KCldlZCBEZWMgMTMgMTU6MDI6MzkgMTk5NSAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY3AvbGV4LmMgKGNoZWNrX25ld2xpbmUpOiBJZiBEQlhfREVCVUdHSU5HX0lORk8gYW5kIHdyaXRlX3N5bWJvbHMKCT09IERCWF9ERUJVRywgY2FsbCBkYnhvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlIGFuZAoJZGJ4b3V0X3Jlc3VtZV9wcmV2aW91c19zb3VyY2VfZmlsZSB3aGVuIGFwcHJvcHJpYXRlLgoKVHVlIERlYyAxMiAyMDozODo1NSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoc3RhcnRfYW5vbl9mdW5jKTogUHVzaCB0byB0aGUgdG9wIGxldmVsLgoJKGVuZF9hbm9uX2Z1bmMpOiBQb3AgZnJvbSB0aGUgdG9wIGxldmVsLgoKTW9uIERlYyAxMSAxODo1NjoxNCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjcC10cmVlLmggKGJ1aWxkX2NsZWFudXApOiBOZXcgcm91dGluZSB0byBidWlsZCBjbGVhbnVwcy4KCSogZGVjbC5jIChleHBhbmRfc3RhdGljX2luaXQpOiBVc2UgYnVpbGRfY2xlYW51cCB0byBidWlsZCBhIGNsZWFudXAKCWNhbGwgYXQgY3RvciB0aW1lIGFuZCB1c2UgYXRleGl0IHRvIHJ1biBpdCBsYXRlci4KCSogZGVjbDIuYyAoYnVpbGRfY2xlYW51cCk6IE5ldyByb3V0aW5lLCB0YWtlbiBmcm9tIGZpbmlzaF9maWxlLgoJKGZpbmlzaF9maWxlKTogVXNlIGJ1aWxkX2NsZWFudXAgaW5zdGVhZCwgYW5kIGRvbid0IHB1dCBmdW5jdGlvbgoJbG9jYWwgc3RhdGljcyBpbiBnbG9iYWwgZHRvciBsaXN0LgoKV2VkIERlYyAgNiAxNDozNDoyOSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogRW5zdXJlIHRoYXQgd2UgaGF2ZSBjbGVhbnVwcywgaWYgd2UgdHJ5CglhbmQgZXhwYW5kIGNsZWFudXBzLgoKV2VkIERlYyAgNiAxMTo0ODoyMSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoZXhwYW5kX3Rocm93KTogQWRkIGxvZ2ljIHRvIG1hbmFnZSBkeW5hbWljIGNsZWFudXBzIGZvcgoJdGhlIEVIIG9iamVjdC4KCShleHBhbmRfZW5kX2NhdGNoX2Jsb2NrKTogVXNlIHRoZSBtYWdpYyBvZiBleHBhbmRfZ290bywgaW5zdGVhZCBvZgoJZW1pdF9qdW1wIHNvIHRoYXQgd2UgZ2V0IHRoZSBjbGVhbnVwIGZvciBhbnkgY2F0Y2ggY2xhdXNlIHBhcmFtZXRlcgoJYW5kIHRoZSBjbGVhbnVwIGZvciB0aGUgZXhjZXB0aW9uIG9iamVjdC4gIFVwZGF0ZSB0byByZWZsZWN0IGxhYmVsCgljaGFuZ2VzLgoJKHB1c2hfZWhfY2xlYW51cCk6IE5ldyByb3V0aW5lIHRvIHJlZ2lzdGVyIGEgY2xlYW51cCBmb3IgYW4KCWV4Y2VwdGlvbiBvYmplY3QuCgkoZW1wdHlfZm5kZWNsKTogVXNlZCB0byBkZWZhdWx0IGNsZWFudXAgYWN0aW9ucyB0bwoJbm90aGluZy4KCShpbml0X2V4Y2VwdGlvbl9wcm9jZXNzaW5nKTogU2V0dXAgZW1wdHlfZm5kZWNsLiAgU2V0dXAKCXNhdmVkX2NsZWFudXAuCgkoZXhwYW5kX3N0YXJ0X2NhdGNoX2Jsb2NrKTogVXBkYXRlIHRvIHJlZmxlY3QgbGFiZWwgY2hhbmdlcy4gIENhbGwKCXB1c2hfZWhfb2JqZWN0IHRvIHJlZ2lzdGVyIHRoZSBjbGVhbnVwIGZvciB0aGUgRUggb2JqZWN0LgoJKHN0YXJ0X2Fub25fZnVuYyk6IE5ldyByb3V0aW5lIHRvIHN0YXJ0IGJ1aWxkaW5nIGxhbWJkYSBleHByZXNzaW9ucwoJZnJvbSB0cmVlcy4KCShlbmRfYW5vbl9mdW5jKTogTmV3IHJvdXRpbmUgdG8gZW5kIHRoZW0uCgkoc3RydWN0IGxhYmVsTm9kZSk6IENoYW5nZSBzbyB0aGF0IHdlIGNhbiB1c2UgdHJlZSBsYWJlbHMsIG9yIHJ0eAoJbGFiZWxzLgoJKHNhdmVkX2NsZWFudXApOiBPYmplY3QgdG8gY2hlY2sgZm9yIGR5bmFtaWMgY2xlYW51cHMgZm9yIHRoZQoJZXhjZXB0aW9uIGhhbmRsaW5nIG9iamVjdC4KCShwdXNoX2xhYmVsX2VudHJ5KTogQ2hhbmdlIHNvIHRoYXQgd2UgY2FuIHVzZSB0cmVlIGxhYmVscywgb3IgcnR4CglsYWJlbHMuCgkocG9wX2xhYmVsX2VudHJ5KTogTGlrZXdpc2UuCgkodG9wX2xhYmVsX2VudHJ5KTogTGlrZXdpc2UuCgkoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6IFVzZSB0cmVlIGxhYmVsIGluc3RlYWQgb2YgcnR4IGxhYmVsLCBzbwoJdGhhdCB3ZSBjYW4gZ2V0IHRoZSBtYWdpYyBvZiBleHBhbmRfZ290by4KCShleHBhbmRfZW5kX2FsbF9jYXRjaCk6IFVwZGF0ZSB0byByZWZsZWN0IGxhYmVsIGNoYW5nZXMuCgoJKiBjbGFzcy5jIChidWlsZF92Zm5fcmVmKTogUmVtb3ZlIGJ1aWxkaW5nX2NsZWFudXAgbG9naWMsIGFzIHdlIG5vdwoJdXNlIFVOU0FWRV9FWFBScy4KCSogdHlwZWNrLmMgKGdldF9tZW1iZXJfZnVuY3Rpb25fZnJvbV9wdHJmdW5jKTogUmVtb3ZlIHJlbW5hbnRzIG9mCglidWlsZGluZ19jbGVhbnVwIGxvZ2ljLCBhcyB3ZSBub3cgdXNlIFVOU0FWRV9FWFBScy4KCSogY3AtdHJlZS5oICh1bnNhdmVfZXhwcik6IERlY2xhcmUgaXQuCgkqIGRlY2wuYyAoYnVpbGRpbmdfY2xlYW51cCk6IFJlbW92ZS4KCShtYXliZV9idWlsZF9jbGVhbnVwKTogUmVtb3ZlIGJ1aWxkaW5nX2NsZWFudXAgbG9naWMsIGFuZCB1c2UKCVVOU0FWRV9FWFBSIGluc3RlYWQuCgpTdW4gRGVjICAzIDAxOjM0OjU4IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGdjLmMgKGJ1aWxkX3RfZGVzYyk6IFVwZGF0ZSBlcnJvciBtZXNzYWdlIHRvIHNheSA8dHlwZWluZm8+LgoKVGh1IE5vdiAzMCAxMjozMDowNSAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hkZWNsKTogT25seSB3YXJuIGFib3V0IHNoYWRvd2luZyBhIGxvY2FsIHZhcmlhYmxlIGlmCgl3YXJuX3NoYWRvdyBpcyB0cnVlLgoKU3VuIE5vdiAyNiAxNjowNjo1NSAxOTk1ICBSdXN0eSBSdXNzZWxsICA8cnVzdHlAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIHR5cGVjay5jIChidWlsZF9iaW5hcnlfb3Bfbm9kZWZhdWx0KTogQWRkZWQgd2FybmluZyBhYm91dAoJY29tcGFyaXNvbnMgYmV0d2VlbiBkaWZmZXJlbnQgZW51bSB0eXBlcyB3aXRoIC1XYWxsLCB1bmxlc3MKCS1mZW51bS1pbnQtZXF1aXYgc2V0LgoKV2VkIE5vdiAyMiAxNTo0NDowMiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBTa2lwIGRvd24gdG8gdGhlIGlubmVyIHR5cGUgaW4KCW11bHRpZGltZW5zaW9uYWwgYXJyYXlzLiAgRW5zdXJlcyBjdG9ycyB3aWxsIGJlIG1hZGUgZm9yIHR5cGVzIHRoYXQKCW5lZWQgY29uc3RydWN0aW5nLgoKV2VkIE5vdiAyMiAxNDoxOToyMiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxhc3RfZHRvcl9pbnNuKTogTmV3IHRvIHRyYWNrIHRoZSBsYXN0IGNvbXBpbGVyIGdlbmVyYXRlZAoJaW5zbiBpbiBhIGR0b3IuCgkoc3RvcmVfcGFybV9kZWNscyk6IFNldCBpdC4KCShmaW5pc2hfZnVuY3Rpb24pOiBVc2UgaXQgdG8gc2VlIGlmIHRoZSBkdG9yIGlzIGVtcHR5LiAgQXZvaWQgZG9pbmcKCXZ0YWJsZSBzZXR1cCBhbGwgdGhlIHRpbWUsIGlmIHdlIGNhbi4KCShzdHJ1Y3QgY3BfZnVuY3Rpb24pOiBBZGQgbGFzdF9kdG9yX2luc24uCgkocHVzaF9jcF9mdW5jdGlvbl9jb250ZXh0KTogU2F2ZSBpdC4KCShwb3BfY3BfZnVuY3Rpb25fY29udGV4dCk6IFJlc3RvcmUgaXQuCgpXZWQgTm92IDIyIDExOjUyOjE5IDE5OTUgIFBhdWwgUnVzc2VsbCAgPFJ1c3R5LlJ1c3NlbGxAYWRlbGFpZGUubWFwdGVrLmNvbS5hdT4KCgkqIHR5cGVjay5jIChidWlsZF91bmFyeV9vcCk6IFNldCBUUkVFX05PX1VOVVNFRF9XQVJOSU5HIHRvIGF2b2lkCgl3YXJuaW5ncy4KClR1ZSBOb3YgMjEgMTc6MTU6MjMgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogdHlwZWNrLmMgKGV4cGFuZF90YXJnZXRfZXhwcik6IE1ha2Ugc3VyZSB0YXJnZXRzIGdldCBwdXQgaW50byB0aGUKCWN1cnJlbnQgdGVtcF9zbG90X2xldmVsLCBzbyB0aGF0IHRoZSBmcmVlX3RlbXBfc2xvdHMgY2FsbCB3aWxsIHJldXNlCgl0aGVtLgoKVHVlIE5vdiAyMSAxMzozMjowMyAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBjbGFzcy5jIChmaW5pc2hfc3RydWN0XzEpOiBEZWxheSBkZWx0YSBmaXh1cHMgZm9yIHZpcnR1YWwgYmFzZXMKCXVudGlsIGFmdGVyIHdlIGhhdmUgZG9uZSB0aGUgaGFyZCB2aXJ0dWFscywgdG8gYXZvaWQgYSBib2d1cyBgZXZlcnkKCXZpcnR1YWwgZnVuY3Rpb24gbXVzdCBoYXZlIGEgdW5pcXVlIGZpbmFsIG92ZXJyaWRlcicgZm9yIHZpcnR1YWwKCWZ1bmN0aW9ucyB0aGF0IGFyZSBvbmx5IG92ZXJyaWRkZW4gYnkgaGFyZCB2aXJ0dWFscy4KClRodSBOb3YgIDkgMTM6MzU6MzAgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogcHQuYyAoZG9fZnVuY3Rpb25faW5zdGFudGlhdGlvbik6IERvbid0IHRyeSB0byBmaW5kIGEgZmlsZS1zY29wZQoJdGVtcGxhdGUgZm9yIGEgbWVtYmVyIGZ1bmN0aW9uLgoKVHVlIE5vdiAxNCAwNjoyMDozNSAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBnKysuYyAobWFpbik6IEFkZCBoYW5kbGluZyBvZiAtbm9kZWZhdWx0bGlicy4KCk1vbiBOb3YgMTMgMTU6NDU6MzQgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogY3AtdHJlZS5oIChJTkRJUkVDVF9CSU5EKTogQWRkIGEgd2F5IGZvciB0aGUgZnJvbnRlbmQgdG8KCWRpc3Rpbmd1aXNoIGJldHdlZW4gZGlyZWN0IGJpbmRpbmdzIG9mIHJlZmVyZW5jZSB2YXJpYWJsZXMsIGFuZAoJaW5kaXJlY3QgYmluZGluZ3Mgb2YgcmVmZXJlbmNlIHZhcmlhYmxlcy4KCSogY3Z0LmMgKGJ1aWxkX3VwX3JlZmVyZW5jZSk6IFVzZSBpdC4KCSogdHlwZWNrLmMgKGNvbnZlcnRfYXJndW1lbnRzKTogVXNlIGl0IHRvIGluZGljYXRlIHRoaXMgaXMgYW4KCWluZGlyZWN0IGJpbmRpbmcuCgkqIGRlY2wuYyAoY3BfZmluaXNoX2RlY2wpOiBFbnN1cmUgdGhhdCB3ZSByZXVzZSBzdGFjayBzbG90cyBhcyBmYXN0CglhcyB0aGV5IGFyZSB1bnVzZWQuCgkoZXhwYW5kX3N0YXRpY19pbml0KTogTGlrZXdpc2UuCgkoY3BsdXNfZXhwYW5kX2V4cHJfc3RtdCk6IExpa2V3aXNlLgoJKiBkZWNsMi5jIChmaW5pc2hfZmlsZSk6IExpa2V3aXNlLgoJKiBpbml0LmMgKHBlcmZvcm1fbWVtYmVyX2luaXQpOiBMaWtld2lzZS4KCShlbWl0X2Jhc2VfaW5pdCk6IExpa2V3aXNlLgoJKGV4cGFuZF9hZ2dyX3ZiYXNlX2luaXRfMSk6IExpa2V3aXNlLgoKRnJpIE5vdiAxMCAwOToxODowOSAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBkZWNsLmMgKHB1c2hfbmFtZXNwYWNlKTogUmV3cml0ZSB0byB1c2UgYnVpbGRfbGFuZ19kZWNsLCBzbyB3ZQoJZ2V0IGEgREVDTF9MQU5HX1NQRUNJRklDIG5vZGUuCgkqIGNwLXRyZWUuaCAobGFuZ19kZWNsX2ZsYWdzKTogQWRkIG5ldyBtZW1iZXIgYGxldmVsJy4KCShOQU1FU1BBQ0VfTEVWRUwpOiBEb24ndCB1c2UgZGVjbC5hcmd1bWVudHMsIGluc3RlYWQgdXNlIHRoZQoJZGVjbF9mbGFncyBsZXZlbCBtZW1iZXIuCgpNb24gTm92ICA2IDE4OjM2OjEzIDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBNYWtlIHN1cmUgaW5zdGFuY2UgaGFzIGEKCVRZUEVfTEFOR19TUEVDSUZJQyBub2RlIGJlZm9yZSB3ZSBkaXZlIGludG8gaXQuCgpTYXQgTm92ICA0IDIwOjAxOjUyIDE5OTUgIEphc29uIE1vbGVuZGEgIDxjcmFzaEBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogbWV0aG9kLmMgKG1ha2VfdGh1bmspOiBVc2UgVFJFRV9TRVRfQ09ERSB0byBzZXQgdGh1bmsncyB0cmVlIGNvZGUuCgpUaHUgTm92ICAyIDE3OjU2OjU3IDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogV2hlbiBzbWFzaGluZyBkZWNscywgc21hc2ggc3RhdGljbmVzcyBpbgoJdGhlIHVzdWFsIHdheS4KClRodSBOb3YgIDIgMTY6NDQ6MDIgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogZGVjbC5jIChwb3BsZXZlbCk6IEhhbmRsZSB0aGUgbWVyZ2luZyBvZiBzdWJibG9ja3Mgb2YgY2xlYW51cHMKCXdoZW4gZmluaXNoaW5nIGJsb2NrcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgKHVzdWFsbHkgZHVlIHRvCgl0aGUgZml4dXAgZ290byBjb2RlKS4gIEZpeGVzIGJhZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCgpXZWQgTm92ICAxIDEyOjMzOjUzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1ldGhvZC5jIChoYWNrX2lkZW50aWZpZXIpOiBEb24ndCBhYm9ydCB3aGVuIHdlIGdldCBhIFRSRUVfTElTVAoJdGhhdCdzIG5vdCBhIGxpc3Qgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMuCgpXZWQgTm92ICAxIDExOjM4OjU4IDE5OTUgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGRlY2wyLmMgKG1hcmtfdnRhYmxlX2VudHJpZXMpOiBDaGVjayBERUNMX0xBTkdfU1BFQ0lGSUMgb24gZm4KCWJlZm9yZSB0cnlpbmcgdG8gdXNlIERFQ0xfQUJTVFJBQ1RfVklSVFVBTF9QLgoKVHVlIE9jdCAzMSAxMTo1Njo1NSAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkZWNsMi5jIChtYXJrX3VzZWQpOiBOZXcgZnVuY3Rpb24gZm9yIGhvb2tpbmcgaW50byBzZXR0aW5nIG9mCglUUkVFX1VTRUQgb24gZGVjbHMuCgkqIGNhbGwuYyAoYnVpbGRfbWV0aG9kX2NhbGwpOiBVc2UgaXQuCgkqIGNsYXNzLmMgKGluc3RhbnRpYXRlX3R5cGUpOiBMaWtld2lzZS4KCSogaW5pdC5jIChidWlsZF9vZmZzZXRfcmVmKTogTGlrZXdpc2UuICBEb24ndCBjYWxsIGFzc2VtYmxlX2V4dGVybmFsCglmb3IgYWxsIGxpa2UtbmFtZWQgZnVuY3Rpb25zLgoJKiBtZXRob2QuYyAoaGFja19pZGVudGlmaWVyKTogTGlrZXdpc2UuCgkoZW1pdF90aHVuayk6IERvbid0IGNhbGwgYXNzZW1ibGVfZXh0ZXJuYWwuCgkobWFrZV90aHVuayk6IENyZWF0ZSB0aHVuayBhcyBhIEZVTkNUSU9OX0RFQ0wgc28gdGhhdCBpdAoJZ2V0cyB0aGUgcmlnaHQgbW9kZSBhbmQgRU5DT0RFX1NFQ1RJT05fSU5GTyB3b3Jrcy4KCgkqIHBhcnNlLnk6IFVzZSBtYXJrX3VzZWQuICBQYXNzIG9wZXJhdG9yIG5hbWVzIHRvIGRvX2lkZW50aWZpZXIuCgkqIGxleC5jIChkb19pZGVudGlmaWVyKTogSGFuZGxlIG9wZXJhdG9yIG5hbWVzLgoKCSogZGVjbDIuYyAoZ3Jva2NsYXNzZm4pOiBUd2VhayBfX2luX2NocmcgYXR0cmlidXRlcy4KClRodSBPY3QgMjYgMTY6NDU6NTggMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZXJyZm4uYzogSW5jbHVkZSBzdGRpby5oLgoJKGNwX3NwcmludGYpOiBUYWtlIG91dCBkZWNsIG9mIHNwcmludGYsIGFuZCBjYXN0IHNwcmludGYgdG8gZXJyb3JmbiouCgpXZWQgT2N0IDI1IDE4OjU4OjQxIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIHR5cGVjazIuYyAoZGlnZXN0X2luaXQpOiBBbHdheXMgY29udmVydCBpbml0aWFsaXplcnMgdG8gdGhlCglyaWdodCB0eXBlLgoKV2VkIE9jdCAyNSAxMzoyNToyNCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBpbml0LmMgKG1lbWJlcl9pbml0X29rX29yX2Vsc2UpOiBEb24ndCBhbGxvdyBtZW1iZXIgaW5pdGlhbGl6ZXJzCglmb3IgaW5kaXJlY3QgbWVtYmVycywgYXMgaXQgaXMgaW52YWxpZC4KCldlZCBPY3QgMjUgMTE6MzU6MjggMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZGVjbC5jIChncm9rZGVjbGFyYXRvcik6IERvbid0IGFsbG93IGBmcmllbmQgc2lnbmVkICgpJy4KCkZyaSBPY3QgMjAgMTA6MzA6NTkgMTk5NSAgTWlrZSBTdHVtcCAgPG1yc0BjeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm9yLmluaXQuc3RhdGVtZW50KTogQ2F0Y2ggY29tcG91bmQgc3RhdGVtZW50cyBpbnNpZGUgZm9yCglpbml0aWFsaXphdGlvbnMsIGlmIHdlJ3JlIGJlaW5nIHBlZGFudGljLgoKRnJpIE9jdCAyMCAxMDowMzo0MiAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBkZWNsLmMgKGxvb2t1cF90YWcpOiBSZXR1cm4gTlVMTF9UUkVFIGlmIHdlIGRvbid0IGZpbmQgd2hhdCB3ZSBhcmUKCWxvb2tpbmcgZm9yLgoKVGh1IE9jdCAxOSAxNDoyNjoxMCAxOTk1ICBNaWtlIFN0dW1wICA8bXJzQGN5Z251cy5jb20+CgoJKiBlcnJvci5jIChkdW1wX2V4cHIpOiBEb24ndCBjb3JlIGR1bXAgd2hlbiBhIGJvb2xlYW4gZXhwcmVzc2lvbiBpcwoJdXNlZCBhcyBhIGRlZmF1bHQgYXJndW1lbnQuCgpUaHUgT2N0IDE5IDEwOjM2OjMwIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IENoZWNrIGFnZ3JlZ2F0ZV92YWx1ZV9wIGluc3RlYWQgb2YKCVJFVFVSTl9JTl9NRU1PUlkuCgpXZWQgT2N0IDE4IDE4OjEyOjMyIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNsYXNzLmMgKGZpbmlzaF9zdHJ1Y3RfYml0cyk6IEFsc28gc2V0IFRSRUVfQUREUkVTU0FCTEUgb24gYQoJQkxLbW9kZSB0eXBlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHJldHVybmVkIGluIHJlZ2lzdGVycy4KCk1vbiBPY3QgMTYgMTI6MzI6MTkgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogZysrLmMgKFdJVEhMSUJDKTogTmV3IG1hY3JvLgoJKG1haW4pOiBEZWNsYXJlIHNhd19saWJjLiAgVXNlIFdJVEhMSUJDIGlmIGAtbGMnIHdhcyB1c2VkOyBzZXQKCXNhd19saWJjIGFuZCBwYXNzIGl0IGF0IHRoZSBlbmQgaWYgaXQgd2FzIHNldC4KCldlZCBPY3QgMTEgMTY6MzA6MzQgMTk5NSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogcGFyc2UueSAoZm4uZGVmMSk6IENhbGwgc3BsaXRfc3BlY3NfYXR0cnMgaW4KCWRlY2xtb2RzIG5vdHlwZV9kZWNsYXJhdG9yIGNhc2UuCg==