MTk5OS0wNS0xMSAgSmltIEJsYW5keSAgPGppbWJAendpbmdsaS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKG1haW4pOiBVc2UgdGFibGUgbG9va3VwIHRvIGRpc3Rpbmd1aXNoIGlkZW50aWZpZXIKCWNoYXJhY3RlcnMgZnJvbSBub24taWRlbnRpZmllciBjaGFyYWN0ZXJzLgoJKHN0YW5kYXJkX3N5bWJvbF9hbHBoYWJldCwgaHBfc3ltYm9sX2FscGhhYmV0KTogTmV3IGZ1bmN0aW9ucy4KClRodSBNYXkgIDYgMjA6MzQ6NDIgMTk5OSAgRnJlZCBGaXNoICA8Zm5mQGJlLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoc3lzL3Jlc291cmNlLmgpOiBBZGQgdG8gQUNfQ0hFQ0tfSEVBREVSUyBsaXN0LgoJKiBnZXRydW50aW1lLmM6IE9ubHkgYXR0ZW1wdCB0byBpbmNsdWRlIHN5cy9yZXNvdXJjZS5oIGFuZAoJdXNlIGdldHJ1c2FnZSBpZiBib3RoIEhBVkVfR0VUUlVTQUdFIGFuZCBIQVZFX1NZU19SRVNPVVJDRV9ICglhcmUgZGVmaW5lZC4KCjE5OTktMDQtMjAgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCglGaXggZnJvbSBEYWxlIEhhd2tpbnM6CgkqIGNwbHVzLWRlbS5jIChtb3BfdXApOiBTZXQgdHlwZXZlY19zaXplIHRvIHplcm8sIHNvIGl0J2xsIGJlIAoJcmVhbGxvY2F0ZWQgcHJvcGVybHkgaWYgd2UgdXNlIGl0IGFnYWluLgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IENoZWNrIGZvciBidWZmZXIgb3ZlcnJ1bi4gIEJlCglzdHJpY3RlciBhYm91dCBzeW50YXguICBBbHdheXMgbnVsbC10ZXJtaW5hdGUgc3RyaW5nLgoKCUZpeCBmcm9tIE1hcmN1cyBEYW5pZWxzOgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogRG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZQoJaWRlbnRpZmllciBsb29raW5nIGZvciBhbm90aGVyIHVuZGVyc2NvcmUuCgoxOTk5LTA0LTExICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxsb2NhLWNvbmYuaCAoYWxsb2NhKSBbQ19BTExPQ0FdOiBEb24ndCB1c2UgR2NjIGJ1aWx0aW4KCW9yIDxhbGxvY2EuaD4uCgkqIGNsb2NrLmMgKEdOVV9IWik6IE5ldyBkZWZpbml0aW9uLgoJKGNsb2NrKTogVXNlIGl0LgoJKiBnZXRydW50aW1lLmM6IExpa2V3aXNlLgoKCSogY29uZmlnLnRhYmxlOiBVc2UgbWgtYmVvcy4KCSogY29uZmlnL21oLWJlb3M6IE5ldyBmaWxlLgoKMTk5OS0wNC0wMSAgSmltIEJsYW5keSAgPGppbWJAendpbmdsaS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IEF0dGVtcHQgdG8gaGFuZGxlIG92ZXJmbG93cyBpbiBjb3VudHMgd2l0aCBzb21lCglzZW1ibGFuY2Ugb2YgZ3JhY2UuCgkoY29uc3VtZV9jb3VudCk6IERldGVjdCBvdmVyZmxvd3MuICBSZXR1cm4gLTEgdG8gaW5kaWNhdGUgZXJyb3JzLAoJaW5zdGVhZCBvZiB6ZXJvLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0sIGRlbWFuZ2xlX3RlbXBsYXRlKTogSGFuZGxlIGNoYW5nZQoJdG8gY29uc3VtZV9jb3VudCdzIHJldHVybiBjb252ZW50aW9uLgoKVGh1IEFwciAgOCAxNDo0MzoyOCAxOTk5ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiB4bWFsbG9jLmMsIHBleGVjdXRlLmM6IERlZmluZSBfX0NZR1dJTl9fIHdoZW4gYmVpbmcgY29tcGlsZWQKIAl3aXRoIG9sZCBfX0NZR1dJTjMyX18gY29tcGlsZXIuCgoxOTk5LTA0LTAyICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5oIChzcGxheV90cmVlX2NvbXBhcmVfcG9pbnRlcnMpOiBEZWZpbmUuCgoxOTk5LTAzLTMwICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3BsYXktdHJlZS5jIChzcGxheV90cmVlX2NvbXBhcmVfaW50cyk6IERlZmluZS4KCjE5OTktMDMtMzAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChjb25zdW1lX2NvdW50KTogSWYgYGNvdW50JyB3cmFwcywgcmV0dXJuIDAgYW5kCglkb24ndCBhZHZhbmNlIGlucHV0IHBvaW50ZXIuCgkoZGVtYW5nbGVfY2xhc3NfbmFtZSk6IElmIGNvbnN1bWVfY291bnQgZGlkbid0IGZpbmQgYSBjb3VudCwgZG8KCW5vdGhpbmcuICBEb24ndCBib3RoZXIgd2l0aCBgc3RybGVuJyBzYW5pdHkgY2hlY2s7IGNvbnN1bWVfY291bnQKCWRvZXMgaXQgZm9yIHVzLgoKMTk5OS0wMy0xNiAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCUZyb20gQXJ0IEhhYXMgIDxhaGFhc0BuZW9zb2Z0LmNvbT46CgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiBEb24ndCBncmFiIGFsbCB0aGUgJ19fJyBzdHJpbmdzCgl3aGVuIGRvaW5nIGFybSBvciBocCBzdHlsZS4KCShkZW1hbmdsZV9uZXN0ZWRfYXJncyk6IERlY3IgZm9yZ2V0dGluZ190eXBlcyBmaWVsZCB3aGVuIGRvbmUuCgkKVGh1IE1hciAxMSAwMToyMjo1OCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIHBleGVjdXRlLmMgKF9fQ1lHV0lOMzJfXyk6IFJlbmFtZSB0bwoJKF9fQ1lHV0lOX18pOiB0aGlzLgoJKiB4bWFsbG9jLmM6IExpa2V3aXNlLgoKCUNoYW5nZXMgdG8gc3VwcG9ydCBpMzg2LXBjLXV3aW4uCgkqIGNvbmZpZ3VyZS5pbiAoKi0qLXV3aW4qKTogV29ya2Fyb3VuZCBmb3IgdmZvcmsgYnVnLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIHBleGVjdXRlLmMgKHBleGVjdXRlKTogQmUgbGlrZSBzdGFuZGFyZCBVbml4LgoJKHB3YWl0KTogTGlrZXdpc2UuCgkqIHhtYWxsb2MuYyAoZmlyc3RfYnJlYWspOiBEZWZpbmUuCgkoeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKTogVXNlLgoJKHhtYWxsb2MpOiBVc2UuCgpUaHUgTWFyIDExIDAxOjA3OjU1IDE5OTkgIEZyYW56IFNpcmwgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogY29uZmlnLnRhYmxlOiBDbGVhbnVwIGFuZCBhZGQgbWgtKnBpYyBoYW5kbGluZyBmb3IgYWxwaGEsIGFybSwgcG93ZXJwYwoKU3VuIEZlYiAyOCAyMjozMDo0NCAxOTk5ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBDaGVjayBjeWd3aW4qLCBub3QgY3lnd2luMzIqLgoKVHVlIEZlYiAgOSAxNjozOTowMSAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlIG1rc3RlbXAgLT4gbWtzdGVtcHMuCgpUdWUgRmViICA5IDAxOjEyOjI3IDE5OTkgIE1hcmMgRXNwaWUgPE1hcmMuRXNwaWVAbGlhZmEuanVzc2lldS5mcj4KCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiByZW1vdmUgbWtzdGVtcC5vCgkqIGNvbmZpZ3VyZS5pbiAoZnVuY3MpOiBDaGVjayBmb3IgYW5kIGNvbmRpdGlvbmFsbHkgYWRkIG1rc3RlbXBzIHRvCgl0aGUgbGlzdCBvZiBmdW5jdGlvbnMgbGliaWJlcnR5IHdpbGwgcHJvdmlkZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJCldlZCBGZWIgIDMgMDA6MDE6MTUgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjbG9jay5jIChIWik6IERlZmluZSBpbiB0ZXJtcyBvZiAoSVNPIEMpIENMT0NLU19QRVJfU0VDIG9uIAoJcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSBIWi4KCSogZ2V0cnVudGltZS5jIChIWik6IExpa2V3aXNlLgoKU2F0IEphbiAzMCAxMzoyODowNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKHhzdHJkdXAubyk6IERlcGVuZCBvbiBjb25maWcuaC4KCldlZCBKYW4gMTMgMDc6MjY6NDQgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY3BsdXMtZGVtLmMgKG1vcF91cCk6IFNldCB3b3JrLT5wcmV2aW91c19hcmd1bWVudCB0byBOVUxMIGFmdGVyCglmcmVlaW5nIGl0LgoKV2VkIEphbiAxMyAxNDoxNjozNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB4c3RyZHVwLmMgKHhzdHJkdXApOiBTd2l0Y2ggZnJvbSBzdHJjcHkgdG8gbWVtY3B5IGZvciBzcGVlZC4KClR1ZSBKYW4gIDUgMTU6NTg6MjkgMTk5OSAgRWxlbmEgWmFubm9uaSAgPGV6YW5ub25pQGt3aWtlbWFydC5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IGZpeCB0eXBvLCBzcGxheS10cmVlLmMgaW5zdGVhZCBvZgoJc3BsYXktdHJlZS5vLgoKMTk5OS0wMS0wNCAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBSZXF1aXJlIGF1dG9jb25mIDIuMTIuMSBvciBoaWdoZXIuCgoxOTk4LTEyLTMwICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJhbmRvbS5jIChOVUxMKTogRG9uJ3QgcmVkZWZpbmUgTlVMTCBpZiBpdCBpcyBhbHJlYWR5IGRlZmluZWQuCgpUdWUgRGVjIDIyIDA5OjQzOjM1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFyZ3YuYyAoYnVpbGRhcmd2KTogQ2FzdCB0aGUgcmVzdWx0IG9mIGFsbG9jYSBpbiBhc3NpZ25tZW50LgoKCSogY2hvb3NlLXRlbXAuYzogSW5jbHVkZSBzdGRsaWIuaC4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1fcHQpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4KICAJKHNuYXJmX251bWVyaWNfbGl0ZXJhbCk6IENvbnN0aWZ5IGZpcnN0IHBhcmFtZXRlci4KICAJKGNvZGVfZm9yX3F1YWxpZmllcik6IEF2b2lkIGEgZ2NjIGV4dGVuc2lvbiwgbWFrZSB0aGUgcGFyYW1ldGVyIGFuCiAJaW50LCBub3QgYSBjaGFyLgoJKGRlbWFuZ2xlX3F1YWxpZmllcik6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGEgY3R5cGUgZnVuY3Rpb24gdG8KCXVuc2lnbmVkIGNoYXIuCgkoYXJtX3B0KTogQWRkIHBhcmVucyBhcm91bmQgYXNzaWdubWVudCB1c2VkIGFzIHRydXRoIHZhbHVlLgoJKGRlbWFuZ2xlX2FybV9ocF90ZW1wbGF0ZSk6IENvbnN0aWZ5IHZhcmlhYmxlIGBhcmdzJy4KCShkb19ocGFjY190ZW1wbGF0ZV9jb25zdF92YWx1ZSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGEgY3R5cGUKCWZ1bmN0aW9uIHRvIHVuc2lnbmVkIGNoYXIuCgkoZG9faHBhY2NfdGVtcGxhdGVfbGl0ZXJhbCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGknLgoJKHNuYXJmX251bWVyaWNfbGl0ZXJhbCk6IENvbnN0aWZ5IHBhcmFtZXRlciBgYXJncycuCglDYXN0IHRoZSBhcmd1bWVudCBvZiBhIGN0eXBlIGZ1bmN0aW9uIHRvIHVuc2lnbmVkIGNoYXIuCgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF90b19kb3VibGUpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvCiAJYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGZubWF0Y2guYyAoZm5tYXRjaCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlcyBgYycsIGBjMScsCiAJYGNzdGFydCcgYW5kIGBjZW5kJyB0byB1bnNpZ25lZCBjaGFyLiAgQ2FzdCB0aGUgYXJndW1lbnQgb2YgbWFjcm8KIAlgRk9MRCcsIHdoaWNoIHVzZXMgY3R5cGUgZnVuY3Rpb25zLCB0byB1bnNpZ25lZCBjaGFyLgoKCSogb2JqYWxsb2MuYyAoZnJlZSk6IEFkZCBwcm90b3R5cGUuCgpTdW4gRGVjIDIwIDE2OjAzOjQ2IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogRml4IHR5cG86IHNwbGF5LXRyZWUuYywgbm90IHNwbGF5LXRyZWUubwoKRnJpIERlYyAxOCAxNzo1MDoxOCAxOTk4ICBEYXZpZCBUYXlsb3IgIDx0YXlsb3JAdGV4YXMuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1fcHQpOiByZW1vdmUgZGVjbGFyYXRpb24gLS0gZnVuY3Rpb24KIAlkb2Vzbid0IGV4aXN0LgoJKGRvX2hwYWNjX3RlbXBsYXRlX2xpdGVyYWwpOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpJy4KCQpGcmkgRGVjIDE4IDE2OjExOjQzIEVTVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfZnVuZF90eXBlKTogUHJvY2VzcyBDViBhbmQgdSBjb2RlcyBiZWZvcmUKCWJ1bXBpbmcgdGhlIHBvaW50ZXIgd2UgcmVhZCBmcm9tLiBBbHNvIHByZXBlbmQgdGhlc2UgY29kZXMsCglhcyB3ZSBkbyBpbiBvdGhlciBwbGFjZXMuCgoxOTk4LTEyLTE4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9ocF90ZW1wbGF0ZSk6IE1ha2UgdmFyaWFibGUgJ2FyZ3MnIGJlCgknY29uc3QgY2hhciAqJyBpbiBvcmRlciB0byBtYXRjaCBpdHMgdXNhZ2Ugd2hlbiBjYWxsaW5nIHNpYmxpbmdzLgoJKHNuYXJmX251bWVyaWNfbGl0ZXJhbCk6IE1ha2UgZmlyc3QgYXJnICdjb25zdCBjaGFyICoqJyBpbiBvcmRlcgoJdG8gbWF0Y2ggdXNhZ2UuCgpNb24gRGVjIDE0IDA5OjU1OjUwIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNob29zZS10ZW1wLmM6IERvbid0IGNoZWNrIElOX0dDQyBhbnltb3JlLgoKCSogZmxvYXRmb3JtYXQuYyAoZmxvYXRmb3JtYXRfZnJvbV9kb3VibGUpOiBVc2UgYGNvbnN0Jywgbm90IGBDT05TVCcuCgkqIG1lbWNoci5jIChtZW1jaHIpOiBMaWtld2lzZS4KCSogbWVtY3B5LmMgKG1lbWNweSk6IExpa2V3aXNlLgoJKiBtZW1tb3ZlLmMgKG1lbW1vdmUpOiBMaWtld2lzZS4KCgkqIG1rc3RlbXAuYzogRG9uJ3QgY2hlY2sgSU5fR0NDIGFueW1vcmUuCgkqIHBleGVjdXRlLmM6IExpa2V3aXNlLgoJKiBzcGxheS10cmVlLmM6IExpa2V3aXNlLgoKCSogc3RyY2hyLmMgKHN0cmNocik6IFVzZSBgY29uc3QnLCBub3QgYENPTlNUJy4KCSogc3RycmNoci5jIChzdHJyY2hyKTogTGlrZXdpc2UuCgkqIHN0cnRvbC5jIChzdHJ0b2wpOiBMaWtld2lzZS4KCSogc3RydG91bC5jIChzdHJ0b3VsKTogTGlrZXdpc2UuCgpGcmkgRGVjICA0IDEzOjUxOjA0IDE5OTggIERhdmlkIFRheWxvciAgIDx0YXlsb3JAdGV4YXMuY3lnbnVzLmNvbT4KCQkJICBFbGVuYSBaYW5ub25pICA8ZXphbm5vbmlAY3lnbnVzLmNvbT4KCQkJICBTdGFuIFNoZWJzICAgICA8c2hlYnNAY3lnbnVzLmNvbT4KCQkJICBFZGl0aCBFcHN0ZWluICA8ZWVwc3RlaW5AY3lnbnVzLmNvbT4KCQkJICBBbmRyZXMgTWFjTGVvZCA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCQkJICBTYXRpc2ggUGFpCSA8cGFpQGFwb2xsby5ocC5jb20+CgoJKiBIUCBhQ0MgZGVtYW5nbGluZyBzdXBwb3J0LgoJKiBjcGx1cy1kZW0uYwoJKG1haW4pOiBSZW1vdmUgZGVmYXVsdCB0byBIUCBzdHlsZSBkZW1hbmdsaW5nLCBzZXQgdG8gRURHCiAJZGVtYW5nbGluZyBjb3JyZWN0bHkgd2hlbiAtZWRnIHNwZWNpZmllZDsgc2V0IHRoZSBkZW1hbmdsaW5nIHN0eWxlCiAJd2hlbiB1c2VyIHNwZWNpZmllcyAnZWRnJy4gU2V0IHN0cmlwX3VuZGVyc2NvcmUgdG8KIAlwcmVwZW5kc191bmRlcnNjb3JlLCBpZiBub3QgSFBVWEhQUEEuICBTZXQKIAljdXJyZW50X2RlbWFuZ2xpbmdfc3R5bGUgdG8gaHBfZGVtYW5nbGluZyBpZiBIUFVYSFBQQS4gIFNldAogCWN1cnJlbnQgZGVtYW5nbGluZyBzdHlsZSBjb3JyZWN0bHkgaWYgdGhlIHN3aXRjaCBpcyBocC4gIFJlYWQKIAlsYWJlbCBjb3JyZWN0bHkgYWxzbyBpbiB0aGUgSFAgc3R5bGUgY2FzZS4KCSh3b3JrX3N0dWZmKTogYWRkIHRlbXBfc3RhcnQgZmllbGQ7IGFkZCBmaWVsZCBmb3Igdm9sYXRpbGUgbWVtYmVyCiAJZnVuY3Rpb24uCgkoYXJtX3B0KTogaGFuZGxlIEFSTV9ERU1BTkdMSU5HIGFuZCBFREdfREVNQU5HTElORyBzdHlsZXM7IEhQCiAJc3R5bGUgZm9yIHRoaXMgY2FzZSBpcyB0aGUgc2FtZSBhcyBBUk0uCgkoZGVtYW5nbGVfYXJncyk6IGhhbmRsZSBFREdfREVNQU5HTElORyBzdHlsZTsgc3VwcG9ydCBIUCBzdHlsZS4KCShkZW1hbmdsZV9hcm1faHBfdGVtcGxhdGUpOiBuZXcgZnVuY3Rpb24uIChJdCB3YXMKIAlkZW1hbmdsZV9hcm1fcHQuKTsgY2hlY2sgYW5kIHNldCB2YWx1ZSBvZiB0ZW1wX3N0YXJ0IGZpZWxkIGluCiAJbXVsdGlwbGUgcGxhY2VzLiBBbHNvLCB3aGVuIGNlY2hpbmcgZm9yIGVuZCBvZiB0ZW1wbGF0ZSBhcmdzLAogCWNoZWNrIHRvIHNlZSBpZiBhdCBlbmQgb2Ygc3RhdGljIG1lbWJlciBvZiB0ZW1wbGF0ZSBjbGFzcy4KCShkZW1hbmdsZV9jbGFzcyk6IG5ldyBsb2NhbCB2YXJpYWJsZSA6IHNhdmVfY2xhc3NfbmFtZV9lbmQgRG9uJ3QKIAlpbmNsdWRlIHRlbXBsYXRlIGFyZ3MgaW4gc3RyaW5nIGRlZmluaW5nIGNsYXNzLgoJKGRlbWFuZ2xlX2NsYXNzX25hbWUpOiB1c2UgZGVtYW5nZWxfYXJtX2hwX3RlbXBsYXRlLgoJKGRlbWFuZ2xlX2Z1bmN0aW9uX25hbWUpOiBoYW5kbGUgY2FzZSB3aGVyZSBkZW1hbmdsaW5nIHN0eWxlIGlzCiAJSFBfREVNQU5HTElORyBhbmQgY3VycmVudGx5IHBvaW50IGF0IGFuICdYJyBpbiB0aGUgbWFuZ2xlZCBuYW1lLgogIAlIYW5kbGUgRURHX0RFTUFOR0xJTkcgc3R5bGUuICBIYW5kbGUgY29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IKIAlvcHMgZm9yIEhQIHN0eWxlLgoJKGRlbWFuZ2xlX3ByZWZpeCk6IGhhbmRsZSBFREdfREVNQU5HTElORyBhbmQgQVJNX0RFTUFOR0xJTkcKIAlzdHlsZXMuICBnbG9iYWwgZGVzdHJ1Y3RvciBhbmQgY29uc3RydWN0b3IgZm9yIEhQIHN0eWxlIGFyZSBzYW1lCiAJYXMgZm9yIEFSTSBzdHlsZS4gU2FtZSBmb3IgbG9jYWwgdmFyaWFibGVzLgoJKGRlbWFuZ2xlX3F1YWxpZmllZCk6IGhhbmRsZSBFREdfREVNQU5HTElORyBzdHlsZS4KCShkZW1hbmdsZV9zaWduYXR1cmUpOiBhZGQgY2FzZSBmb3Igdm9sYXRpbGUgbWVtYmVyIGZ1bmN0aW9uLiAgRm9yCiAJY2FzZXMgJzEnIC0gJzknIDogaW5pdGlhbGl6ZSB0aGUgdGVtcF9zdGFydCBmaWVsZCB0byAtMSBhbmQgaGFuZGxlCiAJdGhlIEVER19ERU1BTkdMSU5HIHN0eWxlLiAgZm9yIGNhc2UgJ0YnIDogaGFuZGxlIEVER19ERU1BTkdMSU5HCiAJYW5kIEFVVE9fREVNQU5HTElORyBzdHlsZXMuICBJZiBleHBlY3RpbmcgYSBmdW5jdGlvbiBhbmQgbWFuYWdlZAogCXRvIGRlbWFuZ2xlIHRoZSBmdW5jdCBhcmdzLCB0aGVuIGhhbmRsZSB0aGUgTFVDSURfREVNQU5HTElORywKIAlBUk1fREVNQU5HTElORywgYW5kIEVER19ERU1BTkdMSU5HIHN0eWxlcy4gIEFkZCBjYXNlIGZvciBsb2NhbAogCWNsYXNzIG5hbWUgYWZ0ZXIgIkxubm5fIGluIEhQIHN0eWxlIGNhc2UuIEhQIHN0eWxlIHRvbyBuZWVkcyB0bwogCWZvcmdldCB0eXBlcy4gIF9ubm4gaXMgT0sgZm9yIEhQIHN0eWxlLCBzbyBkb24ndCByZXBvcnQgZmFpbHVyZS4KCShkb19ocGFjY190ZW1wbGF0ZV9jb25zdF92YWx1ZSk6IG5ldyBmdW5jdGlvbi4gSGFuZGxlIHRlbXBsYXRlJ3MKIAl2YWx1ZSBwYXJhbSBmb3IgSFAvYUNDLgoJKGRvX2hwYWNjX3RlbXBsYXRlX2xpdGVyYWwpOiBuZXcgZnVuY3Rpb24uICBIYW5kbGUgYSB0ZW1wbGF0ZSdzCiAJbGl0ZXJhbCBwYXJhbWV0ZXIgZm9yIEhQIGFDQy4KCShyZWN1cnNpdmVseV9kZW1hbmdsZSk6IG5ldyBmdW5jdGlvbgoJKHNuYXJmX251bWVyaWNfbGl0ZXJhbCk6IG5ldyBmdW5jdGlvbi4KCSh1c2FnZSk6IGFkZCAnZWRnJyB0byB0aGUgbGlzdCBvZiBkZW1hbmdsaW5nIHN0eWxlczsgYWRkIGhwIHN3aXRjaAogCXRvIG1lc3NhZ2UuCgpTYXQgTm92IDI4IDE3OjI1OjIyIDE5OTggIENocmlzdG9waGVyIEZheWxvciA8Y2dmQGN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jOiBSZW1vdmUgb2Jzb2xldGUgaWZkZWZlZCBjeWd3aW4gY29kZS4KCkZyaSBOb3YgMjcgMTM6MjY6MDYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2hvb3NlLXRlbXAuYzogQWx3YXlzIGluY2x1ZGUgbGliaWJlcnR5LmguICBBdm9pZCByZWR1bmRhbmNpZXMuCgkqIGNwbHVzLWRlbS5jOiBMaWtld2lzZS4gIENvbmZvcm0gdG8gbGliaWJlcnR5LmguCgkqIHBleGVjdXRlLmM6IExpa2V3aXNlLgoJKiBzcGxheS10cmVlLmM6IExpa2V3aXNlLgoKMTk5OC0xMS0yNSAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogTWFrZWZpbGUuaW4gKHNwbGF5LXRyZWUubyk6IEFkZCBjb25maWcuaCBkZXBlbmRlbmN5LgoKTW9uIE5vdiAyMyAxNjo1OTo0OSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiAgY29uZmlndXJlLmluOiBVc2UgQUNfUFJFUkVRKDIuMTIuMSkuCgoxOTk4LTExLTE2ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGhhaWdodC5jb25zdGFudC5jb20+CgogICAgICAgICogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEFkZCBkZW1hbmdsaW5nIGZvciBDOXggdHlwZXMuCgpUaHUgTm92IDE5IDIyOjE1OjUwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1wdy5jIChtcHdfYWNjZXNzKTogQWRkIG1pc3NpbmcgcGFyZW5zLgoKVGh1IE5vdiAxOSAxMjo1OToyMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW46IENhbGwgQUNfSEVBREVSX1NZU19XQUlULgoKCSogcGV4ZWN1dGUuYzogSW5jbHVkZSBzeXMvd2FpdC5oIHdoZW4gIUlOX0dDQy4KClRodSBOb3YgMTkgMTQ6Mzg6MjAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IHJldmVydCBiYWNrIHRvIGNoZWNraW5nIG9sZCBDeWd3aW4KCXByZXByb2Nlc3NvciBzeW1ib2wgdW50aWwgc29tZSB0aW1lIGhhcyBwYXNzZWQuCgpXZWQgTm92IDE4IDA4OjUyOjI2IDE5OTggIENocmlzdG9waGVyIEZheWxvciA8Y2dmQGN5Z251cy5jb20+CgoJKiBwZXhlY3V0ZS5jOiBSZW9yZ2FuaXplIFdJTjMyIGNhc2UgdG8gYWNjb21vZGF0ZSBDeWd3aW4KCXNpbmNlIGl0IHdpbGwgbm93IHN1cHBvcnQgc2ltaWxhciBjb25zdHJ1Y3RzLgoKRnJpIE5vdiAxMyAxOToxODowNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjYWxsb2MuCgoJKiBjYWxsb2MuYzogTmV3CWZpbGUuCgoJKiB4bWFsbG9jLmMgKHhjYWxsb2MpOiBOZXcgZnVuY3Rpb24uCgpGcmkgTm92IDEzIDA4OjUxOjQ2IEVTVCAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKmNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiBVc2UgdGhlIGxhc3QgIl9fIgoJaW4gdGhlIG1hbmdsZWQgbmFtZSB3aGVuIGxvb2tpbmcgZm9yIHRoZSBzaWduYXR1cmUuIFRoaXMgYWxsb3dzCgl0ZW1wbGF0ZSBuYW1lcyB0byBiZWdpbiB3aXRoICJfXyIuCgoxOTk4LTExLTA4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogQWRkIHRrX3JlZmVyZW5jZS4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogSGFuZGxlIGl0LgoJKGRvX3R5cGUpOiBVc2UgaXQgZm9yIHJlZmVyZW5jZXMsIGluc3RlYWQgb2YgdGtfcG9pbnRlci4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogVXNlIGNwbHVzX2RlbWFuZ2xlLAoJbm90IGludGVybmFsX2NwbHVzX2RlbWFuZ2xlLgoKU2F0IE5vdiAgNyAxNjowMjoxMCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjaG9vc2UtdGVtcC5jOiBEb24ndCBpbmNsdWRlIGdhbnNpZGVjbC5oLgoJKiBta3N0ZW1wLmM6IExpa2V3aXNlLgoJKiBwZXhlY3V0ZS5jOiBMaWtld2lzZS4KCk1vbiBOb3YgIDIgMTU6MDU6MzMgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCiAgICAgICAgKiBjb25maWd1cmUuaW46IGRldGVjdCBjeWd3aW4qIGluc3RlYWQgb2YgY3lnd2luMzIqCiAgICAgICAgKiBjb25maWd1cmU6IHJlZ2VuZXJhdGUKCk1vbiBOb3YgIDIgMTA6MjI6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcGV4ZWN1dGUuYzogQ2hlY2sgSEFWRV9DT05GSUdfSCwgbm90IElOX0dDQywgd2hlbiBkZXRlcm1pbmluZwogCXdoZXRoZXIgdG8gaW5jbHVkZSBjb25maWcuaC4gIFBvc3NpYmx5IGluY2x1ZGUgdW5pc3RkLmggaW4gdGhlCiAJIUlOX0dDQyBjYXNlLiAgRGVmaW5lIFZGT1JLX1NUUklORyBhcyBhIHByaW50YWJsZSBmdW5jdGlvbiBjYWxsCiAJZm9yIGVycm9yIG1lc3NhZ2VzIChlaXRoZXIgInZmb3JrIiBvciAiZm9yayIuKSAgSWYgSEFWRV9WRk9SS19IIGlzCiAJZGVmaW5lZCwgaW5jbHVkZSB2Zm9yay5oLiAgSWYgVk1TIGlzIGRlZmluZWQsIGRlZmluZSB2Zm9yaygpCiAJYXBwcm9wcmlhdGVseS4gIFJlbW92ZSB2Zm9yayBjaGVjayBvbiBVU0csIHdlJ3JlIHVzaW5nIGF1dG9jb25mLgogIAkocGV4ZWN1dGUpOiBTZXQgYGVycm1zZ19mbXQnIHRvIFZGT1JLX1NUUklORyBpbnN0ZWFkIG9mIGNoZWNraW5nCiAJbG9jYWxseSB3aGF0IHN0cmluZyB0byB1c2UuCgoxOTk4LTEwLTI2ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogc3BsYXktdHJlZS5jOiBUd2VhayBpbmNsdWRlIGRpcmVjdGl2ZXMgdG8gbWFrZSBzdXJlIGRlY2xhcmF0aW9ucyBvZgoJeG1hbGxvYyBhbmQgZnJlZSBhcmUgYXZhaWxhYmxlLgoKMTk5OC0xMC0yNSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6IEZpeCBoYW5kbGluZyBvZiB2aXJ0dWFsIHRhYmxlcyBpbgoJYW5vbnltb3VzIG5hbWVzcGFjZXMuCgoxOTk4LTEwLTIzICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHdvcmtfc3R1ZmYpOiBSZXBsYWNlIGNvbnN0X3R5cGUgYW5kIHZvbGF0aWxlX3R5cGUKCXdpdGggdHlwZV9xdWFscy4KCShUWVBFX1VOUVVBTElGSUVEKTogTmV3IG1hY3JvLgoJKFRZUEVfUVVBTF9DT05TVCk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9WT0xBVElMRSk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9SRVNUUklDVCk6IExpa2V3aXNlLgoJKGNvZGVfZm9yX3F1YWxpZmllcik6IE5ldyBmdW5jdGlvbi4KCShxdWFsaWZpZXJfc3RyaW5nKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfcXVhbGlmaWVyKTogTGlrZXdpc2UuCgkoaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUpOiBVc2UgdGhlbS4KCShkZW1hbmdsZV9zaWduYXR1cmUpOiBMaWtld2lzZS4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogTGlrZXdpc2UuCgkoZG9fdHlwZSk6IExpa2V3aXNlLgoJKGRlbWFuZ2xlX2Z1bmRfdHlwZSkpOiBMaWtld2lzZS4KClRodSBPY3QgMjIgMTk6NTg6NDMgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BsYXktdHJlZS5jIChzcGxheV90cmVlX2ZvcmVhY2hfaGVscGVyKTogTWFrZSBkZWZpbml0aW9uIHN0YXRpYwoJdG8gbWF0Y2ggcHJvdG90eXBlLgoKMTk5OC0xMC0yMSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHNwbGF5LXRyZWUuYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgaXQuCgkoUkVRVUlSRURfT0ZJTEVTKTogTGlrZXdpc2UuCgkoc3BsYXktdHJlZS5vKTogQWRkIGRlcGVuZGVuY2llcy4KClR1ZSBPY3QgMjAgMTI6Mjk6MDIgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3F1YWxpZmllZCk6IEZpeCBvZmYtYnktb25lIHdoZW4gY2hlY2tpbmcKCXJhbmdlIG9mICdLJyBpbmRleC4KClRodSBPY3QgMTUgMTg6NTE6MTIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2hvb3NlLXRlbXAuYzogUHJvdG90eXBlIG1rc3RlbXBzKCkgd2hlbiBJTl9HQ0MuCgoJKiBjcGx1cy1kZW0uYyAoY29uc3VtZV9jb3VudCk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGNwbHVzX21hbmdsZV9vcG5hbWUpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9pbnRlZ3JhbF92YWx1ZSk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVfdGVtcGxhdGUpOiBJbml0aWFsaXplIHZhcmlhYmxlIGBiaW5kZXgnLiAgQ2FzdCB0aGUKCXJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIFJlbW92ZQoJdW51c2VkIHZhcmlhYmxlIGBzdGFydF9vZl92YWx1ZV9wYXJtJy4KCShkZW1hbmdsZV9jbGFzc19uYW1lKTogQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShkZW1hbmdsZV9wcmVmaXgpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShnbnVfc3BlY2lhbCk6IExpa2V3aXNlLiAgQ2FzdCB0aGUgcmVzdWx0IG9mIGBzdHJsZW4nIHRvIChpbnQpCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShkZW1hbmdsZV9xdWFsaWZpZWQpOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShnZXRfY291bnQpOiBMaWtld2lzZS4KCShkb190eXBlKTogTGlrZXdpc2UuICBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKGRlbWFuZ2xlX2Z1bmN0aW9uX25hbWUpOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8gKGludCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogbWtzdGVtcC5jIChta3N0ZW1wcyk6IENhc3QgdmFyaWFibGUgYGxlbicgdG8gKGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKVHVlIE9jdCAxMyAyMzo1MTo1MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgogICAgICAgICogbWtzdGVtcC5jOiBDaGVjayBIQVZFX1NZU19USU1FX0ggYmVmb3JlIGluY2x1ZGluZyBzeXMvdGltZS5oCiAgICAgICAgKiBjb25maWd1cmUuaW4gKEFDX0NIRUNLX0hFQURFUlMpOiBDaGVjayBmb3Igc3lzL3RpbWUuaCB0b28uCiAgICAgICAgKiBjb25maWcuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGdldG9wdC5jOiBDaGVjayBIQVZFX1NUUklOR1NfSCBiZWZvcmUgaW5jbHVkaW5nIHN0cmluZ3MuaC4KCSogY29uZmlndXJlLmluIChBQ19DSEVDS19IRUFERVJTKTogQ2hlY2sgZm9yIHN0cmluZ3MuaCB0b28uCgkqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIE9jdCAxMiAxOToxNTo1OSAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZ3VyZS5pbjogaW4gY29tbWVudCwgY2FsbCBBQ19FWEVFWFQgaW5zdGVhZCBvZiBBTV9FWEVFWFQKClN1biBPY3QgMTEgMTc6MzY6MDYgMTk5OCAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBob2xvZGVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNwbHVzLWRlbS5vLCBvYnN0YWNrLm8pOiBEZXBlbmQgdXBvbiBjb25maWcuaC4KClRodSBPY3QgIDggMjM6NDI6MDggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWVyZ2UgZWdjcyAmIGRldm8gbGliaWJlcnR5LgoKMTk5OC0wOS0wOCAgTWFydGluIHZvbiBM9ndpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9hcm1fcHQpOiBEZW1hbmdsZSBhbm9ueW1vdXMgbmFtZXNwYWNlcy4KCk1vbiBTZXAgIDcgMjM6Mjk6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWtzdGVtcC5jOiBJbmNsdWRlIGNvbmZpZy5oIGV2ZW4gd2hlbiBub3QgSU5fR0NDLiAgV3JhcCBoZWFkZXIKIAlpbmNsdXNpb25zIGluc2lkZSBIQVZFXypfSCBtYWNyb3MuICBJbmNsdWRlIGFuc2lkZWNsLmggd2hlbiBub3QKIAlJTl9HQ0MuCgoJKiB2YXNwcmludGYuYzogSW5jbHVkZSBzdGRhcmcuaC92YXJhcmdzLmggZmlyc3QuCgoJKiB2cHJpbnRmLmM6IExpa2V3aXNlLgoKU2F0IFNlcCAgNSAwMzoyNDo0OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwZXhlY3V0ZS5jOiBVcGRhdGVzIGZyb20gZ2NjLiAgQ29weSBpbiBnY2MgaGFzIGJlZW4gcmVtb3ZlZC4gIFRoaXMKCWlzIHRoZSBjYW5vbmljYWwgY29weS4gIERlZmluZSBJU1NQQUNFIGlmICFJTl9HQ0MuCgkqIGFsbG9jYS5jLCB2ZnByaW50Zi5jLCBjaG9vc2UtdGVtcC5jLCBta3N0ZW1wLmMsIGdldG9wdC5jOiBTaW1pbGFybHkuCgkqIGdldG9wdDEuYywgb2JzdGFjay5jOiBTaW1pbGFybHkuCgkqIE1ha2VmaWxlLmluOiBCdWlsZCBta3N0ZW1wLm8KClR1ZSBTZXAgIDEgMjM6MTI6NDcgMTk5OCAgQ2hyaXN0b3BoZXIgRmF5bG9yIDxjZ2ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSW5jbHVkZSBhc3ByaW50ZiBpbiBsaXN0IG9mIGZ1bmN0aW9ucyBrbm93biBub3QKCXRvIGJlIGluIG5ld2xpYi4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKV2VkIEF1ZyAxOSAxNDowNTowMSAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNwbHVzLWRlbS5jICh3b3JrX3N0dWZmKTogQWRkIGRsbGltcG9ydGVkLgoJKGRlbWFuZ2xlZF9wcmVmaXgpOiBNYXJrIHN5bWJvbHMgaW1wb3J0ZWQgZnJvbSBQRSBETEwuCgkoaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGVkKTogSGFuZGxlLgoKMTk5OC0wOC0xNyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBGaXggc2ltcGxlIGFycmF5IGhhbmRsaW5nLiAgSWYgd2UgZmFpbCwKCXN0YXkgZmFpbGVkLgoKTW9uIEF1ZyAxNyAxMDo0MDozNCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYzogSW5jbHVkZSBjb25maWcuaCBpZiBpdCBleGlzdHMuICBBbHNvLCBvbmx5Cglwcm90b3R5cGUgbWFsbG9jL3JlYWxsb2MgaWYgd2UgY2FuJ3QgZ2V0IHN0ZGxpYi5oLgoKU2F0IEF1ZyAxNSAxNjoxNTowMSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFN3aXRjaCBiYWNrIHRvIGNoZWNraW5nIC0td2l0aC10YXJnZXQtc3ViZGlyIHdoZW4KCWRlY2lkaW5nIHdoZXRoZXIgdG8gY2hlY2sgZm9yIG5ld2xpYiwgdW5kb2luZyBwYXJ0IG9mIEp1bHkgMTUKCWNoYW5nZS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKVGh1IEF1ZyAxMyAxNjo0NzozOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtdGVyLCByYXRoZXIgdGhhbiBkZW1hbmdsaW5nIHRoZSB0eXBlIGFnYWluLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogUGFzcyB0a19pbnRlZ3JhbC4KCShkZW1hbmdsZV90ZW1wbGF0ZV86IFBhc3MgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZG9fdHlwZS4KCShkb190eXBlKTogUmV0dXJuIGEgdHlwZV9raW5kX3QuICBQYXNzIHRrX2ludGVncmFsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheSBib3VuZHMuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgoJQWxzbyBpbmNvcnBvcmF0ZSBmcm9tIEdDQyB2ZXJzaW9uOgoKCVR1ZSBKdWwgMjEgMTM6Mjg6MTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBVc2UgZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSBmb3IgYXJyYXlzLgoKVGh1IEF1ZyAxMyAxNjo0NzozOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBNYWtlIGZ1bmN0aW9uIGRlZmluaXRpb24KCXN0YXRpYyB0byBtYXRjaCB0aGUgcHJvdG90eXBlLgoKVHVlIEp1bCAyOCAxMTozMzowOSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtdGVyLCByYXRoZXIgdGhhbiBkZW1hbmdsaW5nIHRoZSB0eXBlIGFnYWluLgoJKGRlbWFuZ2xlX2ludGVncmFsX3ZhbHVlKTogUGFzcyB0a19pbnRlZ3JhbC4KCShkZW1hbmdsZV90ZW1wbGF0ZV86IFBhc3MgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZG9fdHlwZS4KCShkb190eXBlKTogUmV0dXJuIGEgdHlwZV9raW5kX3QuICBQYXNzIHRrX2ludGVncmFsIHRvCglkZW1hbmdsZV90ZW1wbGF0ZV92YWx1ZV9wYXJtIGZvciBhcnJheSBib3VuZHMuCgkoZGVtYW5nbGVfZnVuZF90eXBlKTogTGlrZXdpc2UuCgoJQWxzbyBpbmNvcnBvcmF0ZSBmcm9tIEdDQyB2ZXJzaW9uOgoKCVR1ZSBKdWwgMjEgMTM6Mjg6MTkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBVc2UgZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSBmb3IgYXJyYXlzLgoKTW9uIEp1bCAyNyAxMjoxNjowOCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoQUxMT0NBKTogTmV3IHZhcmlhYmxlLgoJKCQoVEFSR0VUTElCKSk6IEFkZCAkKEFMTE9DQSkgdG8gbGlicmFyeS4KCShuZWVkZWQtbGlzdCk6IEFkZCAkKEFMTE9DQSkuCgkoJChBTExPQ0EpKTogRGVwZW5kIHVwb24gc3RhbXAtcGljZGlyLgoKU3VuIEp1bCAxOSAwODoyMzoxNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBNYWtlIGZ1bmN0aW9uIGRlZmluaXRpb24KCXN0YXRpYyB0byBtYXRjaCB0aGUgcHJvdG90eXBlLgoKV2VkIEp1bCAxNSAwMDoxMjo1OCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENoZWNrIC0td2l0aC1jcm9zcy1ob3N0IHJhdGhlciB0aGFuCgktLXdpdGgtdGFyZ2V0LXN1YmRpciB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgYnVpbGQgdXNlcyBhIGNyb3NzCgljb21waWxlciwgYW5kIHdoZW4gZGVjaWRpbmcgd2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFyeS4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKU3VuIEp1bCAxMiAwMToyNzowNSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBSZXR1cm4gYSB2YWx1ZS4KClNhdCBKdWwgMTEgMTY6MTk6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChzdHJpbmcpOiBNb3ZlIGRlZmluaXRpb24gYmVmb3JlIHdvcmtfc3R1ZmYuCgkod29ya19zdHVmZik6IEFkZCB2b2xhdGlsZV90eXBlLCBmb3JnZXR0aW5nX3R5cGVzLAoJcHJldmlvdXNfYXJndW1lbnQsIGFuZCBucmVwZWF0cyBmaWVsZHMuCgkoU0NPUEVfU1RSSU5HKTogTmV3IG1hY3JvLgoJKGRlbWFuZ2xlX3RlbXBsYXRlKTogQWRkIGByZW1lbWJlcicgcGFyYW1ldGVyLiAgQWRkIGNvbW1lbnQuCglSZWdpc3RlciB0aGUgYEInIGNvZGUgdHlwZSBoZXJlLCBpZiByZW1lbWJlcmluZy4gIFRpZHkuICBGaXggY3Jhc2gKCW9uIE5VTEwgdG1wbF9hcmd2ZWMuICBCZSBjb25zaXN0ZW50IHdpdGggdXNlIG9mIHRuYW1lL3RyYXduYW1lLgoJKGRlbWFuZ2xlX25lc3RlZF9hcmdzKTogTmV3IGZ1bmN0aW9uLgoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogSGFuZGxlIHZvbGF0aWxlLXF1YWxpZmllZCBtZW1iZXIKCWZ1bmN0aW9ucy4KCShtb3BfdXApOiBEZWxldGUgdGhlIHByZXZpb3VzX2FyZ3VtZW50IHN0cmluZyBpZiBwcmVzZW50LgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IFRpZHkuICBIYW5kbGUgdm9sYXRpbGUtcXVhbGlmaWVkIG1lbWJlcgoJZnVuY3Rpb25zLiAgSGFuZGxlIGJhY2stcmVmZXJlbmNlcyB1c2luZyB0aGUgYEInIGNvZGUuICBVc2UgZXh0cmEKCXBhcmFtZXRlciB0byBkZW1hbmdsZV90ZW1wbGF0ZSBhbmQgU0NPUEVfU1RSSU5HIHdoZXJlIGFwcHJvcHJpYXRlLgoJKGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0pOiBGaXggdGhpbmtvOyAnQicgaXMgbm90IGFuIGludGVncmFsCgljb2RlLgoJKGRlbWFuZ2xlX2NsYXNzKTogVXNlIFNDT1BFX1NUUklORy4KCShnbnVfc3BlY2lhbCk6IFBhc3MgYWRkaXRpb25hbCBhcmd1bWVudCB0byBkZW1hbmdsZV90ZW1wbGF0ZS4KCVVzZSBTQ09QRV9TVFJJTkcuCgkoZGVtYW5nbGVfcXVhbGlmaWVkKTogU2F2ZSBxdWFsaWZpZWQgdHlwZXMgZm9yIGxhdGVyCgliYWNrLXJlZmVyZW5jZXMuICBIYW5kbGUgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycyBmb3IgdGVtcGxhdGUKCXR5cGVzIGNvcnJlY3RseS4KCShkb190eXBlKTogVGlkeS4gIFVzZSBTQ09QRV9TVFJJTkcuICBQYXNzIGV4dHJhIGFyZ3VtZW50IHRvCglkZW1hbmdsZV90ZW1wbGF0ZS4gIFVzZSBkZW1hbmdsZWRfbmVzdGVkX2FyZ3MuICBEb24ndCByZW1lbWJlcgoJcXVhbGlmaWVkIHR5cGVzIGhlcmU7IHRoYXQncyBub3cgZG9uZSBpbiBkZW1hbmdsZV9xdWFsaWZpZWQuCglTaW1pbGFybHkgZm9yIHRlbXBsYXRlcy4KCShkb19hcmcpOiBJbXByb3ZlIGNvbW1tZW50LiAgSGFuZGxlICduJyByZXBlYXQgY29kZS4KCShyZW1lbWJlcl90eXBlKTogQ2hlY2sgZm9yZ2V0dGluZ190eXBlcy4KCShkZW1hbmdsZV9hcmdzKTogRGVhbCB3aXRoICduJyByZXBlYXQgY29kZXMuICBUaWR5LgoKVGh1IEp1bCAgMiAxNjoyNjoyNCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IE9ubHkgdXNlIG1oLWZic2QyMSBvbiAqLSotZnJlZWJzZDIuMi5bMDEyXSwgbm90IG9uCgkqLSotZnJlZWJzZDIuMi4qLiAgRnJvbSBEbWl0cmlqIFRlamJsdW0gPHRlamJsdW1AYXJjLmhxLmN0aS5ydT4uCgpNb24gSnVuIDE1IDE2OjI5OjAxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoc2V0b2Jqcyk6IENvcnJlY3QgcXVvdGluZyBlcnJvciBpbiBjeWd3aW4zMiBjYXNlLgoJRnJvbSBDaHJpcyBGYXlsb3IgPGNnZkBjeWdudXMuY29tPi4KCk1vbiBKdW4gIDEgMTM6NDc6NTUgMTk5OCAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmM6IFVwZGF0ZSB0byBsYXRlc3QgRlNGIHZlcnNpb24uCgpNb24gSnVuICAxIDE0OjE3OjM2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBZGQgYSBkZXBlbmRlbmN5IG9uIHN0YW1wLXBpY2RpciBmb3IgdGhlCglvYmplY3RzLCBzbyB0aGF0IHdlIGNhbiBkbyBhIHBhcmFsbGVsIGJ1aWxkLgoKU2F0IE1heSAzMCAyMjoxNzoxMyAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoY2hlY2tmdW5jcyk6IEFkZCBtaXNzaW5nICInIi4KCkZyaSBNYXkgMjkgMTI6NDA6NDEgMTk5OCAgSmFzb24gTW9sZW5kYSAgKGNyYXNoQGJ1Z3NoYWNrLmN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKF9vYnN0YWNrX21lbW9yeV91c2VkKTogIEVsaWRlIHRoaXMgZnVuY3Rpb24gaWYgd2UncmUKCW9uIGEgc3lzdGVtIHdpdGggR05VIGxpYmMuCgpUdWUgTWF5IDI2IDE4OjI4OjQzIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChkaXN0Y2xlYW4pOiBSZW1vdmUgY29uZmlnLmxvZy4KClR1ZSBNYXkgMjYgMTU6MDE6NTIgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRG9uJ3QgcmVtb3ZlIGFsbG9jYS1jb25mLmguCgpGcmkgTWF5IDIyIDAxOjM4OjA3IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBjcGx1cy1kZW0uYyAoTUJVRl9TSVpFKTogQnVtcGVkIGZyb20gNTEyIHRvIDMyNzY3LgoKMTk5OC0wNS0yMSAgTWFyayBNaXRjaGVsbCAgPG1taXRjaGVsbEB1c2EubmV0PgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBIYW5kbGUgdm9sYXRpbGUgcXVhbGlmaWNhdGlvbi4KCjE5OTgtMDUtMjEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHVuaXN0ZC5oIGFzIHdlbGwuCgkqIGNvbmZpZ3VyZTogUmVidWlsZC4KCSogY29uZmlnLmluOiBSZWJ1aWxkLgoJKiBnZXRwYWdlc2l6ZS5jIChHTlVfT1VSX1BBR0VTSVpFKTogVXNlIHN5c2NvbmYgb25seSBpZiBfU0NfUEFHRVNJWkUKCWlzIGRlZmluZWQgaW4gdW5pc3RkLmguIFJlZm9ybWF0IGNvbmRpdGlvbmFsIGJsb2NrIGZvciBlYXNpZXIgcmVhZGluZy4KCgkqIGNvbmZpZy50YWJsZSAoc2hhcmVkKTogRGVmYXVsdCB0byBubyBpZiAke2VuYWJsZV9zaGFyZWR9CglpcyB1bnNldCBvciBlbXB0eTsgdGhpcyBsb2dpYyBpcyB1c2VkIGJ5IHRoZSB0b3BsZXZlbAoJY29uZmlndXJlIHNjcmlwdHMsIHRvby4KClNhdCBNYXkgMTYgMTQ6MDE6MjYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlOiBBZGQgbGluZSB0byBzZXQgZW5hYmxlX3NoYXJlZCBpbiB0aGUgTWFrZWZpbGUKCWFzIG5lZWRlZC4KCldlZCBNYXkgMTMgMTQ6MjQ6MzggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3BsdXMtZGVtLmMgKHNxdWFuZ2xlX21vcF91cCk6IENoYW5nZSByZXR1cm4gdHlwZSB0byB2b2lkLgoJKGludGVybmFsX2NwbHVzX2RlbWFuZ2xlKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYG9wdGlvbnMnLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBSZW1vdmUgZnVuY3Rpb24gd2lkZSB2YXJpYWJsZSBgaW50IGknIGFuZAoJcmVwbGFjZSB3aXRoIGBzaXplX3QgaScgYXQgZWFjaCBsb2NhdGlvbiB3aGVyZSBpdCBpcyB1c2VkLgoJKGNwbHVzX21hbmdsZV9vcG5hbWUpOiBjaGFuZ2UgdHlwZSBvZiBgaScgZnJvbSBpbnQgdG8gc2l6ZV90LgoKV2VkIE1heSAxMyAxMzozOTozOCAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBhbGxvY2EtY29uZi5oOiBJbmNsdWRlIGNvbmZpZy5oLiAgQ2hlY2sgSEFWRV9BTExPQ0FfSCByYXRoZXIKCXRoYW4gc3BhcmMgb3Igc3VuLgoJKiBNYWtlZmlsZS5pbiAoYXJndi5vKTogRGVwZW5kIHVwb24gY29uZmlnLmggYW5kIGFsbG9jYS1jb25mLmguCgpGcmkgTWF5ICA4IDAwOjIzOjUxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogU2V0IGxpYmliZXJ0eV90b3BkaXIgY29ycmVjdGx5IHdoZW4gc3JjZGlyIGlzCgkiLiIgYW5kIHdpdGhfdGFyZ2V0X3N1YmRpciBpcyBub3Qgc2V0LgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpUaHUgTWF5ICA3IDEzOjAxOjQ0IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkICotKi1taW5ndzMyKiBjYXNlLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpXZWQgTWF5ICA2IDExOjMzOjUxIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogTmV2ZXIgdXNlIGEgUElDIGZpbGUgZm9yICotKi1jeWd3aW4zMiouCgoJKiBNYWtlZmlsZS5pbiAoY29uZmlnLnN0YXR1cyk6IERlcGVuZCB1cG9uIGNvbmZpZy50YWJsZS4KCgkqIGNvbmZpZ3VyZS5pbjogT24gYSBjeWd3aW4zMiBob3N0LCBhbHdheXMgY29tcGlsZSByYW5kb20sIGFuZAoJZG9uJ3QgdGVzdCBmb3Igc3lzX3NpZ2xpc3QsIHN0cnNpZ25hbCwgb3IgcHNpZ25hbC4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoKCSogY2xvY2suYzogQ2hlY2sgSEFWRV9TWVNfUEFSQU1fSCByYXRoZXIgdGhhbiBOT19TWVNfUEFSQU1fSC4KCSogZ2V0Y3dkLmM6IExpa2V3aXNlLgoJKiBnZXRwYWdlc2l6ZS5jOiBMaWtld2lzZS4KCSogZ2V0cnVudGltZS5jOiBMaWtld2lzZS4KClR1ZSBNYXkgIDUgMTg6MDg6MzIgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCVVzZSBhdXRvY29uZiB0ZXN0cyByYXRoZXIgdGhhbiB0aGUgb2xkIGR1bW15LmMgdGVzdDoKCSogY29uZmlndXJlLmluOiBBZGQgQUNfQVJHX1dJVEggY2FsbHMgZm9yIC0td2l0aC10YXJnZXQtc3ViZGlyIGFuZAoJLS13aXRoLW5ld2xpYi4gIEFkZCBBQ19DT05GSUdfSEVBREVSLiAgVXNlIEFDX1JFUExBQ0VfRlVOQ1MgZm9yCgltb3N0IGZ1bmN0aW9ucy4gIEFkZCBzcGVjaWFsIGNhc2VzIHRvIGhhbmRsZSBuZXdsaWIgYW5kIFZ4V29ya3MuCglSZW1vdmUgdGFyZ2V0X21ha2VmaWxlX2ZyYWcuICBDcmVhdGUgc3RhbXAtaCBpbiBBQ19PVVRQVVQgaWYKCUNPTkZJR19IRUFERVJTIGlzIHNldC4gIE9ubHkgY2FsbCBjb25maWctbWwuaW4gaW4gQUNfT1VUUFVUIGlmCglDT05GSUdfRklMRVMgaXMgc2V0OyBzZXQgYWNfZmlsZSBiZWZvcmUgY2FsbGluZyBpdC4KCSogY29uZmlnLnRhYmxlIChhcm0tKi1yaXNjaXgqLCAqLSotY3lnd2luMzIpOiBSZW1vdmUuCgkoKi0qLWhwdXgqLCAqLSotaGl1eCosICotKi1pcml4NCosICotKi1zb2xhcmlzMiopOiBSZW1vdmUuCgkoKi0qLXN5c3Y0KiwgKi0qLWdvMzIsICotKi12eHdvcmtzNSosICotKi12eHdvcmtzKTogUmVtb3ZlCgkoaVszNDU2XS0qLW1pbmd3MzIqKTogUmVtb3ZlLgoJKiBNYWtlZmlsZS5pbiAoRVJST1JTX0NDLCBDT05GSUdfSCwgTkVFREVEX0xJU1QpOiBSZW1vdmUuCgkoTElCT0JKUyk6IE5ldyB2YXJpYWJsZS4KCShIT1NUX09GSUxFUywgRE9fQUxTTywgU1RBR0VTVFVGRik6IFJlbW92ZS4KCShhbGwpOiBEZXBlbmQgdXBvbiBuZWVkZWQtbGlzdC4gIERvbid0IGNoZWNrIFJVTEUxLgoJKEB0YXJnZXRfbWFrZWZpbGVfZnJhZ0ApOiBSZW1vdmUuCgkoQ09NUElMRS5jKTogSW5jbHVkZSBAREVGU0AuCgkoSEZJTEVTKTogQWRkIGFsbG9jYS1jb25mLmguCgkoUkVRVUlSRURfT0ZJTEVTKTogUmVtb3ZlIGJhc2VuYW1lLm8uCgkoJChUQVJHRVRMSUIpKTogTmV3IHRhcmdldC4KCShzdGFtcC1uZWVkZWQsIGxuZWVkZWQtbGlzdCwgbmVlZGVkLmF3aywgc3RhbXAtY29uZmlnKTogUmVtb3ZlLgoJKGxjb25maWcuaCwgbmVlZGVkMi5hd2ssIGR1bW15Lm8sIGVycm9ycyk6IFJlbW92ZS4KCShuZWVkZWQtbGlzdCwgY29uZmlnLmgpOiBSZXdyaXRlLgoJKFJVTEUxLCAkKFJVTEUxKSwgUlVMRTIsICQoUlVMRTIpKTogUmVtb3ZlLgoJKC5hbHdheXMuKTogUmVtb3ZlLgoJKE1ha2VmaWxlKTogU2V0IENPTkZJR19GSUxFUyBhbmQgQ09ORklHX0hFQURFUlMuCgkoc3RhbXAtaCk6IE5ldyB0YXJnZXQuCgkoYXRleGl0Lm8sIGNsb2NrLm8sIGdldGN3ZC5vLCBnZXRwYWdlc2l6ZS5vKTogTmV3IHRhcmdldHMuCgkoYmFzZW5hbWUubyk6IERvbid0IGRlcGVuZCB1cG9uIGNvbmZpZy5oLgoJKGdldHJ1bnRpbWUubyk6IERlcGVuZCB1cG9uIGNvbmZpZy5oLgoJKiBhdGV4aXQuYzogSW5jbHVkZSBjb25maWcuaC4gIENoZWNrIEhBVkVfT05fRVhJVCByYXRoZXIgdGhhbgoJTkVFRF9vbl9leGl0LgoJKiBiYXNlbmFtZS5jOiBEb24ndCBpbmNsdWRlIGNvbmZpZy5oLiAgRG9uJ3QgY2hlY2sgTkVFRF9iYXNlbmFtZS4KCSogY2xvY2suYzogSW5jbHVkZSBjb25maWcuaC4KCSogZ2V0Y3dkLmM6IExpa2V3aXNlLgoJKiBnZXRwYWdlc2l6ZS5jOiBMaWtld2lzZS4KCSogZ2V0cnVudGltZS5jOiBMaWtld2lzZS4gIEZpeCBjaGVja3Mgd2hpY2ggc2V0IEhBVkVfR0VUUlVTQUdFIGFuZAoJSEFWRV9USU1FUy4KCSogc3RyZXJyb3IuYzogQ2hhbmdlIHVzZXMgb2YgTkVFRF9zeXNfZXJybGlzdCB0bwoJSEFWRV9TWVNfRVJSTElTVC4gIExpa2V3aXNlIGZvciBORUVEX3N0cmVycm9yIGFuZCBIQVZFX1NUUkVSUk9SLgoJKiBzdHJzaWduYWwuYzogTGlrZXdpc2UgZm9yIE5FRURfc3lzX3NpZ2xpc3QgYW5kIEhBVkVfU1lTX1NJR0xJU1QsCglhbmQgZm9yIE5FRURfc3Ryc2lnbmFsIGFuZCBIQVZFX1NUUlNJR05BTCBhbmQgZm9yIE5FRURfcHNpZ25hbCBhbmQKCUhBVkVfUFNJR05BTC4KCSogYWNjb25maWcuaDogTmV3IGZpbGUuCgkqIGR1bW15LmM6IFJlbW92ZS4KCSogZnVuY3Rpb25zLmRlZjogUmVtb3ZlLgoJKiBjb25maWcvbWgtY3h1eDcgKEhERUZJTkVTKTogUmVtb3ZlIC1ESEFWRV9TWVNDT05GLgoJKiBjb25maWcvbWgtd2luZG93cyAoSERFRklORVMpOiBSZW1vdmUuCgkqIGNvbmZpZy9taC1jeWd3aW4zMjogUmVtb3ZlLgoJKiBjb25maWcvbWgtZ28zMjogUmVtb3ZlLgoJKiBjb25maWcvbWgtaXJpeDQ6IFJlbW92ZS4KCSogY29uZmlnL21oLXJpc2NpeDogUmVtb3ZlLgoJKiBjb25maWcvbWgtc3lzdjQ6IFJlbW92ZS4KCSogY29uZmlnL210LW1pbmd3MzI6IFJlbW92ZS4KCSogY29uZmlnL210LXZ4d29ya3M1OiBSZW1vdmUuCgkqIGNvbmZpZy5pbjogTmV3IGZpbGUsIGdlbmVyYXRlZCB1c2luZyBhdXRvaGVhZGVyLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpNb24gTWF5ICA0IDEzOjAwOjI4IDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmV3cml0ZSB0byB1c2UgYXV0b2NvbmYuCgkqIGNvbmZpZ3VyZTogR2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYuCgkqIGNvbmZpZy9taC1hNjhic2Q6IFJlbW92ZS4KCSogY29uZmlnL21oLWFwb2xsbzY4OiBSZW1vdmUuCgkqIGNvbmZpZy9taC1ocGJzZDogUmVtb3ZlLgoJKiBjb25maWcvbWgtbmNyMzAwMDogUmVtb3ZlLgoJKiBjb25maWcvbWgtc3lzdjogUmVtb3ZlLgoJKiBjb25maWcvbWgtYWl4IChSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9taC1jeHV4NyAoUkFOTElCLCBJTlNUQUxMKTogRG9uJ3QgZGVmaW5lLgoJKiBjb25maWcvbWgtaXJpeDQgKENDLCBSQU5MSUIsIElOU1RBTEwpOiBEb24ndCBkZWZpbmUuCgkqIGNvbmZpZy9taC1zeXN2NCAoUkFOTElCLCBJTlNUQUxMKTogRG9uJ3QgZGVmaW5lLgoJKiBjb25maWcudGFibGU6IENoYW5nZSBjb25maWdfc2hlbGwgdG8gQ09ORklHX1NIRUxMLCBhbmQgdXNlCglsaWJpYmVydHlfdG9wZGlyIHRvIGZpbmQgbW92ZS1pZi1jaGFuZ2UuCiAJKG02OGstYXBvbGxvLWJzZCosIG02OGstYXBvbGxvLXN5c3YqKTogUmVtb3ZlLgoJKGlbMzQ1Nl04Ni1uY3Itc3lzdjQqLCAqLSotZGd1eCosIGhwcGEqLWhwLWJzZCopOiBSZW1vdmUuCgkoKi0qLWlyaXgqLCAqLSotbTg4a2JjcyosICotKi1zeXN2Kik6IFJlbW92ZS4KCSogTWFrZWZpbGUuaW4gKHNyY2Rpcik6IFNldCB0byBAc3JjZGlyQC4KCShWUEFUSCk6IExpa2V3aXNlLgoJKHByZWZpeCwgZXhlY19wcmVmaXgsIGJpbmRpciwgbGliZGlyKTogU2V0IHRvIGF1dG9jb25mIHZhcmlhYmxlcy4KCShTSEVMTCwgSU5TVEFMTCwgSU5TVEFMTF9QUk9HUkFNLCBJTlNUQUxMX0RBVEEpOiBMaWtld2lzZS4KCShDQywgQ0ZMQUdTLCBSQU5MSUIpKTogTGlrZXdpc2UuCgkoZGF0YWRpciwgbWFuKmRpciwgaW5mb2RpciwgaW5jbHVkZWRpciwgTUFLRUlORk8pOiBSZW1vdmUuCgkodGFyZ2V0X21ha2VmaWxlX2ZyYWcsIGhvc3RfbWFrZWZpbGVfZnJhZyk6IEFkZCBzdWJzdGl0dXRpb25zLgoJKElOU1RBTExfREVTVCk6IFNldCB0byBASU5TVEFMTF9ERVNUQC4KCShNYWtlZmlsZSk6IERlcGVuZCB1cG9uIGNvbmZpZy5zdGF0dXMuICBEb24ndCBkZXBlbmQgdXBvbgoJJChob3N0X21ha2VmaWxlX2ZyYWcpIG9yICQodGFyZ2V0X21ha2VmaWxlX2ZyYWcpLgoJKGNvbmZpZy5zdGF0dXMpOiBOZXcgdGFyZ2V0LgoKU3VuIE1heSAgMyAxNzo1ODo0OSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcvbXQtc3Vub3M0OiBSZW1vdmUuICBTaG91bGQgYmUgaGFuZGxlZCBieSAtLXdpdGgtaGVhZGVycwoJYW5kIC0td2l0aC1saWJyYXJpZXMgb3B0aW9ucyBhdCB0b3AgbGV2ZWwuCgkqIGNvbmZpZy50YWJsZTogTmV2ZXIgdXNlIG10LXN1bm9zNC4KCgkqIGFsbG9jYS1jb25mLmg6IE5ldyBmaWxlLCBjb21iaW5pbmcgYWxsb2NhLW5vcm0uaCBhbmQKCWFsbG9jYS1ib3RjaC5oLgoJKiBhbGxvY2Etbm9ybS5oOiBSZW1vdmUuCgkqIGFsbG9jYS1ib3RjaC5oOiBSZW1vdmUuCgkqIGNvbmZpZ3VyZS5pbjogU2V0IHNoZWxsIHZhcmlhYmxlcyBmaWxlcyBhbmQgbGlua3MgdG8gZW1wdHkuCgkqIGNvbmZpZy50YWJsZTogRG9uJ3Qgc2V0IHNoZWxsIHZhcmlhYmxlIGZpbGVzLgoJKiBjb25maWd1cmUuYmF0OiBEb24ndCBjcmVhdGUgYWxsb2NhLWNvbmYuaC4KCSogbWFrZWZpbGUudm1zOiBMaWtld2lzZS4KCSogbXB3LWNvbmZpZy5pbjogTGlrZXdpc2UuCgkqIHZtc2J1aWxkLmNvbTogTGlrZXdpc2UuCgpGcmkgTWF5ICAxIDExOjQxOjQyIDE5OTggIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluICgkKEhPU1RfT0ZJTEVTKSAkKFJFUVVJUkVEX09GSUxFUykpOiBSZW1vdmUgb2xkCgl0YXJnZXQgZGVwZW5kaW5nIHVwb24gY29uZmlnLmguCgkoYWxsb2NhLm8pOiBBZGQgdGFyZ2V0IGRlcGVuZGluZyB1cG9uIGNvbmZpZy5oCgkoYmFzZW5hbWUubywgY2hvb3NlLXRlbXAubywgZm5tYXRjaC5vKTogTGlrZXdpc2UuCgkoZ2V0b3B0Lm8sIGdldG9wdDEubywgcGV4ZWN1dGUubywgc3RyZXJyb3Iubyk6IExpa2V3aXNlLgoJKHN0cnNpZ25hbC5vLCB4c3RyZXJyb3Iubyk6IExpa2V3aXNlLgoKRnJpIE1heSAgMSAwNDoyNjoyNSAxOTk4ICBQZXRlciBTY2hhdWVyIDxwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZT4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiAgSW5pdGlhbGl6ZSB3b3JrLgoKTW9uIEFwciAyNyAxNTo1MzozMCBFRFQgMTk5OCBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9xdWFsaWZpZWQpOiBSZXBsYWNlIG1pc3NpbmcgZWxzZS4KClN1biBBcHIgMjYgMTU6Mzg6NTAgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiBGaXggb2ZmLWJ5LW9uZSBidWcgd2hlbiBjaGVja2luZyB0aGUKCWxlbmd0aCBpbiB0aGUgbmFtZSBvZiBhIHZpcnR1YWwgdGFibGUuCgpXZWQgQXByIDIyIDEwOjUzOjQ5IEVEVCAxOTk4IEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChzdHJ1Y3Qgd29yayBzdHVmZik6IEFkZCBmaWVsZCBmb3IgQiBhbmQgSyBtYW5nbGUgY29kZXMuCgkoY3BsdXNfZGVtYW5nbGVfb3BuYW1lKTogQ2FsbCBtb3BfdXBfc3F1YW5nbGUuCgkoY3BsdXNfZGVtYW5nbGUpOiBJbml0aWFsaXplIHNxdWFuZ2xlIGluZm8sIHRoZW4gY2FsbAoJaW50ZXJuYWxfY3BsdXNfZGVtYW5nbGUuIChNb3N0IGNvZGUgbW92ZWQgdGhlcmUgYXMgd2VsbCkKCShpbnRlcm5hbF9jcGx1c19kZW1hbmdsZSk6IE5ldyBmdW5jdGlvbiwgcGVyZm9ybXMgbW9zdCBvZiB3aGF0IHVzZQoJdG8gYmUgZG9uZSBpbiBjcGx1c19kZW1hbmdsZSwgYnV0IGlzIG9ubHkgY2FsbGVkIHdpdGggdGhpcyBmaWxlLgoJKHNxdWFuZ2xlX21vcF91cCk6IE5ldyBmdW5jdGlvbiB0byBjbGVhbiB1cCBCIGFuZCBLIGNvZGUgZGF0YS4KCShtb3BfdXApOiBzZXQgcG9pbnRlcnMgdG8gTlVMTCBhZnRlciBmcmVlaW5nLgoJKGRlbWFuZ2xlX3NpZ25hdHVyZSwgZGVtYW5nbGVfdGVtcGxhdGUsIGRlbWFuZ2xlX2NsYXNzKTogQWRkCglzd2l0Y2ggZWxlbWVudHMgdG8gaGFuZGxlIEsgYW5kIEIgY29kZXMuCgkoZGVtYW5nbGVfcHJlZml4LCBnbnVfc3BlY2lhbCwgZGVtYW5nbGVfcXVhbGlmaWVkKTogQWRkCgljb2RlIHRvIGhhbmRsZSBLIGFuZCBCIGNvZGVzLgoJKGRvX3R5cGUsIGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IEhhbmRsZSBCIGFuZCBLIGNvZGVzLgoJKHJlbWVtYmVyX0t0eXBlKTogTmV3IGZ1bmN0aW9uIHRvIHN0b3JlIEsgaW5mby4KCShyZWdpc3Rlcl9CdHlwZSwgcmVtZW1iZXJfQnR5cGUpOiBOZXcgZnVuY3Rpb25zIGZvciBCIGNvZGVzLgoJKGZvcmdldF9CX2FuZF9LX3R5cGVzKTogTmV3IGZ1bmN0aW9uIHRvIGRlc3Ryb3kgQiBhbmQgSyBpbmZvLgoKRnJpIEFwciAxMCAwMTo0OToxMCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBDT1BZSU5HLkxJQiwgY2hvb3NlLXRlbXAuYywgY3BsdXMtZGVtLmM6IFN5bmMgd2l0aCBlZ2NzICYgZ2NjLgoKVGh1IE1hciAgNSAwOToyMzoyOCAxOTk4ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjb25maWcudGFibGU6IE1ha2UgbG9jYXRpbmcgZnJhZyBmaWxlcyBmYWlsc2FmZSBldmVuIGZvciB0aGUKCXNwZWNpYWwgY2FzZSBpZiBjb25maWd1cmluZyBhbmQgYnVpbGRpbmcgaW4gc3JjZGlyLgoKTW9uIEZlYiAyMyAxNDozMzoxNSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjaG9vc2UtdGVtcC5jOiBGaXggaGFuZGxpbmcgb2Ygc3lzL2ZpbGUuaCB0byB3b3JrIGluIGxpYmliZXJ0eS4KClN1biBGZWIgMjIgMTg6MDM6MjMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY2hvb3NlLXRlbXAuYzogU3luYyB3aXRoIGNvcHkgaW4gZ2NjLgoKVGh1IEZlYiAxMiAxNjoyOTo0OSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBnZXRvcHQuYzogVXBkYXRlIHRvIGxhdGVzdCBGU0YgdmVyc2lvbi4KCSogZ2V0b3B0MS5jOiBMaWtld2lzZS4KClR1ZSBGZWIgMTAgMTY6NTg6MzMgMTk5OCAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGdudV9zcGVjaWFsKTogRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IC48ZGlnaXRzPgoJc3RyaW5ncyB0aGF0IGFyZSBub3QgYWN0dWFsbHkgbGVuZ3Rocy4KCkZyaSBGZWIgIDYgMDE6MzU6MTcgMTk5OCAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKEZMQUdTX1RPX1BBU1MpOiBEb24ndCBwYXNzIFBJQ0ZMQUcuCgkoLmMubyk6IENoZWNrIHZhbHVlIG9mIGVuYWJsZV9zaGFyZWQsIG5vdCBQSUNGTEFHLgoJKHN0YW1wLXBpY2Rpcik6IERpdG8uCgpUaHUgRmViICA1IDE4OjQ4OjU2IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgogICAgICAgICogY29uZmlnL21oLWN5Z3dpbjMyOiByZW1vdmUgdmFzcHJpbnRmLm8gZnJvbSBFWFRSQV9PRklMRVMKICAgICAgICBzaW5jZSBpdCBnZXRzIGJ1aWx0IGF1dG9tYXRpY2FsbHkKClN1biBGZWIgIDEgMDI6NTI6MzIgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogY29uZmlnLnRhYmxlICh2eHdvcmtzIGNvbmZpZ3MpOiBEZWZhdWx0IHRvIFZ4V29ya3MgNS54LCBhcyB0aGF0IGlzCgl0aGUgY3VycmVudGx5IHNoaXBwaW5nIE9TLgoKVHVlIEphbiAyNyAxNjowODoyMCAxOTk4ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KCgkqIHZtc2J1aWxkLmNvbSBbUkVRVUlSRV9PRklMRVNdOiBTeW5jaHJvbml6ZWQgd2l0aCBNYWtlZmlsZS5pbjoKCUFkZCBmbm1hdGNoLm8gYW5kIG9iamFsbG9jLm87IHJlbW92ZSB2YXNwcmludGYuby4KCVtjb25maWcuaF06IERlZmluZSBORUVEX3N0cnNpZ25hbC4KCk1vbiBKYW4gMTkgMTI6MjA6MDEgMTk5OCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogZnVuY3Rpb25zLmRlZjogQ29ycmVjdCBhcmd1bWVudCB0eXBlcyBmb3Igc3RyZXJyb3IgYW5kCglzdHJzaWduYWwuICBSZXBvcnRlZCBieSBBbGV4IEd1dG1hbiA8YWd1dG1hbkBlbWMuY29tPi4KClN1biBKYW4gMTggMTU6NTc6MjggMTk5OCAgTWljaGFlbCBTbnlkZXIgIDxtc255ZGVyQGNsZWF2ZXIuY3lnbnVzLmNvbT4KCgkqIHZhc3ByaW50Zi5jIChpbnRfdmFzcHJpbnRmKTogSW5jcmVhc2UgYnVmZmVyIHNpemUgZm9yIGZsb2F0L2RvdWJsZQoJdmFsdWVzLgoKU2F0IEphbiAxNyAyMjoyODozOCAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCQkJICBKLkouIFZhbmRlckhlaWpkZW4gPEouSi52YW5kZXJIZWlqZGVuQHN0dWRlbnQudXR3ZW50ZS5ubD4KCglBZGQgbWluZ3czMiBzdXBwb3J0LgoJKiBwZXhlY3V0ZS5jIChwZXhlY3V0ZSk6IE5ldyBmdW5jdGlvbiBmb3IgbWluZ3czMi4gU3VwcG9ydHMgcGlwZXMuCgkocHdhaXQpOiBOZXcgZnVuY3Rpb24gZm9yIG1pbmd3MzIuCgoJKiBjb25maWcudGFibGUgKGlbMzQ1Nl04Ni0qLW1pbmd3MzIqKTogU3VwcG9ydCBmb3IgaTM4Ni1taW5ndzMyLgoJKiBjb25maWcvbXQtbWluZ3czMjogTmV3IGZpbGUuCgkqIHhtYWxsb2MuYyAoZmlyc3RfYnJlYWspOiBOb3QgdXNlZCBmb3IgbWluZ3czMi4KCSh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBEb24ndCB1c2Ugc2JyayBvbiBtaW5ndzMyLgoJKHhtYWxsb2MpOiBMaWtld2lzZS4KCSh4cmVhbGxvYyk6IExpa2V3aXNlLgoKU2F0IEphbiAxNyAyMjoyODowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjaG9vc2UtdGVtcC5jOiBTeW5jIHdpdGggZ2NjIHZlcnNpb24uCgpUdWUgSmFuIDEzIDE4OjM0OjM5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChpbnN0YWxsX3RvX2xpYmRpciwgaW5zdGFsbF90b190b29sZGlyKTogQWRkIE1VTFRJU1VCRElSCgl0byBhbGwgZmlsZW5hbWVzIGluIGxpYmRpciBhbmQgdG9vbGRpci4KCShkaXN0Y2xlYW4pOiBEbyBNVUxUSUNMRUFOIGJlZm9yZSBkZWxldGluZyBNYWtlZmlsZS4KCShzdGFtcC1uZWVkZWQsIHN0YW1wLWNvbmZpZyk6IEFkZCBNVUxUSVNSQ1RPUCB0bwoJcGF0aG5hbWUgZm9yIG1vdmUtaWYtY2hhbmdlLgoKVGh1IERlYyAgNCAxNzoyNToxOSAxOTk3ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYyAoc3lzX25zaWcpOiBUcnkgTlNJRyBhbmQgX05TSUcuCgpXZWQgTm92IDE5IDEzOjM3OjA2IDE5OTcgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogYWxsb2NhLW5vcm0uaCAoYWxsb2NhLCBHQ0MgY2FzZSk6IERvbid0IHJlZGVmaW5lIGFsbG9jYSBpZiBpdAoJd2FzIGFscmVhZHkgZGVmaW5lZCBwcmV2aW91c2x5LgoKTW9uIE5vdiAxMCAxMjo0ODowMyAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIE1ha2VmaWxlLmluIChJTlNUQUxMKTogVXNlIC4uL2luc3RhbGwtc2gsIG5vdCBpbnN0YWxsLgoKVHVlIE9jdCAyOCAyMzo0MToxNSAxOTk3ICBKdWR5IEdvbGRiZXJnICA8am9keWdAaWR0Lm5ldD4KCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgcGV4ZWN1dGUuYy4KCldlZCBPY3QgMTUgMTk6MTM6NDggMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogYXNwcmludGYuYzogQ29uc2lzdGVudGx5IHVzZSBlaXRoZXIgc3RkYXJnIG9yIHZhcmFyZ3MuCgpUdWUgT2N0IDE0IDEyOjAxOjAwIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9zaWduYXR1cmUpOiBEb24ndCBsb29rIGZvciByZXR1cm4gdHlwZXMgb24KCWNvbnN0cnVjdG9ycy4gIEhhbmRsZSBtZW1iZXIgdGVtcGxhdGUgY29uc3RydWN0b3JzLgoKRnJpIE9jdCAgMyAxNzo1MzozMCAxOTk3ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBSRUFETUU6IEZpeCBjb25maWd1cmF0aW9uIGluc3RydWN0aW9ucy4KCk1vbiBTZXAgMjkgMTI6Mjg6NDEgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogcGV4ZWN1dGUuYzogVXBkYXRlIHRvIGN1cnJlbnQgdmVyc2lvbiBmcm9tIC9nZC9nbnUvbGliOgoKCU1vbiBTZXAgMjkgMTI6Mjc6NTkgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKICAgICAgICAqIHBleGVjdXRlLmM6IFVzZSBzcGF3biBpZiBfX0NZR1dJTjMyX18uCgoJMTk5Ny0wOC0wOCAgUGF1bCBFZ2dlcnQgIDxlZ2dlcnRAdHdpbnN1bi5jb20+CgogICAgICAgICogcGV4ZWN1dGUuYzogSW5jbHVkZSAiY29uZmlnLmgiIGZpcnN0LCBhcyBwZXIgYXV0b2NvbmYgbWFudWFsLgoKCUZyaSBKdW4gMjcgMTU6MjA6MjkgMTk5NyAgU2NvdHQgQ2hyaXN0bGV5IDxzY290dGNAbmV0LWNvbW11bml0eS5jb20+CgogICAgICAgICogcGV4ZWN1dGUuYyAoZml4X2FyZ3YpOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgKHBleGVjdXRlKTogV2luMzIgYnV0IG5vdCBDeWd3aW4zMiBuZWVkcyBpdHMgYXJndW1lbnRzIGZpeGVkLgogICAgICAgIEFkZCB1bmRlcnNjb3JlIHRvIGN3YWl0IGZ1bmN0aW9uIGNhbGwuCgpTdW4gU2VwIDI4IDEyOjAwOjUyIDE5OTcgIE1hcmsgTWl0Y2hlbGwgIDxtbWl0Y2hlbGxAdXNhLm5ldD4KCiAgICAgICAgKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBBZGQgbmV3IHBhcmFtZXRlci4gIEhhbmRsZSBuZXcKICAgICAgICB0ZW1wbGF0ZS1mdW5jdGlvbiBtYW5nbGluZy4KICAgICAgICAoY29uc3VtZV9jb3VudF93aXRoX3VuZGVyc2NvcmVzKTogTmV3IGZ1bmN0aW9uLgogICAgICAgIChkZW1hbmdsZV9zaWduYXR1cmUpOiBIYW5kbGUgbmV3IG5hbWUtbWFuZ2xpbmcgc2NoZW1lLgoKV2VkIFNlcCAyNCAwMDozMTo1OSAxOTk3ICBGZWxpeCBMZWUgIDxmbGVlQHlpbi5jeWdudXMuY29tPgoKCSogYXNwcmludGYuYzogc3RkYXJnLmggd2hlbiBBTE1PU1RfU1REQwoJKiBjb25maWcvbWgtd2luZG93cyAoRVhUUkFfT0ZJTEVTKTogYWRkIGFzcHJpbnRmLm8gYW5kCiAJc3RybmNhc2VjbXAuby4KClRodSBBdWcgMjggMTQ6Mjc6MTUgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogdmFzcHJpbnRmLmMgKHZhc3ByaW50Zik6IEFsbG93IGZvciBfQlNEX1ZBX0xJU1RfLgoKCSogY29uZmlnLnRhYmxlOiBBZGQgY2FzZSBmb3IgRnJlZUJTRCAyLjEgYW5kIDIuMiwgbmVlZHMgbWgtZmJzZDIxLgoKCSogY29uZmlnL21oLWZic2QyMSAoRVhUUkFfT0ZJTEVTKTogRm9yY2UgdmFzcHJpbnRmLm8KCldlZCBTZXAgMTAgMTI6NDM6MTAgMTk5NyAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IENoYW5nZSAiY29tcGxleCIgdG8gIl9fY29tcGxleCIuCgpGcmkgU2VwICA1IDE2OjM0OjQyIDE5OTcgIEFuZHJldyBDYWduZXkgIDxjYWduZXlAYjEuY3lnbnVzLmNvbT4KCgkqIGFzcHJpbnRmLmMgKGFzcHJpbnRmKTogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiBBZGQgYXNwcmludGYuYwoJKiBmdW5jdGlvbnMuZGVmOiBEaXR0by4KClRodSBBdWcgMjggMTg6NTM6MzQgMTk5NyAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogYXJndi5jIChkdXBhcmd2KTogTmV3IGZ1bmN0aW9uLCBkdXBsaWNhdGUgYW4gYXJndW1lbnQgdmVjdG9yLgoKVHVlIEF1ZyAxOSAyMDoyODo0NSAxOTk3ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogY29uZmlnL21oLWN5Z3dpbjMyOiBhbHNvIGJ1aWxkIHJhbmRvbS5vCgpUdWUgQXVnIDE5IDE3OjEwOjU2IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBBZGQgJ2V4dGVybicgdG8gcHJlcGVuZHNfdW5kZXJzY29yZS4KCldlZCBKdWwgMzAgMTE6NDI6MTkgMTk5NyAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogVmFyaW91cyBjaGFuZ2VzIHRvIHByb2R1Y2UgSmF2YSBvdXRwdXQgd2hlbiBwYXNzZWQKCURNR0xfSkFWQS4gIFRodXMgIjo6IiBiZWNvbWVzICIuIiBhbmQgIkpBcnJheTxGb28+IiBiZWNvbWVzICJGb29bXSIuCgkobWFpbik6IFN1cHBvcnQgLS1qYXZhIGFuZCAtaiBmbGFncyB0byBzZXQgRE1HTF9KQVZBLgoKVHVlIEp1bCAyMiAxOTowNToyMyAxOTk3ICBSb2JlcnQgSG9laG5lIDxyb2JlcnQuaG9laG5lQE1hdGhlbWF0aWsuVFUtQ2hlbW5pdHouREU+CgoJKiBjb25maWcvbWgtZ28zMiAoQ0MsIEFSLCBSQU5MSUIpOiBEb24ndCBkZWZpbmUuCgpUdWUgSnVsIDIyIDE3OjQ5OjU0IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMpOiBBZGQgcGV4ZWN1dGUuby4KCShwZXhlY3V0ZS5vKTogTmV3IHRhcmdldC4KCgkqIE1ha2VmaWxlLmluIChzdGFtcC1uZWVkZWQpOiBOZXcgdGFyZ2V0LCByZXBsYWNpbmcgbmVlZGVkLWxpc3QuCgkobmVlZGVkLWxpc3QpOiBKdXN0IGRlcGVuZCB1cG9uIHN0YW1wLW5lZWRlZC4KCShzdGFtcC1jb25maWcpOiBOZXcgdGFyZ2V0LCByZXBsYWNpbmcgY29uZmlnLmguCgkoY29uZmlnLmgpOiBKdXN0IGRlcGVuZCB1cG9uIHN0YW1wLWNvbmZpZy4KCShtb3N0bHljbGVhbik6IFJlbW92ZSBzdGFtcC0qLgoKVGh1IEp1biAxMiAxMTowMDoxOCAxOTk3ICBBbmdlbGEgTWFyaWUgVGhvbWFzIChhbmdlbGFAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChGTEFHU19UT19QQVNTKTogcGFzcyBJTlNUQUxMLCBJTlNUQUxMX1BST0dSQU0gYW5kCglJTlNUQUxMX0RBVEEgZm9yIG11bHRpbGliYmVkIGluc3RhbGxzCgpUdWUgSnVuICAzIDEzOjIxOjA1IDE5OTcgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJVHVlIERlYyAxMCAwOTo0NDo1NyAxOTk2ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEB0d2luc3VuLmNvbT4KCgkqIGNob29zZS10ZW1wLmMgKGNob29zZV90ZW1wX2Jhc2UpOiBEb24ndCBkdW1wIGNvcmUgaWYgVE1QRElSIGlzIGVtcHR5LgoKCSogY2hvb3NlLXRlbXAuYyAodHJ5KTogSW5zaXN0IHRoYXQgdGVtcCBkaXIgYmUgc2VhcmNoYWJsZS4KCglXZWQgT2N0IDIzIDE3OjM2OjM5IDE5OTYgIERvdWcgUnVwcCAgKHJ1cHBAZ25hdC5jb20pCgoJKiBjaG9vc2UtdGVtcC5jIChjaG9vc2VfdGVtcF9iYXNlKTogT24gVk1TLCB1c2UgcHJvcGVyIHN5bnRheAoJZm9yIGN1cnJlbnQgZGlyZWN0b3J5LgoKCVNhdCBGZWIgMTUgMTk6MDM6NDggMTk5NyAgR2VvZmZyZXkgTm9lciAgKG5vZXJAY3lnbnVzLmNvbSkKCgkqIHBleGVjdXRlLmM6IFJlbW92ZSBzcGVjaWFsIGNhc2VzIGZvciBjeWd3aW4zMi4KCShwd2FpdCk6IFJlbW92ZSBsb2NhbCBkZWZpbml0aW9uIG9mIGBwaWQnLgoKCVR1ZSBOb3YgMTIgMTg6MjY6MTUgMTk5NiAgRG91ZyBSdXBwICAocnVwcEBnbmF0LmNvbSkKCgkqIHBleGVjdXRlLmMgKHZmb3JrKTogU3VwcGx5IG5ldyBkZWZpbml0aW9uIGZvciBWTVMuCgkocHdhaXQpOiBVc2Ugd2FpdHBpZCBpbnN0ZWFkIG9mIHdhaXQgZm9yIFZNUy4KClR1ZSBNYXkgMjAgMTQ6MDI6MjAgMTk5NyAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AbGlzYS5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiBIYW5kbGUgYEonLgoJKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IFByaW50ICJjb21wbGV4IiBmb3IgaXQuCgpXZWQgQXByIDMwIDEyOjE1OjQ1IDE5OTcgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgdHVybiBvbiBtdWx0aWxpYiBoZXJlLgoKTW9uIEFwciAyOCAxOTowNDozMSAxOTk3ICBNaWNoYWVsIFNueWRlciAgPG1zbnlkZXJAY2xlYXZlci5jeWdudXMuY29tPgoKCSogb2JzdGFjay5jOiBtb3ZlIF9vYnN0YWNrX21lbW9yeV91c2VkIG91dHNpZGUgb2YgaWZkZWYuICBDYW5ub3QgYmUKCWVsaWRlZDsgbmVlZGVkIGJ5IGdkYiBhbmQgbm90IHByZXNlbnQgaW4gbGliYy4KClRodSBBcHIgMjQgMTk6MzM6NDcgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogUmVtb3ZlIHRtcG11bHRpLm91dC4KClR1ZSBBcHIgMjIgMTA6MjU6MTUgMTk5NyAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9pZWVlX2RvdWJsZV9saXR0bGVieXRlX2JpZ3dvcmQpOgoJQWRkIG5ldyBmbG9hdGZvcm1hdCwgbWFpbmx5IGZvciBBUk0gZG91Ymxlcy4KCk1vbiBBcHIgMTQgMTI6MTE6MTYgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBVc2UgJHtjb25maWdfc2hlbGx9IHdpdGggJHttb3ZlaWZjaGFuZ2V9LiAgRnJvbQoJVGhvbWFzIEdyYWljaGVuIDxncmFpY2hlbkByenBkLmRlPi4KCkZyaSBBcHIgIDQgMDM6MDk6MjQgMTk5NyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEVuYWJsZSBtdWx0aWxpYmluZyBieSBkZWZhdWx0LgoJVXBkYXRlIG11bHRpbGliIHRlbXBsYXRlIHRvIHJlYWQgY29uZmlnLW1sLmluLgoKVHVlIEFwciAgMSAxNjoyNjozOSAxOTk3ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIG1ha2VmaWxlLnZtczogQWRkIG9iamFsbG9jLgoKTW9uIE1hciAzMSAyMzo1Nzo1MSAxOTk3ICBILkouIEx1ICA8aGpsQGdudS5haS5taXQuZWR1PgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2l0KTogQWRkIHByb3RvdHlwZSBkZWNsYXJhdGlvbi4KCSh1c2FnZSwgZmF0YWwpOiBMaWtld2lzZS4KCgkqIHhleGl0LmMgKF94ZXhpdF9jbGVhbnVwKTogQWRkIHByb3RvdHlwZS4KCgkqIHN0cmVycm9yLmMgKGluaXRfZXJyb3JfdGFibGVzKTogRGVjbGFyZS4KCkZyaSBNYXIgMjggMTE6NDM6MjAgMTk5NyAgSC5KLiBMdSAgPGhqbEBsdWNvbi5vcmc+CgoJKiBmdW5jdGlvbnMuZGVmOiBBZGQgREVGIG9mIHZhc3ByaW50ZiwgYW5kIERFRkZVTkMgb2Ygc3Ryc2lnbmFsLgoJKiBzdHJzaWduYWwuYzogT25seSBkZWZpbmUgc3Ryc2lnbmFsIGlmIE5FRURfc3Ryc2lnbmFsLgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTKTogUmVtb3ZlIHZhc3ByaW50Zi5vLgoJKiBjb25maWd1cmUuaW46IEFkZCBORUVEX3N0cnNpZ25hbCB0byB4Y29uZmlnLmguICBBZGQgdmFzcHJpbnRmLm8KCXRvIHhuZWVkZWQtbGlzdC4KCSogY29uZmlnL21oLWN5Z3dpbjMyIChIREVGSU5FUyk6IEFkZCAtRE5FRURfc3Ryc2lnbmFsLgoJKEVYVFJBX09GSUxFUyk6IERlZmluZSB0byB2YXNwcmludGYuby4KCSogY29uZmlnL21oLXdpbmRvd3MgKEhERUZJTkVTKTogQWRkIC1ETkVFRF9zdHJzaWduYWwuCgkoRVhUUkFfT0ZJTEVTKTogQWRkIHZhc3ByaW50Zi5vLgoJKiBjb25maWcvbXQtdnh3b3JrczUgKHZ4Y29uZmlnLmgpOiBEZWZpbmUgTkVFRF9zdHJzaWduYWwuCgkodnhuZWVkZWQtbGlzdCk6IEFkZCB2YXNwcmludGYuby4KClRodSBNYXIgMjAgMTc6MDI6MDkgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogb2JqYWxsb2MuYzogSW5jbHVkZSA8c3RkaW8uaD4uCgpNb24gTWFyIDE3IDE5OjIzOjExIDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIG9iamFsbG9jLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIG9iamFsbG9jLmMKCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgb2JqYWxsb2Muby4KCShvYmphbGxvYy5vKTogTmV3IHRhcmdldC4KClNhdCBNYXIgMTUgMTg6NDk6NDEgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogb2JzdGFjay5jOiBVcGRhdGUgdG8gY3VycmVudCBGU0YgdmVyc2lvbi4KCkZyaSBNYXIgMTQgMTQ6MTg6NDcgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IEFkZCBwcm90b3R5cGVzIGZvciBhbGwgc3RhdGljIGZ1bmN0aW9ucy4KCShteXN0cnN0cik6IE1ha2Ugc3RhdGljLiAgTWFrZSBhcmd1bWVudHMgYW5kIHJlc3VsdCBjb25zdC4KCShjcGx1c19tYXRjaCk6IFJlbW92ZTsgbm90IHVzZWQuCgpUdWUgTWFyIDExIDE0OjIwOjMxIDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6IENhbGwgZGVtYW5nbGVkX2Z1bmRfdHlwZSBmb3Igb3RoZXIKCV9fdCogc3ltYm9scy4KClR1ZSBNYXIgMTEgMTU6NDE6MjEgMTk5NyAgSC5KLiBMdSAgPGhqbEBsdWNvbi5vcmc+CgoJKiBzcGFjZXMuYzogRGVjbGFyZSBtYWxsb2MgYW5kIGZyZWUgcHJvcGVybHkuCgkqIHN0cnNpZ25hbC5jIChpbml0X3NpZ25hbF90YWJsZXMpOiBBZGQgcHJvdG90eXBlLgoJKiB4YXRleGl0LmMgKF94ZXhpdF9jbGVhbnVwKTogQWRkIHBhcmFtZXRlciBkZWNsYXJhdGlvbnMuCgpXZWQgRmViIDE5IDE1OjQzOjI0IDE5OTcgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChsbmVlZGVkLWxpc3QpOiBJZiBhbGxvY2EubyBpcyBuZWVkZWQsIHhleGl0Lm8gaXMKCWFsc28gcmVxdWlyZWQgYmVjYXVzZSBvZiB4bWFsbG9jLm8uCgpGcmkgRmViIDE0IDEzOjQzOjM4IDE5OTcgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIHN0cnNpZ25hbC5jOiBVbmNvbmRpdGlvbmFsbHkgcmVkZWZpbmUgc3lzX3NpZ2xpc3QgYXJvdW5kIHRoZQoJaW5jbHVzaW9uIG9mIHRoZSBzeXN0ZW0gaGVhZGVyIGZpbGVzLgoKVGh1IEZlYiAxMyAyMjowMTowNCAxOTk3ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIG1ha2VmaWxlLnZtczogUmVtb3ZlIDggYml0IGNoYXJhY3RlcnMuICBVcGRhdGUgdG8gbGF0ZXN0CglnY2MgcmVsZWFzZS4KClR1ZSBGZWIgIDQgMTE6NTI6MTkgMTk5NyAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogc3Ryc2lnbmFsLmM6IFVzZSBORUVEX3N5c19zaWdsaXN0IGluc3RlYWQgb2YKCUxPU0lOR19TWVNfU0lHTElTVC4KCSogY29uZmlnLnRhYmxlOiBEb24ndCB1c2UgbWgtbHlueG9zLgoJKiBjb25maWcvbWgtbHlueG9zOiBSZW1vdmUuCgpUaHUgSmFuIDE2IDE0OjUxOjAzIDE5OTcgIEJvYiBNYW5zb24gIDxtYW5zb25AY2hhcm1lZC5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IEZpeCBpbmRlbnRpbmc7IG1ha2UgaWRlbnRpY2FsIHRvIHRoZSBjb3B5CglpbiBHQ0MuCgkoZG9fdHlwZSwgY2FzZSAnTScpOiBDaGVjayBmb3IgYSB0ZW1wbGF0ZSBhcyB3ZWxsIGFzIGEgY2xhc3MuCgpUaHUgRGVjIDE5IDEzOjUxOjMzIDE5OTYgIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGxpc2EuY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tdC12eHdvcmtzNSAodnhuZWVkZWQtbGlzdCk6IFJlbW92ZSBzaWdzZXRtYXNrLm8sIHNpbmNlCgl2eHdvcmtzIDUuWzAtM10gYWxsIGhhdmUgc2lnc2V0bWFzayBpbiB0aGVtOyB0aGUgb25lIHByb3ZpZGVkIGJ5CglsaWJpYmVydHkgaXMgaW5jb3JyZWN0LCBhcyB3ZWxsLgoKTW9uIERlYyAgMiAxNTowMzo0MiAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBhbGxvY2EuYyAoYWxsb2NhKTogV2hlbiBjb21waWxlZCB3aXRoIGFuIEFOU0kvSVNPIGNvbXBpbGVyLAoJYWxsb2NhIHRha2VzIGEgc2l6ZV90IGFyZ3VtZW50LCBub3QganVzdCB1bnNpZ25lZC4KCk1vbiBOb3YgMTggMTU6NDI6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IE5vdGUgdGhhdCB0aGlzIGZpbGUgYWxzbyBsaXZlcyBpbiBHQ0MuCgpNb24gTm92IDE4IDE1OjE5OjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jOiBSZW1vdmUgaW5jbHVkZSBvZiBsaWJpYmVydHkuaCBmb3IgaHB1eC4KCSogYXJndi5jOiAgUmVwbGFjZSBkZWZzIGZyb20gbGliaWJlcnR5LmguCgkqIHNwYWNlcy5jOiBQdXQgYmFjayBleHRlcm5zIGZyb20gcmVtb3ZlZCBmcm9tIGxpYmliZXJ0eS5oLgoJKiB2YXNwcmludGYuYzogUmVtb3ZlIGluY2x1ZGUgb2YgbGliaWJlcnR5LmggZm9yIGhwdXguCgpNb24gTm92IDE4IDE0OjA4OjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBDaGVja2luZyBpbiBhZ2FpbjsgbGFzdCBjaGVja2luIGZpbGVkIGR1ZSB0byBzdGlja3kgdGFnLgoKV2VkIE5vdiAxMyAwODoyMjowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYzogUmV2ZXJ0IGxhc3QgdHdvIGNvbW1pdHMgZHVlIHRvIGNvbmZsaWN0cyB3aXRoCglocHV4IHN5c3RlbSBoZWFkZXJzLgoKV2VkIE5vdiAxMyAwODoyMjowMCAxOTk2ICBEYXduIFBlcmNoaWsgIDxkYXduQGNyaXR0ZXJzLmN5Z251cy5jb20+CgoJKiBhbGxvY2EuYywgYXJndi5jLCBzcGFjZXMuYywgc3RyY2FzZWNtcC5jLCB2YXNwcmludGYuYywgdnByaW50Zi5jOgoJUmV2ZXJ0IGxhc3QgY29tbWl0IGR1ZSB0byBjb25mbGljdHMgd2l0aCBocHV4IHN5c3RlbSBoZWFkZXJzLgoKV2VkIE5vdiAxMyAxMDozNjo1MCAxOTk2ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAdGlrdG9rLmN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoeHttLHJlfWFsbG9jKTogTWFrZSBkZWNsYXJhdGlvbnMgY29tcGF0aWJpbGUgd2l0aAoJbGliaWJlcnR5Lmggd2hlbiBjb21waWxlZCB3aXRoIGEgc3RhbmRhcmQgY29tcGlsZXIuCgpUdWUgTm92IDEyIDE2OjMxOjAwIDE5OTYgIERhd24gUGVyY2hpayAgPGRhd25AY3JpdHRlcnMuY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS5jOiBJbmNsdWRlIGxpYmliZXJ0eS5oIGZvciBkZWZpbml0aW9uIG9mIHhtYWxsb2MuCglEb24ndCByZWRlZmluZSBOVUxMLgoJKiBhcmd2LmM6IE1vdmUgcHJvdG90eXBlcyB0byBsaWJpYmVydHkuaC4KCSogY3BsdXMtZGVtLmM6IEluY2x1ZGUgbGliaWJlcnR5LmggZm9yIGRlZmluaXRpb24gb2YgeG1hbGxvYy4KCURvbid0IHJlZGVmaW5lIE5VTEwuCglVc2UgY2FzdHMgdG8gZWxpbWluYXRlIGNvbXBpbGVyIHdhcm5pbmdzLgoJKiBzcGFjZXMuYzogUmVtb3ZlIHByb3RvdHlwZXMgZm9yIG1hbGxvYyBhbmQgZnJlZSB3aGljaCBhcmUKCWFscmVhZHkgaW4gbGliaWJydHkuaC4KCSogc3RyY2FzZWNtcC5jOiBVc2UgY2FzdHMgdG8gZWxpbWluYXRlIGNvbXBpbGVyIHdhcm5pbmdzLgoJKiB2YXNwcmludGYuYzogSW5jbHVkZSBsaWJpYmVydHkuaCBmb3IgZGVmaW5pdGlvbiBvZiBtYWxsb2MuCglEb24ndCByZWRlZmluZSBOVUxMLgoJKiB2cHJpbnRmLmM6IEluY2x1ZGUgc3RkYXJnLmggaWYgX19TVERDX18uCgpGcmkgT2N0IDExIDE1OjQyOjEyIDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtd2luZG93czogIEFkZCBzdHJjYXNlY21wLm8gdG8gRVhUUkFfT0ZJTEVTLgoKRnJpIE9jdCAxMSAxMToxNjozMSAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHcuYyAobXB3aWZ5X2ZpbGVuYW1lKTogUmV3cml0ZSB0byBzaW1wbGlmeSwgYW5kIHRvIGhhbmRsZQoJdXB3YXJkIGNvbXBvbmVudHMgY29ycmVjdGx5LgoKVHVlIE9jdCAgOCAwODo1NTozNCAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlLCBjb25maWcvbWgtd2luZG93czogIEFkZCBzdXBwb3J0IGZvciBidWlsZGluZyB1bmRlcgoJTVNWQyAodGhlIE1pY3Jvc29mdCBidWlsZCBlbnZpcm9ubWVudCkuCgpNb24gT2N0ICA3IDEwOjUwOjI3IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGZubWF0Y2guYzogVW5kZWYgY29uc3QgaWYgbm90IF9fU1REQ19fLgoKVGh1IE9jdCAgMyAxMzo0NjozOSAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBmbm1hdGNoLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGZubWF0Y2guYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgZm5tYXRjaC5vLgoJKGZubWF0Y2gubyk6IE5ldyB0YXJnZXQuCgpXZWQgU2VwIDE4IDE0OjQ5OjEzIDE5OTYgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IEZpeCBoYW5kbGluZyBvZiBhZGRyZXNzIGFyZ3MuCgkoZ251X3NwZWNpYWwpOiBIYW5kbGUgdHlwZV9pbmZvIHN0dWZmLgoKRnJpIFNlcCAxMyAxNzo1Mjo1NSAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHcuYyAoRGVidWdQSSk6IE1ha2Ugc2V0dGFibGUgZnJvbSB0aGUgZW52IHZhciBERUJVR19QQVRITkFNRVMuCgkobXB3aWZ5X2ZpbGVuYW1lKTogSGFuZGxlICI6Oi8iIGNhc2UuCgpUaHUgU2VwIDEyIDEzOjMwOjQwIDE5OTYgIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWgtY3lnd2luMzI6IG5ldyBmaWxlIChuZWVkIC1ETkVFRF9iYXNlbmFtZSBhbmQKCQktRE5FRURfc3lzX3NpZ2xpc3QgZm9yIG5hdGl2ZSBOVCByZWJ1aWxkaW5nKQoJKiBjb25maWcudGFibGUgKCotKi1jeWd3aW4zMik6IG5ldyBlbnRyeQoJKiBjaG9vc2UtdGVtcC5jOiBicmluZyBpbiBzeW5jIHdpdGggZ2NjIChyZXZlcnQgQXVnIDE3IGNoYW5nZSkKClRodSBBdWcgMjkgMTY6NDg6NDUgMTk5NiAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQHRpa3Rvay5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlIChpWzM0NV04Ni0qLSopOiBSZWNvZ25pemUgaTY4NiBmb3IgcGVudGl1bSBwcm8uCgpUdWUgQXVnIDI3IDEzOjQ3OjU4IDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmMgKHBleGVjdXRlKSBbTVBXXTogUmVtb3ZlIG9sZCBib2d1cyBjb2RlIHRoYXQKCW1lc3NlZCB3aXRoIGFyZ3VtZW50cyB0aGF0IGluY2x1ZGVkIGEgJy8nLCBhZGQgZXNjYXBlIGNoYXJzCgl0byBkb3VibGUgcXVvdGVzLCByZW1vdmUgY29uc3QgZGVjbCBmcm9tIGFyZyB0aGF0IE1hYwoJY29tcGlsZXJzIGRvbid0IHNlZW0gdG8gbGlrZS4KClNhdCBBdWcgMTcgMDQ6NDQ6MjcgMTk5NiAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IFVwZGF0ZSB0ZXN0IGZvciB3aW4zMiAoJiYgISBjeWd3aW4zMikuCgkqIGNob29zZS10ZW1wLmM6IGZpeCBXSU4zMiBwcmVwcm9jZXNzb3IgZGVmaW5lcwoKVGh1IEF1ZyAxNSAxMjoyNjo0OCAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEFkZCBAREFTSF9DX0ZMQUdAIGFuZCBAU0VHTUVOVF9GTEFHKHtEZWZhdWx0fSlACgl0byBlZGl0aW5nIG9mIGRlZmF1bHQgbWFrZWZpbGUgcnVsZS4KClN1biBBdWcgMTEgMjE6MDM6MjcgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGFsbG9jYS1ub3JtLmg6ICBJbmNsdWRlIDxtYWxsb2MuaD4gaWYgX1dJTjMyLgoJKiBhcmd2LmM6ICBJbmNsdWRlIG5vbi1wcm90b3R5cGVkIGRlY2xzIGZvciBtYWxsb2MgYW5kIHN0cmluZwoJZnVuY3Rpb25zIGlmICEgX1dJTjMyIG9yIGlmIF9fR05VQ19fLgoKVGh1IEF1ZyAgOCAxMjo0Mjo0MCAxOTk2ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIGNvbmZpZy5oLXZtczogTmV3IGZpbGUuCgkqIG1ha2VmaWxlLnZtczogVXNlIGl0LgoKV2VkIEF1ZyAgNyAxNzoxNjoxMiAxOTk2ICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbkBjcml0dGVycy5jeWdudXMuY29tKQoKCSogZ2V0b3B0LmMgKF9nZXRvcHRfaW50ZXJuYWwpOiAgSWYgYXJnYyBpcyAwLCBqdXN0IHJldHVybiAoYmVmb3JlCgl3ZSByZWZlcmVuY2UgKmFyZ3YgYW5kIHNlZ2ZhdWx0KS4KCk1vbiBBdWcgIDUgMDE6Mjk6MDggMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKGRpc3RjbGVhbik6IEFkZCBtdWx0aWxpYi5vdXQuCgpUaHUgSnVsIDE4IDE3OjQwOjU1IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS1ub3JtLmg6IENoYW5nZSAjaWZkZWYgc3BhcmMgdG8gI2lmIGRlZmluZWQgKHNwYXJjKSAmJgoJZGVmaW5lZCAoc3VuKS4gIEZyb20gQW5kcmV3IEdpZXJ0aCA8QU5EUkVXR0BtaWNyb2xpc2UuY28udWs+LgoKTW9uIEp1bCAgMSAxMzo0MDo0NCAxOTk2ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCglUdWUgTWF5IDI4IDE1OjI5OjAzIDE5OTYgIFBhdCBSYW5raW4gIDxyYW5raW5AZXFsLmNhbHRlY2guZWR1PgoKCSogdm1zYnVpbGQuY29tIChSRVFVSVJEX09GSUxFUyk6IEFkZCBjaG9vc2UtdGVtcC5vIGFuZCB4c3RyZHVwLm8uCgoJVGh1IEphbiAyNSAxODoyMDowNCAxOTk2ICBQYXQgUmFua2luICA8cmFua2luQGVxbC5jYWx0ZWNoLmVkdT4KCgkqIHZtc2J1aWxkLmNvbTogQ2hhbmdlcyB0byBoYW5kbGUgREVGRlVOQyhvbl9leGl0KS4KCShkb19vZmlsZXMpOiBBbGxvdyBub25leGlzdGVudCBzb3VyY2UgZmlsZSBpbiBwYXNzIDMuCgkoY2hrX2RlZmZ1bmMpOiBOZXcgcm91dGluZS4KClR1ZSBKdW4gMjUgMTk6MjQ6NDMgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmMgKFBFWEVDVVRFX1ZFUkJPU0UpOiBEZWZpbmUuCgkoTVBXIHBleGVjdXRlKTogQ2hlY2sgZmxhZ3MgJiBQRVhFQ1VURV9WRVJCT1NFIGluc3RlYWQgb2YgdmVyYm9zZV9mbGFnLgoKVHVlIEp1biAyNSAyMzoxMTo0OCAxOTk2ICBKYXNvbiBNb2xlbmRhICAoY3Jhc2hAZ29kemlsbGEuY3lnbnVzLmNvLmpwKQoKCSogTWFrZWZpbGUuaW4gKGRvY2Rpcik6IFJlbW92ZWQuCgpUdWUgSnVuIDI1IDIzOjAxOjA3IDE5OTYgIEphc29uIE1vbGVuZGEgIChjcmFzaEBnb2R6aWxsYS5jeWdudXMuY28uanApCgoJKiBNYWtlZmlsZS5pbiAob2xkaW5jbHVkZWRpcik6IFJlbW92ZWQuCgpUdWUgSnVuIDI1IDIyOjUwOjA3IDE5OTYgIEphc29uIE1vbGVuZGEgIChjcmFzaEBnb2R6aWxsYS5jeWdudXMuY28uanApCgogICAgICAgICogTWFrZWZpbGUuaW4gKGRhdGFkaXIpOiBTZXQgdG8gJChwcmVmaXgpL3NoYXJlLgoKVGh1IEp1biAyMCAyMToxNzo1MiAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJtX3B0KTogUmVpbmRlbnQuICBBdm9pZCBlbmRsZXNzIGxvb3AgYnkKCWNoZWNraW5nIGZvciBlcnJvcnMgZnJvbSBkb190eXBlLgoKVHVlIEp1biAxOCAxNDozNjoxOSAxOTk2ICBLbGF1cyBLYWVtcGYgIDxra2FlbXBmQHByb2dpcy5kZT4KCgkqIG1ha2VmaWxlLnZtczogTmV3IGZpbGUuCgkqIHhtYWxsb2MuYzogSWYgVk1TLCBpbmNsdWRlIDxzdGRsaWIuaD4gYW5kIDx1bml4bGliLmg+IHJhdGhlcgoJdGhhbiBkZWNsYXJpbmcgbWFsbG9jLCByZWFsbG9jLCBhbmQgc2Jyay4KCk1vbiBKdW4gMTAgMTM6MTc6MTcgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIHBleGVjdXRlLmM6IE5ldyBmaWxlLgoKV2VkIEp1biAgNSAxNjo1Nzo0NSAxOTk2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEB0YW11LmVkdT4KCgkqIHhtYWxsb2MuYzogRGVjbGFyZSBzYnJrLgoKU2F0IE1heSAgNCAwNTowODo0NSAxOTk2ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBhbGxvY2Etbm9ybS5oOiAgQWRkIFNQQVJDd29ya3MgY2MgY29tcGF0aWJsZSBfX2J1aWx0aW5fYWxsb2NhCglkZWNsYXJhdGlvbi4KCk1vbiBBcHIgMjIgMTg6NDE6NDkgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogeHN0cmVycm9yLmM6IEluY2x1ZGUgPHN0ZGlvLmg+LgoKU3VuIEFwciAyMSAxMTo1NToxMiAxOTk2ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IEFkZCBhdGV4aXQuYy4KClN1biBBcHIgMjEgMDk6NTA6MDkgMTk5NiAgU3RlcGhlbiBMIE1vc2hpZXIgIChtb3NoaWVyQHdvcmxkLnN0ZC5jb20pCgoJKiBjaG9vc2UtdGVtcC5jOiBJbmNsdWRlIHN5cy90eXBlcy5oIGJlZm9yZSBzeXMvZmlsZS5oIGZvciBzY28zLjJ2NS4KCldlZCBBcHIgMTcgMTE6MTc6NTUgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNob29zZS10ZW1wLmM6IERvbid0ICNpbmNsdWRlIHN5cy9maWxlLmggaWZkZWYgTk9fU1lTX0ZJTEVfSC4KCSNpbmNsdWRlIDxzdGRpby5oPgoJKiBjb25maWcvbXQtdnh3b3JrczUgKEhERUZJTkVTKTogRGVmaW5lIE5PX1NZU19GSUxFX0guCgpUdWUgQXByIDE2IDExOjI3OjE2IDE5OTYgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCiAgICAgICAgKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogSWYgYWxsb2NhLm8gaXMgbmVlZGVkLCBzbyBpcyB4bWFsbG9jLm8uCglSZXZlcnRzIEZlYiA4LCAxOTk1IGNoYW5nZS4KCk1vbiBBcHIgMTUgMTI6NTM6MjYgMTk5NiAgRG91ZyBFdmFucyAgPGRqZUBjYW51Y2suY3lnbnVzLmNvbT4KCgkqIGNob29zZS10ZW1wLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIGNob29zZS10ZW1wLmMuCgkoUkVRVUlSRURfT0ZJTEVTKTogQWRkIGNob29zZS10ZW1wLm8uCgpTYXQgQXByIDEzIDE0OjE5OjMwIDE5OTYgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuQGNyaXR0ZXJzLmN5Z251cy5jb20pCgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF90b19kb3VibGUpOiAgRG9uJ3QgYmlhcyBleHBvbmVudCB3aGVuCgloYW5kbGluZyB6ZXJvJ3MsIGRlbm9ybXMgb3IgTmFOcy4KClRodSBBcHIgMTEgMTM6MzY6NTYgMTk5NiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3JpdHRlcnMuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSk6ICBGaXggYnVncyB3aXRoIGhhbmRsaW5nCgludW1iZXJzIHdpdGggZnJhY3Rpb25zIDwgMzIgYml0cy4KCk1vbiBBcHIgIDggMTQ6NDg6MzQgMTk5NiAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiBQZXJtaXQgLS1lbmFibGUtc2hhcmVkIHRvIHNwZWNpZnkgYSBsaXN0IG9mCglkaXJlY3Rvcmllcy4KClR1ZSBNYXIgMTkgMjI6MDI6MDcgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogRml4IGZvciBub24tbWFuZ2xlZCBwb2ludGVyCglhcmd1bWVudHMuCgpGcmkgTWFyICA4IDE3OjI0OjE4IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogSWYgc3JjZGlyIGlzIGAuJyBhbmQgd2l0aF90YXJnZXRfc3ViZGlyIGlzIG5vdAoJYC4nLCB0aGVuIHNldCBNVUxUSVNSQ1RPUCBiZWZvcmUgY2FsbGluZyBjb25maWctbWwuaW4uCgpUaHUgTWFyICA3IDEzOjM3OjEwIDE5OTYgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy5jIChtcHdfb3Blbik6IEFkZCBkZWJ1Z2dpbmcgb3V0cHV0IG9wdGlvbi4KCldlZCBNYXIgIDYgMTc6MzY6MDMgMTk5NiAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogRml4IGZvciBhZGRyZXNzLW9mLWV4dGVybiBhcmd1bWVudHMuCgpUdWUgRmViIDI3IDEyOjAwOjUwIDE5OTYgIFJheW1vbmQgSm91ICA8cmpvdUBtZXhpY2FuLmN5Z251cy5jb20+CgoJKiBtcHcuYyAobXB3aWZ5X2ZpbGVuYW1lKTogQ2hhbmdlIDYgdG8gNSBpbgoJc3RybmNtcCAodW5peG5hbWUsICIvdG1wLyIsIDUpLgoKVHVlIEZlYiAyMCAxMDo1NTo1MyAxOTk2ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBJbml0aWFsaXplIGlzX2Jvb2wuICBDb3JyZWN0bHkKCWhhbmRsZSAwIGFzIGEgcG9pbnRlciB2YWx1ZSBwYXJhbWV0ZXIuCgpNb24gRmViICA1IDE2OjQxOjQ0IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChhbGwpOiBEZXBlbmQgdXBvbiByZXF1aXJlZC1saXN0LgoJKHJlcXVpcmVkLWxpc3QpOiBOZXcgdGFyZ2V0LgoJKGNsZWFuKTogUmVtb3ZlIHJlcXVpcmVkLWxpc3QuCgpXZWQgSmFuIDMxIDEwOjE5OjQxIDE5OTYgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiB3aW4zMi5jOiBEZWxldGVkLgoJKiBjb25maWcudGFibGUgKGkzODYtKi13aW4zMik6IERlbGV0ZWQuCgkqIGNvbmZpZy9taC1pMzg2d2luMzI6IERlbGV0ZWQuCgpUaHUgSmFuIDE4IDExOjM0OjE3IDE5OTYgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBDaGFuZ2Ugb3BuYW1lIHBhcmFtZXRlciB0bwoJY29uc3QgY2hhciAqLgoJKGNwbHVzX21hbmdsZV9vcG5hbWUpOiBDaGFuZ2UgcmV0dXJuIHR5cGUgYW5kIG9wbmFtZSBwYXJhbWV0ZXIgdG8KCWNvbnN0IGNoYXIgKi4gIERvbid0IGNhc3QgcmV0dXJuIHZhbHVlLgoKVHVlIEphbiAxNiAxMjoxMzoxMSAxOTk2ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHcuYzogSW5jbHVkZSBUaW1lci5oLCBpbiBvcmRlciB0byBnZXQgbTY4ayBNaWNyb3NlY29uZHMgdHJhcAoJZGVmaW5pdGlvbi4KCldlZCBKYW4gIDMgMTM6MTU6MDQgMTk5NiAgRnJlZCBGaXNoICA8Zm5mQGN5Z251cy5jb20+CgoJKiBvYnN0YWNrLmM6IFVwZGF0ZSBjb3B5cmlnaHQgdG8gMTk5Ni4KCShfb2JzdGFja19tZW1vcnlfdXNlZCk6IERlZmluZSBuZXcgZnVuY3Rpb24uICBDYWxsZWQgdmlhCglvYnN0YWNrX21lbW9yeV91c2VkIG1hY3JvLgoKVGh1IERlYyAyOCAxMTozOTo0MCAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiB4c3RyZHVwLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKTogQWRkIHhzdHJkdXAuYy4KCShSRVFVSVJFRF9PRklMRVMpOiBBZGQgeHN0cmR1cC5vLgoJKHhzdHJkdXAubyk6IE5ldyB0YXJnZXQuCgpNb24gRGVjIDExIDE4OjE4OjUyIDE5OTUgIE1pa2UgU3R1bXAgIDxtcnNAY3lnbnVzLmNvbT4KCgkqIGF0ZXhpdC5jOiBOZXcgc3R1YiB0byBwcm92aWRlIGF0ZXhpdCBvbiBzeXN0ZW1zIHRoYXQgaGF2ZQoJb25fZXhpdCwgbGlrZSBTdW5PUyA0LjEueCBzeXN0ZW1zLgoJKiBmdW5jdGlvbnMuZGVmIChvbl9leGl0LCBhdGV4aXQpOiBEaXR0by4KCk1vbiBEZWMgMTEgMTU6NDI6MTQgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LmMgKG1wd19hYm9ydCk6IFJlbW92ZSBkZWNsLgoJKG1wd19hY2Nlc3MpOiBNb3ZlIGRlYnVnZ2luZyBwcmludGYuCgpTYXQgRGVjICAyIDAxOjI1OjIzIDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogQ29uc2lzdGVudGx5IHVzZSAke2hvc3R9IHJhdGhlciB0aGFuICR7eGhvc3R9IG9yCgkke3RhcmdldH0uCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgYm90aGVyIHRvIHNldCAke3hob3N0fSBiZWZvcmUgY2FsbGluZwoJY29uZmlnLnRhYmxlLgoKVHVlIE5vdiAyOCAxNDoxNjo1NyAxOTk1ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBsaXNhLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoLmMubyk6IFVzZSB0ZXN0IGluc3RlYWQgb2YgdGhlIGxlZnQgYnJhY2tldCwgdG8KCWF2b2lkIHByb2JsZW1zIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBtYWtlLgoKVHVlIE5vdiAyOCAxMTo0NToxNyAxOTk1ICBTdGFuIFNoZWJzICA8c2hlYnNAYW5kcm9zLmN5Z251cy5jb20+CgoJKiBtcHctbWFrZS5zZWQ6IEZpeCBJTkNESVIgZWRpdCB0byB3b3JrIHdpdGggTm92IDE0IGNoYW5nZS4KClR1ZSBOb3YgMjEgMTE6MjY6MzQgMTk5NSAgRnJlZCBGaXNoICA8Zm5mQHJ0bC5jeWdudXMuY29tPgoKCSogY29uZmlnL21oLWhwdXg6IFJlbW92ZS4gIEl0IHdhcyBvbmx5IHVzZWQgdG8gZGVmaW5lIEVYVFJBX09GSUxFUywKCXdoaWNoIHdhcyBzZXQgdG8ganVzdCBhbGxvY2Eubywgd2hpY2ggaXMgbm93IGF1dG9tYXRpY2FsbHkgbWFya2VkCglhcyBuZWVkZWQgYnkgdGhlIGF1dG9jb25maWd1cmF0aW9uIHByb2Nlc3MuCgpUdWUgTm92IDIxIDE0OjE1OjA2IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZTogQ2hlY2sgJHt3aXRoX2Nyb3NzX2hvc3R9IHJhdGhlciB0aGFuIGNvbXBhcmluZwoJJHtob3N0fSBhbmQgJHt0YXJnZXR9LgoKVGh1IE5vdiAxNiAxNDozNDo0MiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IElmIHdpdGhfdGFyZ2V0X3N1YmRpciBpcyBlbXB0eSwgc2V0IHhob3N0IHRvCgkke2hvc3R9IHJhdGhlciB0aGFuICR7dGFyZ2V0fSBiZWZvcmUgY2FsbGluZyBjb25maWcudGFibGUuCgpUdWUgTm92IDE0IDAxOjM4OjMwIDE5OTUgIERvdWcgRXZhbnMgIDxkamVAY2FudWNrLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoTVVMVElUT1ApOiBEZWxldGVkLgoJKE1VTFRJU1JDVE9QLCBNVUxUSUJVSUxEVE9QKTogTmV3LgoJKEZMQUdTX1RPX1BBU1MpOiBEZWxldGUgSU5DRElSLgoJKElOQ0RJUik6IEFkZCAkKE1VTFRJU1JDVE9QKS4KCShpbnN0YWxsX3RvX2xpYmRpcik6IEFkZCAkKE1VTFRJU1VCRElSKS4gIENhbGwgJChNVUxUSURPKS4KCSogY29uZmlndXJlLmluOiBEZWxldGUgY2FsbCB0byBjZmctbWwtY29tLmluLiAgQ2FsbCBjb25maWctbWwuaW4KCWluc3RlYWQgb2YgY2ZnLW1sLXBvcy5pbi4KCShjcm9zcy1jb21waWxlIGNoZWNrKTogQ2hhbmdlIHRvIHRlc3QgZm9yIHdpdGhfdGFyZ2V0X3N1YmRpci4KCShFWFRSQV9MSU5LUyk6IERlbGV0ZS4KClN1biBOb3YgMTIgMTI6MTM6MDQgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogbXB3LW1ha2Uuc2VkOiBBZGQgZ2V0cGFnZXNpemUuYy5vIHRvIG5lZWRlZC1saXN0LgoJKiBtcHcuYyBbVVNFX01XX0hFQURFUlNdOiBDb25kaXRpb25hbGl6ZSBjb21waWxpbmcgb2YKCWZ1bmN0aW9ucyB0aGF0IGFyZSBzdXBwbGllZCBieSBNZXRyb3dlcmtzIGxpYnJhcmllcy4KCShmc3RhdCk6IENsZWFuIHVwIGRlc2NyaXB0b3ItPnBvaW50ZXIgY29udmVyc2lvbiBjb2RlLgoJKEluc3RhbGxDb25zb2xlLCBldGMpOiBFbXB0eSBkZWZpbml0aW9ucywgZm9yIHdoZW4gbGlua2luZwoJd2l0aCBTSU9VWC4KClN1biBOb3YgIDUgMTk6MjU6MjcgMTk5NSAgUGVyIEJvdGhuZXIgIDxib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoRkxBR1NfVE9fUEFTUyk6ICBBbHNvIHBhc3MgUElDRkxBR1MuCgkoLmMubyk6ICBTdHlsaXN0aWMgY2hhbmdlLgoKVGh1IE5vdiAgMiAxMjowNjoyOSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBzdHJ0b2wuYywgc3RydG91bC5jOiBEb24ndCBpbmNsdWRlIDxzdGRsaWIuaD4uICBGcm9tCglwaGRtQGluZm8udWNsLmFjLmJlIChQaGlsaXBwZSBEZSBNdXl0ZXIpLgoKV2VkIE5vdiAgMSAxMTo1OTozNiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IENvcnJlY3Qgc2VkIGNhbGwuCgpNb24gT2N0IDMwIDEzOjAzOjQ1IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluOiAgQ2xlYW4gdXAgLyBzaW1wbGlmeSBmb3IgbmF0aXZlLgoKCSogY29uZmlndXJlLmluOiAgTWVyZ2UgaW4gc3R1ZmYgZnJvbSAuLi94aWJlcnR5L2NvbmZpZ3VyZS5pbi4KCSogTWFrZWZpbGUuaW4gKENDKTogIEFkZCBkZWZpbml0aW9uIChzbyBpdCBjYW4gYmUgb3ZlcnJyaWRkZW4KCWJ5IC4uL2NvbmZpZ3VyZSkuCgpUdWUgT2N0IDI0IDE3OjU3OjI3IDE5OTUgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLnNlZDogTGVhdmUgc3RyZXJyb3IuYy5vIGluIHN0YW5kYXJkIGxpc3Qgb2YgZnVuY3Rpb25zLgoJKiBtcHcuYyAoUl9PSywgRU5PRU5ULCBFQUNDRVNTLCBFTk9TWVMpOiBSZW1vdmUuCgkobGluayk6IFJlbW92ZSB1c2VsZXNzIGRlZmluaXRpb24gd2l0aCBlcnJvciByZXR1cm4uCgkobGFzdF9taWNyb3NlY29uZHMsIHdhcm5faWZfc3Bpbl9kZWxheSwgcmVjb3JkX2Zvcl9zcGluX2RlbGF5KToKCVVzZSBVbnNpZ25lZFdpZGUgdHlwZSBmb3IgbWljcm9zZWNvbmQgY291bnRzLgoKVGh1IE9jdCAxOSAxMDo1MjowNyAxOTk1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAd29nZ2xlYnVnLnRpYWMubmV0PgoKCSogbWVtY21wLmMgKG1lbWNtcCk6IEFyZ3VtZW50IHR5cGVzIGFyZSBjb25zdCB2b2lkICosIG5vdCB2b2lkCgkqY29uc3QuCgoJKiBzdHJuY2FzZWNtcC5jIChzdHJuY2FzZWNtcCk6IEluY2x1ZGUgYW5zaWRlY2wuaC9zdGRhcmcuaCwgbm90CglzeXMvdHlwZXMuaC4KCSogc3RyY2FzZWNtcC5jIChzdHJjYXNlY21wKTogRGl0dG8uCgpUdWUgT2N0IDEwIDExOjAzOjI0IDE5OTUgIEZyZWQgRmlzaCAgPGZuZkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEJJU09OKTogIFJlbW92ZSBtYWNyby4KClR1ZSBTZXAgMjYgMTU6MDY6NDYgMTk5NSAgU3RhbiBTaGVicyAgPHNoZWJzQGFuZHJvcy5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEhGSUxFUyk6IEFkZCBkZWZhdWx0IGVtcHR5IGRlZmluaXRpb24uCgkqIG1wdy1jb25maWcuaW4gKGNvbmZpZy5oKTogT25seSB1cGRhdGUgaWYgY2hhbmdlZC4KCSogbXB3LW1ha2UuaW46IFJlbW92ZS4KCSogbXB3LW1ha2Uuc2VkOiBOZXcgZmlsZSwgZWRpdHMgTWFrZWZpbGUuaW4gaW50byBNUFcgbWFrZWZpbGUuCgkqIG1wdy5jOiBSZW1vdmUgc2VtaS1jbG9uZSBvZiBzdHJlcnJvciBjb2RlLgoJKHN5c19uZXJyLCBzeXNfZXJybGlzdCk6IERlZmluZSBoZXJlLgoJKE1pY3Jvc2Vjb25kcyk6IE9ubHkgZGVmaW5lIGFzIEEtbGluZSB0cmFwIGlmIG02OGsgTWFjLgoKV2VkIFNlcCAyMCAxMjo1MzozMiAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobWFpbnRhaW5lci1jbGVhbik6IE5ldyBzeW5vbnltIGZvciBkaXN0Y2xlYW4uCgpNb24gQXVnIDI4IDE5OjQ3OjUyIDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogY29uZmlnLnRhYmxlOiAgRm9yIGhvc3QsIGdlbmVyYWxpemUgcnM2MDAwLWlibS1haXgqCgl0byAqLWlibS1haXgqIHNvIHdlIGFsc28gaW5jbHVkZSBwb3dlcnBjLgoKVHVlIEF1ZyAyMiAwMzoxODowNSAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5Aa3ItbGFwdG9wLmN5Z251cy5jb20+CgoJRnJpIEp1biAxNiAxODozNTo0MCAxOTk1ICBQYXQgUmFua2luICAocmFua2luQGVxbC5jYWx0ZWNoLmVkdSkKCgkqIHhzdHJlcnJvci5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4sIHZtc2J1aWxkLmNvbTogQ29tcGlsZSBpdC4KCk1vbiBKdWwgMzEgMTI6MTY6MzIgMTk5NSAgc3RldmUgY2hhbWJlcmxhaW4gIDxzYWNAc2xhc2guY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZSAoaTM4Ni0qLXdpbjMyKTogTmV3LgoKRnJpIEp1bCAyMSAxMTozNTo1MiAxOTk1ICBEb3VnIEV2YW5zICA8ZGplQGNhbnVjay5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE1VTFRJVE9QKTogTmV3IHZhcmlhYmxlLgoJKE1VTFRJRElSUywgTVVMVElTVUJESVIsIE1VTFRJRE8sIE1VTFRJQ0xFQU4pOiBMaWtld2lzZS4KCShhbGwpOiBBZGQgbXVsdGlsaWIgc3VwcG9ydC4KCShpbnN0YWxsX3RvX3Rvb2xkaXIsICpjbGVhbik6IExpa2V3aXNlLgoKTW9uIEp1bCAxMCAxMTo0NzoyNyAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIG1ha2VmaWxlLmRvcyAoT0JKUyk6IEFkZCBoZXguby4gIEZyb20gREogRGVsb3JpZS4KCkZyaSBKdW4gMzAgMTc6Mjg6NTkgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCgoJKiB2bXNidWlsZC5jb206ICBjcmVhdGUgIm5ldy1saWIub2xiIiwgYnVpbGQgbGliaWJlcnR5IHVuZGVyIHRoYXQKCW5hbWUsIGFuZCB0aGVuIG1ha2UgaXQgYmVjb21lICJsaWJlcnR5Lm9sYiIgd2hlbiBkb25lLCBzbyB0aGF0IGFuCglpbmNvbXBsZXRlIGJ1aWxkIGF0dGVtcHQgbmV2ZXIgbGVhdmVzIGJlaGluZCBzb21ldGhpbmcgd2hpY2ggbG9va3MKCWxpa2UgYSBjb21wbGV0ZSBsaWJyYXJ5LgoKVGh1IEp1biAyOSAwMDoyMjowMiAxOTk1ICBTdGV2ZSBDaGFtYmVybGFpbiAgPHNhY0BzbGFzaC5jeWdudXMuY29tPgoKCSogY29uZmlnL21oLWkzODZwZTogTmV3IGZpbGUgZm9yIFBFIGhvc3RzLgoJKiBjb25maWcudGFibGU6IFVuZGVyc3RhbmQgUEUgaG9zdHMuCgpXZWQgSnVuIDI4IDE5OjEzOjIzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmM6IFVwZGF0ZSBmcm9tIGdjYy4KCgkqIGFyZ3YuYywgZHVtbXkuYzogSWYgX19TVERDX18sICNpbmNsdWRlICJhbGxvY2EtY29uZi5oIiBhZnRlcgogICAgICAgIDxzdGRkZWYuaD4uCgkqIGFsbG9jYS1ub3JtLmg6IElmIF9fU1REQ19fLCBkZWNsYXJlIGFsbG9jYSB3aXRoIGl0cyBwYXJhbWV0ZXIuCgpUaHUgSnVuIDIyIDE4OjU3OjQ3IDE5OTUgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkqIG1wdy1tYWtlLmluIChBTExfQ0ZMQUdTKTogRGVmaW5lIE5FRURfYmFzZW5hbWUuCgkqIG1wdy5jOiBPbmx5IHRlc3QgRGVidWdQSSBvbmNlIHdoZW5ldmVyIHByaW50aW5nIGRlYnVnIGluZm8uCgkobXB3aWZ5X2ZpbGVuYW1lKTogSWYgZmlsZW5hbWUgaXMgL3RtcC9mb28sIGNoYW5nZSBpdCBpbnRvIDpfZm9vLAoJYWxzbyBmaXggdG8gbm90IHdyaXRlIG9uIGlucHV0IGZpbGVuYW1lIGJ1ZmZlci4KCShtcHdfYWNjZXNzKTogVXNlIHN0YXQoKSBpbnN0ZWFkIG9mIG9wZW4oKSwgd29ya3MgZm9yIGRpcmVjdG9yaWVzCglhcyB3ZWxsIGFzIGZpbGVzLgoKTW9uIEp1biAxOSAwMDozMzoyMiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBNYXNzYWdlIGJyb2tlbiBzaGVsbHMgdGhhdCByZXF1aXJlICdlbHNlIHRydWUnLgoKU2F0IEp1biAxNyAyMzoyMTo1OCAxOTk1ICBGcmVkIEZpc2ggIDxmbmZAY3lnbnVzLmNvbT4KCgkqIGFsbG9jYS1ub3JtLmg6IERlY2xhcmUgYWxsb2NhIGFzIHR5cGUgIlBUUiIgdG8gbWF0Y2ggZnVuY3Rpb25zLmRlZi4KCURlY2xhcmUgX19idWlsdGluX2FsbG9jYSBpbiB0aGUgc3BhcmMgY2FzZSwgYXMgYXJndi5jIGRpZC4KCSogYXJndi5jOiBSZXBsYWNlIGlubGluZSB2ZXJzaW9uIG9mIGFsbG9jYS1ub3JtLmggYXQgc3RhcnQgb2YgZmlsZSB3aXRoCglhICNpbmNsdWRlIG9mIGFsbG9jYS1jb25mLmguICBQcmVjZWRlIGl0IHdpdGggYW4gaW5jbHVkZSBvZiBhbnNpZGVjbC5oCgliZWNhdXNlIGFsbG9jYS1ub3JtLmggbmVlZHMgdG8gZGVjbGFyZSBhbGxvY2EgYXMgIlBUUiIuCgpNb24gSnVuIDEyIDE0OjI0OjI2IDE5OTUgIFN0ZXZlIENoYW1iZXJsYWluICA8c2FjQHNsYXNoLmN5Z251cy5jb20+CgoJKiB3aW4zMi5jOiBOZXcgZmlsZS4KCkZyaSBKdW4gIDkgMTU6MTY6MTQgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBkdW1teS5jOiAjaW5jbHVkZSAiYWxsb2NhLWNvbmYuaCIuCgpXZWQgSnVuICA3IDExOjQ2OjIzIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKG1vc3RseWNsZWFuKTogUmVtb3ZlIHN0YW1wLXBpY2Rpci4KCShjbGVhbik6IERvbid0LgoKTW9uIEp1biAgNSAxODo0NjowNiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy50YWJsZSAoZnJhZ3MpOiBVc2UgdG9wbGV2ZWwgcGljIGZyYWdzLgoKCSogTWFrZWZpbGUuaW4gKFBJQ0ZMQUcpOiBOZXcgbWFjcm8uCgkoYWxsKTogRGVwZW5kIG9uIHN0YW1wLXBpY2Rpci4KCShuZWVkZWQtbGlzdCk6IERpdHRvLgoJKC5jLm8pOiBBbHNvIGJ1aWxkIHBpYyBvYmplY3QuCgkoc3RhbXAtcGljZGlyKTogTmV3IHJ1bGUuCgkobW9zdGx5Y2xlYW4pOiBSZW1vdmUgcGljLgoJKGNsZWFuKTogUmVtb3ZlIHN0YW1wLXBpY2Rpci4KCkZyaSBNYXIgMjQgMTY6NTU6NDggMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCgoJKiB2bXNidWlsZC5jb20gKGNvbmZpZy5oKTogQWRkIGAjZGVmaW5lIE5FRURfYmFzZW5hbWUnLgoKVHVlIE1heSAyMyAxMDoxMjo0NiAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGNsb2NrLmMsIGdldG9wdC5jLCBzdHJ0b2QuYywgdnNwcmludGYuYzogIENoYW5nZSBmcm9tIHVzaW5nIExHUEwKCXRvIGxpYmlvLXN0eWxlIGNvcHlyaWdodC4KCSogZ2V0cGFnZXNpemUuYzogIFJlbW92ZSBGU0YgY29weXJpZ2h0LgoKU2F0IE1heSAyMCAxMjozMDoyMyAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5Aa3ItbGFwdG9wLmN5Z251cy5jb20+CgoJQWRkZWQgaW1wcm92ZWQgVk1TIHN1cHBvcnQgZnJvbSBQYXQgUmFua2luOgoKCUZyaSBNYXIgMTcgMTg6NDA6MzYgMTk5NSAgUGF0IFJhbmtpbiAgKHJhbmtpbkBlcWwuY2FsdGVjaC5lZHUpCgoJKiB2bXNidWlsZC5jb206ICBuZXcgZmlsZS4KCgkqIGdldHBhZ2VzaXplLmMgKGdldHBhZ2VzaXplKTogIGltcGxlbWVudCBmb3IgVk1TOwoJKiBzdHJlcnJvci5jIChzdHJlcnJvciwgc3RyZXJybm8sIHN0cnRvZXJybm8pOiAgYWRkIHJ1ZGltZW50YXJ5CglzdXBwb3J0IGZvciBFVk1TRVJSLgoKVGh1IE1heSAxOCAxNzowMTo0MiAxOTk1ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5Aa3ItbGFwdG9wLmN5Z251cy5jb20+CgoJV2VkIE1heSAxMCAxNDoyODoxNiAxOTk1IFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybWx0ZC5jby51aykKCgkqIGZsb2F0Zm9ybWF0LmMgKGZsb2F0Zm9ybWF0X2FybV9leHQpOiBEZWZpbmUuCgpUdWUgTWF5IDE2IDEzOjMwOjU5IDE5OTUgIFBlciBCb3RobmVyICA8Ym90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tPgoKCSogYmFzZW5hbWUuYywgYmNtcC5jLCBnZXRjd2QuYywgaW5zcXVlLmMsIHJlbmFtZS5jLCBzaWdzZXRtYXNrLmMsCglzdHJlcnJvci5jLCBzdHJzaWduYWwuYzogIFJlbW92ZSBGU0YgY29weXJpZ2h0LgoJKiBzaWdzZXRtYXNrLmM6ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLSBzZWVtcyB0byBiZSBuZWVkZWQgYnkgSVNDLgoKTW9uIE1heSAxNSAxOTo1MzoxNyAxOTk1ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIGJjb3B5LmMsIGJ6ZXJvLmMsIG1lbWNtcC5jLCBtZW1jcHkuYywgbWVtc2V0LmMsIHN0cmNoci5jLAoJc3RycmNoci5jLCBzdHJzdHIuYywgdmZvcmsuYzogIFJlbW92ZSBGU0YgQ29weXJpZ2h0LCBiZWNhdXNlIHRoaXMKCW1pZ2h0IGNvbnRhbWluYXRlIGxpYnN0ZGMrKyB3aXRoIHRoZSBMR1BMLiAgKE9LJ2QgYnkgUk1TIDExIE9jdCA5NC4pCgkqIHN0cmNoci5jLCBzdHJyY2hyLmM6ICBBZGQgY2FzdCB0byBzdXBwcmVzcyBjb25zdCB3YXJuaW5nLgoKVGh1IE1heSAgNCAxNDozNjo0MiAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBVc2UgY29uc3QgaW5zdGVhZCBvZiBDT05TVC4gIERvbid0IGluY2x1ZGUKICAgICAgICBhbnNpZGVjbC5oIGRpcmVjdGx5LgoKV2VkIEFwciAxOSAwMTozMDoyNyAxOTk1ICBKYXNvbiBNZXJyaWxsICA8amFzb25AcGh5ZGVhdXguY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jOiBEb24ndCBpbmNsdWRlIGxpYmliZXJ0eS5oLiAgRG8gZGVjbGFyZSB4bWFsbG9jIGFuZAogICAgICAgIHhyZWFsbG9jLgoJKC1ETUFJTik6IERvbid0IHJlbHkgb24gYW4gZXh0ZXJuYWxseS1kZWZpbmVkIHZlcnNpb24gbnVtYmVyOwogICAgICAgIGluc3RlYWQsIHJlcXVpcmUgdGhlIHZlcnNpb24gbnVtYmVyIHRvIGJlIGRlZmluZWQgYXMgYQogICAgICAgIHByZXByb2Nlc3NvciBtYWNyby4gIEhhbmRsZSB0aGUgUlMvNjAwMCBsZWFkaW5nIGRvdC4gIERlZmluZQogICAgICAgIHhtYWxsb2MsIHhyZWFsbG9jIGFuZCBmYXRhbC4gIERvbid0IHN0cmlwIGEgbGVhZGluZyB1bmRlcnNjb3JlCiAgICAgICAgaWYgd2UgY291bGRuJ3QgZGVtYW5nbGUgdGhlIHdvcmQuCgpUdWUgQXByICA0IDEzOjAzOjUxIDE5OTUgIFN0YW4gU2hlYnMgIDxzaGVic0BhbmRyb3MuY3lnbnVzLmNvbT4KCgkoT2xkIG1wdy5jIGNoYW5nZSBkZXNjcmlwdGlvbnMgcmV0YWluZWQgZm9yIGluZm9ybWF0aW9uYWwgdmFsdWUuKQoJKiBtcHcuYyAod2FybmluZ190aHJlc2hvbGQpOiBEZWZhdWx0IHRvIC40IHNlYy4KCShvdmVyZmxvd19jb3VudCwgY3VycmVudF9wcm9ncmVzcyk6IE5ldyBnbG9iYWxzLgoJKHdhcm5faWZfc3Bpbl9kZWxheSk6IEluY2x1ZGUgY3VycmVudCBwcm9ncmVzcyB0eXBlLAoJc3VjaCBhcyBwcm9ncmFtIG5hbWUsIGluIG1lc3NhZ2UuCgkobXB3X3N0YXJ0X3Byb2dyZXNzKTogU2V0IGN1cnJlbnRfcHJvZ3Jlc3MgdmFyaWFibGUgZnJvbSBhcmcuCgkobXB3X2VuZF9wcm9ncmVzcyk6IFJlcG9ydCBzcGluIGRlbGF5cyBieSBwb3dlci1vZi10d28tc2l6ZQoJYnVja2V0cyBpbnN0ZWFkIG9mIGNvbnN0YW50LXNpemUgYnVja2V0cy4KCgkqIG1wdy5jOiBDbGVhbiB1cCBmb3JtYXR0aW5nLCB0eXBlcywgcmV0dXJucywgZXRjLgoJKEVOT1NZUyk6IERlZmluZS4KCShtcHdfZnJlYWQsIG1wd19md3JpdGUpOiBEZWZpbmUuCgkoc2xlZXApOiBEZWZpbmUgY29ycmVjdGx5LgoKCSogbXB3LmM6IE5ldyBjb2RlIHRvIGltcGxlbWVudCBjdXJzb3Igc3Bpbm5pbmcgc3VwcG9ydC4KCSh1bWFzayk6IE5ldyBmdW5jdGlvbi4KCShtcHdfZm9wZW4sIG1wd19mc2Vlaywgc3RhdCwgZnN0YXQpOiBDYWxsIFBST0dSRVNTLgoKCSogbXB3LmMgKG1wd19iYXNlbmFtZSwgbXB3X21peGVkX2Jhc2VuYW1lKTogTmV3IGZ1bmN0aW9ucywgZmluZAoJYmFzZW5hbWVzIGZvciBNUFcgYW5kIE1QVy9Vbml4IGZpbGVuYW1lcy4KCShtcHdfc3BlY2lhbF9pbml0KTogTmV3IGZ1bmN0aW9uLCBjYWxscyBNYWNzYnVnIGlmIGRlc2lyZWQuCgoJKiBtcHcuYzogQWRkIEdQTCBub3RpY2UuCgkobXB3aWZ5X2ZpbGVuYW1lKTogQWRkIG1vcmUgdHJhbnNmb3JtYXRpb25zLgoJKG1wd19mb3Blbik6IENhbGwgbXB3aWZ5X2ZpbGVuYW1lIG9uIGZpbGUgbmFtZXMuCgkocmVuYW1lKTogUmVtb3ZlLgoJKGNoZGlyLCBnZXRjd2QpOiBBZGQgc2ltcGxlIGRlZmluaXRpb25zLgoKCSogbXB3LmM6IFJhbmRvbSBjbGVhbnVwcywgcmVtb3ZlIHVudXNlZCBjb2RlIGJpdHMuCglBZGRlZCBjb3B5IG9mIHN0cmVycm9yLmMgZm9yIGdjYydzIHVzZS4KCShzdGF0LCBmc3RhdCwgX3N0YXQpOiBOZXcgdmVyc2lvbnMgYmFzZWQgb24gR3VpZG8gdmFuIFJvc3N1bSBjb2RlLgoKCSogbXB3LmMgKG1wd19mc2Vlayk6IE1ha2UgaXQgd29yayBjb3JyZWN0bHkgd2hlbiBkb2luZyBTRUVLX0NVUi4KCgkqIG1wdy5jIChzdGF0KTogUmVtb3ZlIGhhY2sgZGVmaW5pdGlvbiwgZ2V0IGZyb20gc3lzL3N0YXQuaC4KCShmb3JrLCB2Zm9yaywgZXRjKTogUHJpbnQgZXJyb3IgbWVzc2FnZXMgaWYgY2FsbGVkLgoJKGdldHJ1c2FnZSwgc2JyaywgZW52aXJvbiwgaXNhdHR5LCBsaW5rLCB1dGltZSwgbWtkaXIsIHJtZGlyLAoJcmVuYW1lLCBjaG93bik6IERlZmluZS4KCgkqIG1wdy1jb25maWcuaW46IE5ldyBmaWxlLCBNUFcgdmVyc2lvbiBvZiBjb25maWd1cmUuaW4uCgkqIG1wdy1tYWtlLmluOiBOZXcgZmlsZSwgTVBXIHZlcnNpb24gb2YgTWFrZWZpbGUuaW4uCgkqIG1wdy5jOiBOZXcgZmlsZSwgTVBXIGNvbXBhdGliaWxpdHkgcm91dGluZXMuCgpGcmkgTWFyIDI0IDE0OjEwOjMwIDE5OTUgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogYmFzZW5hbWUuYzogSW5jbHVkZSBjb25maWcuaCBiZWZvcmUgY2hlY2tpbmcgZm9yIE5FRURfYmFzZW5hbWUuCgpUaHUgTWFyIDIzIDE5OjA5OjU0IDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogZnVuY3Rpb25zLmRlZjogQWRkIERFRkZVTkMgZm9yIGJhc2VuYW1lLgoKCSogYmFzZW5hbWUuYzogT25seSBkZWZpbmUgYmFzZW5hbWUgaWYgTkVFRF9iYXNlbmFtZS4KClRodSBNYXIgMTYgMTM6MzY6MDUgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBjb25maWcudGFibGU6IEZpeCAtLWVuYWJsZS1zaGFyZWQgbG9naWMgZm9yIG5hdGl2ZSBidWlsZHMuCgpNb24gTWFyIDEzIDExOjA1OjExIDE5OTUgIEphc29uIE1lcnJpbGwgIDxqYXNvbkBwaHlkZWF1eC5jeWdudXMuY29tPgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3RlbXBsYXRlKTogRGVtYW5nbGUgYm9vbCBsaXRlcmFscyBwcm9wZXJseS4KCk1vbiBNYXIgIDYgMjM6NTc6MjggMTk5NSAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW5AY3lnbnVzLmNvbSkKCgkqIHN0cnRvbC5jIHN0cnRvdWwuYzogIFJlcGxhY2UgdGhlc2Ugd2l0aCBsZXNzIGJ1Z2d5IHZlcnNpb25zIGZyb20KCU5ldEJTRC4gIChzdHJ0b3VsIGluIHBhcnRpY3VsYXIgY291bGRuJ3QgaGFuZGxlIGJhc2UgMTYuKQoKV2VkIE1hciAgMSAxNTo1OTowMSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWcvbXQtdnh3b3JrczUgKEhERUZJTkVTKTogRGVmaW5lIE5PX1NZU19QQVJBTV9ILgoKCSogY2xvY2suYzogSWYgTk9fU1lTX1BBUkFNX0ggaXMgZGVmaW5lZCwgZG9uJ3QgaW5jbHVkZQoJPHN5cy9wYXJhbS5oPi4KCSogZ2V0Y3dkLmMsIGdldHBhZ2VzaXplLmMsIGdldHJ1bnRpbWUuYzogTGlrZXdpc2UuCgpGcmkgRmViIDE3IDE1OjQwOjU1IDE5OTUgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AY3lnbnVzLmNvbT4KCgkqIGdldHJ1bnRpbWUuYyAoZ2V0X3J1bl90aW1lKTogRG9uJ3QgYXNzdW1lIHRoYXQgQ0xPQ0tTX1BFUl9TRUMgaXMKCWEgbnVtYmVyOyBBTlNJIGFwcGVhcnMgdG8gcGVybWl0IGFueSBleHByZXNzaW9uLCBpbmNsdWRpbmcgYQoJZnVuY3Rpb24gY2FsbC4KCgkqIGNvbmZpZy50YWJsZSAoKi0qLXZ4d29ya3M1Kik6IFVzZSBtdC12eHdvcmtzNSB3aGVuIGNvbmZpZ3VyaW5nCgl4aWJlcnR5LgoJKiBjb25maWcvbXQtdnh3b3JrczU6IE5ldyBmaWxlLgoKVGh1IEZlYiAgOSAxNDoxOTo0NSAxOTk1ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBiYXNlbmFtZS5jIChiYXNlbmFtZSk6IENoYW5nZSBhcmd1bWVudCB0byBiZSBjb25zdC4KCldlZCBGZWIgIDggMTg6MDY6NTIgMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogRG9uJ3Qgd29ycnkgYWJvdXQgeG1hbGxvYy4KClN1biBKYW4gMTUgMDA6NDA6MzYgMTk5NSAgSmVmZiBMYXcgIChsYXdAc25ha2UuY3MudXRhaC5lZHUpCgoJKiBNYWtlZmlsZS5pbiAoZGlzdGNsZWFuKTogRGVsZXRlIHhob3N0LW1rZnJhZy4KClRodSBKYW4gMTIgMTY6NTQ6MTggMTk5NSAgSmFzb24gTWVycmlsbCAgPGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAobG5lZWRlZC1saXN0KTogSWYgYWxsb2NhLm8gaXMgbmVlZGVkLCBzbyBpcyB4bWFsbG9jLm8uCgpXZWQgSmFuIDExIDIyOjM5OjU2IDE5OTUgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjdWpvLmN5Z251cy5jb20+CgoJKiBoZXguYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChSRVFVSVJFRF9PRklMRVMsIENGSUxFUyk6IExpc3QgaXQuCgkoaGV4Lm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IEZvciBHTlUgc3R5bGUgY29uc3RydWN0b3IgYW5kCglkZXN0cnVjdG9yIG5hbWVzLCB0cnkgZGVtYW5nbGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcuCgpXZWQgRGVjIDI4IDAwOjQ5OjE1IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIDxpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbT4KCgkqIHZhc3ByaW50Zi5jIChpbnRfdmFzcHJpbnRmKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCSh2YXNwcmludGYpOiBVc2UgaW50X3Zhc3ByaW50Zi4gIFJlbW92ZXMgYXNzdW1wdGlvbiB0aGF0IHZhX2xpc3QKCWlzIGFzc2lnbm1lbnQgY29tcGF0aWJsZS4KClNhdCBOb3YgIDUgMTk6Mjk6MTIgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoTElCQ0ZMQUdTKTogTmV3IHZhcmlhYmxlLgoJKEZMQUdTX1RPX1BBU1MpOiBQYXNzIGl0LgoJKC5jLm8pOiBVc2UgaXQuCgpUaHUgTm92ICAzIDE5OjA5OjQ3IDE5OTQgIEtlbiBSYWVidXJuICA8cmFlYnVybkBjdWpvLmN5Z251cy5jb20+CgoJKiBnZXRvcHQuYywgZ2V0b3B0MS5jOiBEbyBjb21waWxlIHRoZXNlIGZ1bmN0aW9ucyB1bmRlciBMaW51eCwKCXNpbmNlIG1hbnkgbmF0aXZlIHZlcnNpb25zIGFyZSBiYXNlZCBvbiBnbGliYyBidXQgYXJlIGJ1Z2d5LgoKTW9uIE9jdCAyNCAxNToxNjo0NiAxOTk0ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbT4KCgkqIHZhc3ByaW50Zi5jOiAgTWFrZSAnZm9ybWF0JyBhcmcgYmUgY29uc3QsIHRvIGF2b2lkIGEgbWlzbWF0Y2gKCXdpdGggcHJvdG90eXBlIGluIEdOVSBsaWJjLiAgU3VwcG9ydCBzdGRhcmcuaCBhcyB3ZWxsIGFzIHZhcmFyZ3MuaC4KClR1ZSBPY3QgMTEgMTc6NDg6MjcgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQHBoeWRlYXV4LmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTKTogQWRkIHZhc3ByaW50Zi5vLgoJKiBmdW5jdGlvbnMuZGVmOiBSZW1vdmUgdmFzcHJpbnRmLgoKV2VkIFNlcCAxNCAxNzowNDo1NSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHNhbmd1aW5lLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKGZpcnN0X2JyZWFrKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCSh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBSZWNvcmQgc2JyayAoMCkgaW4gZmlyc3RfYnJlYWsuCgkoeG1hbGxvYyk6IElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCB0cnkgdG8gcmVwb3J0IGhvdyBtdWNoCgltZW1vcnkgd2FzIGFsbG9jYXRlZCBieSB0aGUgcHJvZ3JhbSB1cCB0byB0aGlzIHBvaW50LgoJKHhyZWFsbG9jKTogTGlrZXdpc2UuCgpTdW4gU2VwIDA0IDE3OjU4OjEwIDE5OTQgIFJpY2hhcmQgRWFybnNoYXcgKHJ3ZUBwZWdhc3VzLmVzcHJpdC5lYy5vcmcpCgoJKiBNYWtlZmlsZS5pbiAoRVJST1JTX0NDKTogTmV3IHZhcmlhYmxlLCBkZWZhdWx0ZWQgdG8gJChDQykuICBVc2UgaXQKCXdoZW4gbGlua2luZyBkdW1teS4KCSogY29uZmlnLnRhYmxlOiBBZGQgaG9zdCBSSVNDaVggTWFrZWZpbGUgZnJhZy4KCSogY29uZmlnL21oLXJpc2NpeDogTmV3IGZpbGUuCgpUaHUgQXVnIDI1IDE3OjI5OjQ0IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChGTEFHU19UT19QQVNTKTogRGVmaW5lLgoJKCQoUlVMRTEpKTogVXNlICQoRkxBR1NfVE9fUEFTUykuCgpXZWQgQXVnIDI0IDE3OjA4OjQ3IDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIHZhc3ByaW50Zi5jOiBJbmNsdWRlIDxzdHJpbmcuaD4uCgkodmFzcHJpbnRmKTogQWRkIGNhc3RzIHRvIHZvaWQgZm9yIHZhX2FyZyB0byBhdm9pZCBnY2Mgd2FybmluZ3MuCgkqIHhhdGV4aXQuYzogRGVjbGFyZSBtYWxsb2MuCgpGcmkgQXVnIDE5IDE1OjI5OjEyIDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfYXJncyk6IEZpeCBhIGJ1ZyBpbiBwcmV2aW91cyBwYXRjaCAodGhlCglvbmUgYmVsb3cpLgoKVGh1IEF1ZyAxOCAxNDozNzoxNCAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlIGFyZ3MpOiBIYW5kbGUgQVJNIHJlcGVhdCBlbmNvZGluZyB3aGVyZQogICAgICAgIHRoZSB0eXBlIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiA5LgoKV2VkIEF1ZyAxNyAxNjoxMzo0OSAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3F1YWxpZmllZCk6IGFjY2VwdCBvcHRpb25hbCAnXycgYmV0d2VlbgoJcXVhbGlmaWVkIG5hbWUuIFRoaXMgaXMgYmFlY2F1c2UgdGhlIHRlbXBsYXRlIG5hbWUgbWF5IGVuZCB3aXRoCgludW1lcmljIGFuZCBjYW4gbWl4ZWQgdXAgd2l0aCB0aGUgbGVuZ3RoIG9mIG5leHQgcXVhbGlmaWVkIG5hbWUuCgpXZWQgQXVnICAzIDA1OjUyOjE0IDE5OTQgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9tdC1zdW5vczQ6IFVzZSBvdXIgc3RhbmRhcmQgbG9jYXRpb24gZm9yIGNyb3NzLWluY2x1ZGVzCglhbmQgY3Jvc3MtbGlicyB3aGVuIHRoZSB0YXJnZXQgaXMgYWxzbyBhICJob3N0IiBlbnZpcm9ubWVudCAoaWUgbm8KCW5ld2xpYjsgaW5jbHVkZXMgYW5kIHN1Y2ggZG9uJ3QgYmVsb25nIHRvIHVzKS4gIFRoaXMgaXMgc3BlY2lmaWMKCXRvIHRoZSBDeWdudXMgU3VwcG9ydCBlbnZpcm9ubWVudC4KClR1ZSBBdWcgIDIgMTU6MjU6MTIgMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6IGRlbWFuZ2xlIGFzIHh4eDwnUSc+IG5vdAoJeHh4PGNoPTgxPi4KCk1vbiBBdWcgIDEgMTc6MDI6NDggMTk5NCAgS3VuZyBIc3UgIChrdW5nQG1leGljYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChtYWluKTogZmx1c2ggc3Rkb3V0IHRvIG1ha2UgcGlwZSB3b3JrLgoKU2F0IEp1bCAxNiAxMjo1NjozMiAxOTk0ICBTdGFuIFNoZWJzICAoc2hlYnNAYW5kcm9zLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGUgKCotKi1jeHV4NyopOiAgUmVjb2duaXplLgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9tODgxMTBfZXh0KSBbSEFSUklTX0ZMT0FUX0ZPUk1BVF06CglIYXJyaXMtc3BlY2lmaWMgZmxvYXQgZm9ybWF0LgoJKiBjb25maWcvbWgtY3h1eDc6IE5ldyBmaWxlLgoKV2VkIEp1biAyOSAwMDoyNjoxNyAxOTk0ICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiAgTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdCBvZgoJY29uc3VtZV9jb3VudCBkb2Vzbid0IGluZGV4IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCgpNb24gSnVuIDIwIDIzOjU0OjM3IDE5OTQgIFBldGVyIFNjaGF1ZXIgIChwZXNAcmVnZW50LmUtdGVjaG5pay50dS1tdWVuY2hlbi5kZSkKCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6ICBIYW5kbGUgdnRhYmxlIG1hbmdsaW5nIG9mIGdjYy0yLjQuNSBhbmQKCWVhcmxpZXIuIEltcHJvdmUgdGVzdCBmb3IgbmV3IHZ0YWJsZSBtYW5nbGluZy4gQ2hhbmdlIG91dHB1dCBiYWNrCgl0byBgdmlydHVhbCB0YWJsZScuCgpNb24gSnVuIDIwIDExOjM3OjMwIDE5OTQgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5Ac2FuZ3VpbmUuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogQWx3YXlzIGNvbXBpbGUgdGhpcyBjb2RlLCBldmVuIGlmIHVzaW5nIHRoZSBHTlUKCWxpYnJhcnkuICBBdm9pZHMgcHJvYmxlbXMgd2l0aCByZWxhdGl2ZWx5IHJlY2VudCBiaW5hcnkKCWluY29tcGF0aWJpbGl0eS4KClRodSBKdW4gMTYgMTc6NTQ6MDEgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IEluY2x1ZGUgbGliaWJlcnR5LmguCgkoeG1hbGxvYywgeHJlYWxsb2MsIGZyZWUpOiBEb24ndCBkZWNsYXJlLgoJKHN0cnN0cik6IERvbid0IGRlY2xhcmUgcGFyYW1ldGVycy4KCSh4bWFsbG9jLCB4cmVhbGxvYyk6IERvbid0IGRlZmluZS4KCShsb25nX29wdGlvbnMpOiBBZGQgbm8tc3RyaXAtdW5kZXJzY29yZXMuCgkobWFpbik6IENhbGwgeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lLiAgUGFzcyBuIGluIHNob3J0IG9wdGlvbnMgdG8KCWdldG9wdF9sb25nLiAgSGFuZGxlIG9wdGlvbiAnbicgdG8gbm90IHN0cmlwIHVuZGVyc2NvcmVzLgoJKHVzYWdlKTogTWVudGlvbiAtbiBhbmQgLS1uby1zdHJpcC11bmRlcnNjb3Jlcy4KClN1biBKdW4gMTIgMDE6Mzc6MDkgMTk5NCAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBTZXBhcmF0ZSBjb25zZWN1dGl2ZSA+J3Mgd2l0aCBhCiAgICAgICAgc3BhY2UuCgkoZ251X3NwZWNpYWwpOiBEZW1hbmdsZSB0ZW1wbGF0ZSBhbmQgcXVhbGlmaWVkIG5hbWVzIGluIGEgdnRhYmxlIG5hbWUuCgpGcmkgTWF5IDI3IDEyOjI3OjUyIDE5OTQgIEtlbiBSYWVidXJuICAocmFlYnVybkBjdWpvLmN5Z251cy5jb20pCgoJRnJvbSBnYXMtMi4zIGFuZCBiaW51dGlscy0yLjQgbmV0IHJlbGVhc2VzOgoKCVdlZCBNYXkgMTEgMjI6MzI6MDAgMTk5NCAgREogRGVsb3JpZSAoZGpAY3Ryb24uY29tKQoKCSogbWFrZWZpbGUuZG9zOiBbbmV3XSBNYWtlZmlsZSBmb3IgZG9zL2dvMzIKCSogY29uZmlndXJlLmJhdDogdXBkYXRlIGZvciBsYXRlc3QgZmlsZXMKCSogbXNkb3MuYzogcmVtb3ZlIHNvbWUgZnVuY3Rpb25zIG5vdyBpbiBsaWJjLmEKCkZyaSBNYXkgMjAgMTg6NTM6MzIgMTk5NCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGthbGVzc2luLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZ251X3NwZWNpYWwpOiAgUmVjb2duaXplIHRodW5rcywgYXMgd2VsbCBhcwoJdGhlIG5ldyBuYW1pbmcgc3R5bGUgZm9yIHZ0YWJsZXMgKHdoZW4gLWZ2dGFibGUtdGh1bmtzKS4KCldlZCBNYXkgMTggMTM6MzQ6MDYgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKFhUUkFGTEFHUyk6IERvbid0IGRlZmluZS4KCSguYy5vLCBkdW1teS5vKTogRG9uJ3QgdXNlIFhUUkFGTEFHUy4KCSgkKFJVTEUxKSk6IERvbid0IHBhc3MgWFRSQUZMQUdTIGRvd24gaW4gcmVjdXJzaXZlIGNhbGwuCgpGcmkgTWF5IDEzIDE2OjAyOjEyIDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogdmFzcHJpbnRmLmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZjogQWRkIGl0LgoKRnJpIE1heSAxMyAxNjoyMDoyOCAxOTk0ICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBHcm9rIGJvb2wuCgpGcmkgTWF5ICA2IDE0OjQ0OjIxIDE5OTQgIFN0ZXZlIENoYW1iZXJsYWluICAoc2FjQGN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6IEFkZCBnbzMyCgkqIGNvbmZpZy9taC1nbzMyOiBOZXcgdGVtcGxhdGUuCgpGcmkgTWF5ICA2IDExOjAxOjU5IDE5OTQgIEQuIFYuIEhlbmtlbC1XYWxsYWNlICAoZ3VtYnlAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGUsIGNvbmZpZy9tdC1zdW5vczQ6IGNvbmZpZyBmb3Igd2hlbiBzdW40IGlzIGNyb3NzIHRhcmdldC4KCk1vbiBBcHIgMTEgMDA6NTQ6MzMgMTk5NCAgUmljaGFyZCBTdGFsbG1hbiAgKHJtc0Btb2xlLmdudS5haS5taXQuZWR1KQoKICAgICAgICAqIGdldG9wdC5jIFtub3QgX19HTlVfTElCUkFSWV9fXSBbX19HQ0NfX10gW25vdCBfX1NURENfX106CiAgICAgICAgRGVjbGFyZSBzdHJsZW4gdG8gcmV0dXJuIGludC4gIERvbid0IGluY2x1ZGUgc3RkZGVmLmguCgpGcmkgQXByICAxIDAwOjM4OjE3IDE5OTQgIEppbSBXaWxzb24gICh3aWxzb25AbW9sZS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYzogRGVsZXRlIHVzZSBvZiBJTl9HQ0MgdG8gY29udHJvbCB3aGV0aGVyCiAgICAgICAgc3RkZGVmLmggb3IgZ3N0ZGRlZi5oIGlzIGluY2x1ZGVkLgoKVGh1IEFwciAxNCAxNDowMDo1NiAxOTk0ICBLdW5nIEhzdSAgKGt1bmdAbWV4aWNhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6IEZpeCBhIGJ1ZyBpbiB0ZW1wbGF0ZSBmdW5jdGlvbgoJdHlwZSBudW1iZXJpbmcuCgpXZWQgQXByIDEzIDE3OjIzOjAzIDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogRml4IHRlbXBsYXRlIGZ1bmN0aW9uIHdpdGggYXJtCglzdHlsZSBhcmd1bWVudCB0eXBlIG51bWJlciwgVG4uCgpXZWQgQXByIDEzIDE3OjExOjE1IDE5OTQgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKG9wdGFibGUpOiBBZGQgbmV3W10gYW5kIGRlbGV0ZVtdLgoKRnJpIEFwciAgOCAxMToyMTo0MiAxOTk0ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYyAoYnVpbGRhcmd2KTogRG9uJ3QgcHJvZHVjZSBlbXB0eSBhcmd1bWVudCBqdXN0IGJlY2F1c2UKCXRoZXJlIGlzIHRyYWlsaW5nIHdoaXRlc3BhY2UuCgpXZWQgQXByICA2IDExOjQyOjE0IDE5OTQgIEt1bmcgSHN1ICAoa3VuZ0BtZXhpY2FuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfdGVtcGxhdGUpOiBmaXggJ1EnIHF1YWxpZmllZCBuYW1lIGJ1Zy4KCUhhbmRsZSAncCcgc2FtZSBhcyAnUCcuCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogSGFuZGxlICdwJyBzYW1lIGFzICdQJy4KClNhdCBNYXIgMjYgMTI6MDA6MTMgMTk5NCAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogZmxvYXRmb3JtYXQuYyAoZ2V0X2ZpZWxkLCBwdXRfZmllbGQpOiAgRml4IG9mZiBieSBvbmUgZXJyb3IgaW4KCWxpdHRsZSBlbmRpYW4gY2FzZS4KClRodSBNYXIgMjQgMTA6NDA6MTkgMTk5NCAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBmbG9hdGZvcm1hdC5jIChmbG9hdGZvcm1hdF9mcm9tX2RvdWJsZSk6IFBhc3MgdW5zaWduZWQgY2hhciAqLAoJbm90IGNoYXIgKiwgdG8gcHV0X2ZpZWxkLgoKRnJpIE1hciAxOCAxMjozNDozMyAxOTk0ICBQZXIgQm90aG5lciAgKGJvdGhuZXJAa2FsZXNzaW4uY3lnbnVzLmNvbSkKCgkqIG1lbW1vdmUuYzogIFJlLXdyb3RlOyAgcGxhY2VkIGluIHB1YmxpYyBkb21haW4uCgpXZWQgTWFyIDE2IDEwOjMzOjA3IDE5OTQgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IElmIEFSTSBkZW1hbmdsaW5nLCBkb24ndCB0cmVhdAoJX19RKiBhcyBhIGNvbnN0cnVjdG9yLgoKTW9uIE1hciAxNCAxMjoyNjowMiAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0LmM6IFJlbW92ZWQ7IG5vIGxvbmdlciB1c2VkLgoJKiBNYWtlZmlsZS5pbjogQ2hhbmdlZCBhY2NvcmRpbmdseS4KCk1vbiBNYXIgIDcgMTI6Mjg6MTcgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZmxvYXRmb3JtYXQuYyAoZ2V0X2ZpZWxkKTogUmVtb3ZlZCB1bnVzZWQgbG9jYWwgdmFyaWFibGUgaS4KCShwdXRfZmllbGQpOiBSZW1vdmVkIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBpLgoKU3VuIEZlYiAyNyAyMTo1MDoxMSAxOTk0ICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGZsb2F0Zm9ybWF0LmM6IE5ldyBmaWxlLCBpbnRlbmRlZCB0byByZXBsYWNlIGllZWUtZmxvYXQuYy4KCSogTWFrZWZpbGUuaW46IENoYW5nZSBhY2NvcmRpbmdseS4KClRodSBGZWIgMjQgMTE6NTE6MTIgMTk5NCAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHJ0bC5jeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6IFJlbW92ZSAjaWZkZWYgR0VUT1BUX0NPTVBBVCBhbmQgI2lmIDAgY29kZS4KCSAoX2dldG9wdF9pbml0aWFsaXplKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIF9nZXRvcHRfaW50ZXJuYWwuCgkgKF9nZXRvcHRfaW50ZXJuYWwpOgoJIElmIGxvbmdfb25seSBhbmQgdGhlIEFSR1YtZWxlbWVudCBoYXMgdGhlIGZvcm0gIi1mIiwgd2hlcmUgZiBpcwoJIGEgdmFsaWQgc2hvcnQgb3B0aW9uLCBkb24ndCBjb25zaWRlciBpdCBhbiBhYmJyZXZpYXRlZCBmb3JtIG9mCgkgYSBsb25nIG9wdGlvbiB0aGF0IHN0YXJ0cyB3aXRoIGYuICBPdGhlcndpc2UgdGhlcmUgd291bGQgYmUgbm8KCSB3YXkgdG8gZ2l2ZSB0aGUgLWYgc2hvcnQgb3B0aW9uLgoKVGh1IEZlYiAxMCAxNDo0NDoxNiAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZ2V0b3B0LmMgW25vdCBfX0dOVV9MSUJSQVJZX19dIFtfX0dOVUNfX10gW25vdCBJTl9HQ0NdOgogICAgICAgIFRlc3QganVzdCBfX1NURENfXywgbm90IGVtYWNzLgoKV2VkIEZlYiAgOSAwMDoxNDowMCAxOTk0ICBSaWNoYXJkIFN0YWxsbWFuICAocm1zQG1vbGUuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZ2V0b3B0LmMgW25vdCBfX0dOVV9MSUJSQVJZX19dIFtfX0dOVUNfX10gW25vdCBJTl9HQ0NdCiAgICAgICAgW2VtYWNzXSBbbm90IF9fU1REQ19fXTogRG9uJ3QgaW5jbHVkZSBzdGRkZWYuaC4gIERvbid0IGRlY2xhcmUgc3RybGVuLgoKRnJpIERlYyAyNCAxOTo0MzowMCAxOTkzICBOb2FoIEZyaWVkbWFuICAoZnJpZWRtYW5AbnV0cmltYXQuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZ2V0b3B0LmMgKF9OT19QUk9UTyk6IERlZmluZSBiZWZvcmUgY29uZmlnLmggaXMgaW5jbHVkZWQuCgpNb24gU2VwIDIwIDE1OjU5OjAzIDE5OTMgIFJvbGFuZCBNY0dyYXRoICAocm9sYW5kQGNodXJjaHkuZ251LmFpLm1pdC5lZHUpCgogICAgICAgICogZ2V0b3B0LmMsIGdldG9wdDEuYyBbZW1hY3MgfHwgQ09ORklHX0JST0tFVFNdOiBJbmNsdWRlCgk8Y29uZmlnLmg+IG9ubHkgdW5kZXIgdGhlc2UsIGVsc2UgImNvbmZpZy5oIi4KClRodSBBdWcgMTIgMTg6MTY6NDkgMTk5MyAgUm9sYW5kIE1jR3JhdGggIChyb2xhbmRAY2h1cmNoeS5nbnUuYWkubWl0LmVkdSkKCiAgICAgICAgKiBnZXRvcHQuYywgZ2V0b3B0MS5jIFtIQVZFX0NPTkZJR19IXTogSW5jbHVkZQogICAgICAgIDxjb25maWcuaD4gaW5zdGVhZCBvZiAiY29uZmlnLmgiLgoKU3VuIEZlYiAyMCAxNzoxNzowMSAxOTk0ICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIGNvbmNhdC5jOiBDaGVjayBBTlNJX1BST1RPVFlQRVMgcmF0aGVyIHRoYW4gX19TVERDX18gdG8gZGVjaWRlCgl3aGV0aGVyIHRvIHVzZSBwcm90b3R5cGVzIG9yIG5vdC4KCSogc3RyZXJyb3IuYyAoY29uc3QpOiBOZXZlciB1bmRlZmluZTsgbGV0IGFuc2lkZWNsLmggaGFuZGxlIGl0LgoJKiBzdHJzaWduYWwuYyAoY29uc3QpOiBMaWtld2lzZS4KClRodSBGZWIgMTcgMTM6Mjc6MzUgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogeGF0ZXhpdC5jIChfeGV4aXRfY2xlYW51cCk6IERlY2xhcmUgYXMgZXh0ZXJuOyBkb24ndCBpbml0aWFsaXplLgoJTWVyZ2luZyBjb21tb24gYW5kIGluaXRpYWxpemVkIHZhcmlhYmxlcyBuZWVkIG5vdCBiZSBzdXBwb3J0ZWQgYnkKCUFOU0kgQyBjb21waWxlcnMuCgkoeGF0ZXhpdCk6IEluaXRpYWxpemUgX3hleGl0X2NsZWFudXAgaWYgbm90IGFscmVhZHkgc2V0LgoJKiB4ZXhpdC5jOiBDb21tZW50IGZpeC4KCldlZCBGZWIgMTYgMDE6MTU6MzYgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogeG1hbGxvYy5jOiBEb24ndCBkZWNsYXJlIHhleGl0OyBpdCdzIGRlY2xhcmVkIGluIGxpYmliZXJ0eS5oLgoJKHhyZWFsbG9jKTogSWYgb2xkbWVtIGlzIE5VTEwsIGFsbG9jYXRlIHdpdGggbWFsbG9jLCByYXRoZXIgdGhhbgoJYXNzdW1pbmcgdGhhdCByZWFsbG9jIHdvcmtzIGNvcnJlY3RseS4KClR1ZSBGZWIgMTUgMDk6MjY6MTYgMTk5NCAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogY29uY2F0LmMsIGllZWUtZmxvYXQuYzogIFJlcGxhY2UgaW5jbHVzaW9uIG9mIDxzdHJpbmcuaD4KCXdpdGggZXhwbGljaXQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCBhcyByZWNvbW1lbmRlZCBieSBJYW4gVGF5bG9yLgoKU2F0IEZlYiAxMiAxMDozMToxMSAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AcnRsLmN5Z251cy5jb20pCgoJKiB4bWFsbG9jLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogVXNlIFBUUiBhbmQgc2l6ZV90IHRocm91Z2hvdXQuCgkobWFsbG9jLCByZWFsbG9jKTogRGVjbGFyZS4KClRodSBGZWIgMTAgMTc6MDg6MTkgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogYXJndi5jLCBiYXNlbmFtZS5jOiBJbmNsdWRlIGFuc2lkZWNsLmggYW5kIGxpYmliZXJ0eS5oLgoJKiBjb25jYXQuYywgZmRtYXRjaC5jLCBnZXRydW50aW1lLmMsIHNwYWNlcy5jOiBMaWtld2lzZS4KCSogc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmMsIHhhdGV4aXQuYywgeGV4aXQuYzogTGlrZXdpc2UuCgkqIHhtYWxsb2MuYzogTGlrZXdpc2UuCgkqIGNvbmNhdC5jOiBEb24ndCBkZWNsYXJlIHhtYWxsb2MuICBJZiBfX1NURENfXywgdXNlIDxzdGRhcmcuaD4KCW1hY3Jvcywgbm90IDx2YXJhcmdzLmg+IG1hY3Jvcy4KCSogc3BhY2VzLmMgKHNwYWNlcyk6IE1ha2UgcmV0dXJuIHR5cGUgY29uc3QuICBEb24ndCBjcmFzaCBpZgoJbWFsbG9jIHJldHVybnMgTlVMTC4KCSogc3RyZXJyb3IuYyAoc3RydWN0IGVycm9yX2luZm8pOiBNYWtlIG5hbWUgYW5kIG1zZyBmaWVsZHMgY29uc3QuCgkoZXJyb3JfbmFtZXMpOiBNYWtlIGNvbnN0LgoJKHN0cmVycm5vKTogTWFrZSBjb25zdC4KCShzdHJ0b2Vycm5vKTogTWFrZSBhcmd1bWVudCBjb25zdC4KCSogc3Ryc2lnbmFsLmMgKHN0cnVjdCBzaWduYWxfaW5mbyk6IE1ha2UgbmFtZSBhbmQgbXNnIGZpZWxkcwoJY29uc3QuCgkoc2lnbmFsX25hbWVzLCBzeXNfc2lnbGlzdCk6IE1ha2UgY29uc3QuCgkoc3Ryc2lnbmFsLCBzdHJzaWdubyk6IE1ha2UgY29uc3QuCgkoc3RydG9zaWdubyk6IE1ha2UgYXJndW1lbnQgY29uc3QuCgkqIHhhdGV4aXQuYzogRGVjbGFyZSBwYXJhbWV0ZXIgdHlwZXMuCgkqIHhtYWxsb2MuYyAobmFtZSk6IE1ha2UgY29uc3QuCgkoeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1lKTogTWFrZSBhcmd1bWVudCBjb25zdC4KCSogTWFrZWZpbGUuaW4gKElOQ0RJUik6IERlZmluZS4KCSguYy5vKTogVXNlICQoSU5DRElSKS4KCShkdW1teS5vKTogTGlrZXdpc2UuCgkoYXJndi5vLCBiYXNlbmFtZS5vKTogTmV3IHRhcmdldHM7IGRlcGVuZCBvbiBsaWJpYmVydHkuaC4KCShjb25jYXQubywgZmRtYXRjaC5vLCBnZXRydW50aW1lLm8sIHNwYWNlcy5vKTogTGlrZXdpc2UuCgkoc3RyZXJyb3Iubywgc3Ryc2lnbmFsLm8sIHhhdGV4aXQubywgeGV4aXQubyk6IExpa2V3aXNlLgoJKHhtYWxsb2Mubyk6IExpa2V3aXNlLgoJKGNwbHVzLWRlbS5vKTogTmV3IHRhcmdldDsgZGVwZW5kIG9uIGRlbWFuZ2xlLmguCgkoZ2V0b3B0Lm8sIGdldG9wdDEubyk6IE5ldyB0YXJnZXRzOyBkZXBlbmQgb24gZ2V0b3B0LmguCgkoaWVlZS1mbG9hdC5vKTogTmV3IHRhcmdldDsgZGVwZW5kIG9uIGllZWUtZmxvYXQuaC4KCShvYnN0YWNrLm8pOiBOZXcgdGFyZ2V0OyBkZXBlbmQgb24gb2JzdGFjay5oLgoKVHVlIEZlYiAgOCAwNToyOTowOCAxOTk0ICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJSGFuZGxlIG9ic3RhY2tfY2h1bmtfYWxsb2MgcmV0dXJuaW5nIE5VTEwuICBUaGlzIGFsbG93cwoJb2JzdGFja3MgdG8gYmUgdXNlZCBieSBsaWJyYXJpZXMsIHdpdGhvdXQgZm9yY2luZyB0aGVtCgl0byBjYWxsIGV4aXQgb3IgbG9uZ2ptcC4KCSogb2JzdGFjay5jIChfb2JzdGFja19iZWdpbiwgX29ic3RhY2tfYmVnaW5fMSwgX29ic3RhY2tfbmV3Y2h1bmspOgoJSWYgQ0FMTF9DSFVOS0ZVTiByZXR1cm5zIE5VTEwsIHNldCBhbGxvY19mYWlsZWQsIGVsc2UgY2xlYXIgaXQuCgkoX29ic3RhY2tfYmVnaW4sIF9vYnN0YWNrX2JlZ2luXzEpOiBSZXR1cm4gMSBpZiBzdWNjZXNzZnVsLCAwIGlmIG5vdC4KClR1ZSBGZWIgIDggMDA6MzI6MjggMTk5NCAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogY29uY2F0LmMsIGllZWUtZmxvYXQuYzogIEluY2x1ZGUgPHN0cmluZy5oPi4KClN1biBGZWIgIDYgMjE6Mjg6NDYgMTk5NCAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogeG1hbGxvYy5jICh4bWFsbG9jX3NldF9wcm9ncmFtX25hbWUpOiBOZXcgZnVuY3Rpb24uCgkoeG1hbGxvYywgeHJlYWxsb2MpOiBJbmNsdWRlIHRoZSBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLCBpZiBzZXQuCgoJKiBSZXBsYWNlIGF0ZXhpdC5jIHdpdGggeGF0ZXhpdC5jLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKSwgZnVuY3Rpb25zLmRlZjogQ2hhbmdlIHJlZmVyZW5jZXMuCgpTYXQgRmViICA1IDE0OjAyOjMyIDE5OTQgIFN0YW4gU2hlYnMgIChzaGVic0BhbmRyb3MuY3lnbnVzLmNvbSkKCgkqIGdldHJ1bnRpbWUuYyAoZ2V0X3J1bl90aW1lKTogVXNlIGdldHJ1c2FnZSBvciB0aW1lcyBpZgoJSEFWRV9HRVRSVVNBR0Ugb3IgSEFWRV9USU1FUyBhcmUgZGVmaW5lZC4KCkZyaSBGZWIgIDQgMTU6NDk6MzggMTk5NCAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogYXRleGl0LmM6IE5ldyBmaWxlLgoJKiBNYWtlZmlsZS5pbiAoQ0ZJTEVTKSwgZnVuY3Rpb25zLmRlZjogQWRkIGl0LgoJKiB4ZXhpdC5jOiBOZXcgZmlsZS4KCSogTWFrZWZpbGUuaW4gKENGSUxFUywgUkVRVUlSRURfT0ZJTEVTKTogQWRkIGl0LgoJKiB4bWFsbG9jLmMgKHhtYWxsb2MsIHhyZWFsbG9jKTogQ2FsbCB4ZXhpdCBpbnN0ZWFkIG9mIGV4aXQuCglDaGFuZ2UgcmVxdWVzdCBmb3IgMCBieXRlcyBpbnRvIHJlcXVlc3QgZm9yIDEgYnl0ZS4KCldlZCBGZWIgIDIgMTE6MzY6NDkgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogeG1hbGxvYy5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IFByaW50IHNpemUgdXNpbmcgJWx1LCBhbmQgY2FzdCB0bwoJdW5zaWduZWQgbG9uZywgdG8gYXZvaWQgd2FybmluZ3MuCgpGcmkgSmFuIDI4IDE3OjQ5OjA2IDE5OTQgIEtlbiBSYWVidXJuICAocmFlYnVybkBjdWpvLmN5Z251cy5jb20pCgoJKiBkdW1teS5jOiBEb24ndCBpbmNsdWRlIHRpbWUuaCBldmVyOyBhbHdheXMgZGVmaW5lIGNsb2NrX3QgYXMKCSJ1bnNpZ25lZCBsb25nIi4gIFVudGlsIGdjYy9maXhpbmNsdWRlcyBlbnN1cmVzIHRoYXQgY2xvY2tfdAoJZXhpc3RzLCBfX1NURENfXyBpc24ndCBhIHN1ZmZpY2llbnQgdGVzdC4gIEFuZCBpZiBjbG9jaygpIGRvZXNuJ3QKCWV4aXN0LCBjbG9ja190IHByb2JhYmx5IGRvZXNuJ3QgZWl0aGVyLgoKTW9uIEphbiAyNCAxMTo1MjozMSAxOTk0ICBTdGFuIFNoZWJzICAoc2hlYnNAYW5kcm9zLmN5Z251cy5jb20pCgoJKiBjbG9jay5jLCBnZXRydW50aW1lLmM6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW46IEFkZCB0byBmaWxlIGxpc3RzLgoJKiBmdW5jdGlvbnMuZGVmIChjbG9jayk6IEFkZCB0byBsaXN0LgoJKiBkdW1teS5jICh0aW1lLmgpOiBBZGQgaWYgX19TVERDX18uCgkoY2xvY2tfdCk6ICNkZWZpbmUgYXMgInVuc2lnbmVkIGxvbmciIGlmIG5vdCBfX1NURENfXy4KClR1ZSBKYW4gMTEgMTE6Mjc6NDQgMTk5NCAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogc3RydG9kLmM6IERlY2xhcmUgYXRvZi4gIEZyb20gZWRsZXJAamFuLnVsdHJhLm55dS5lZHUgKEphbgoJRWRsZXIpLgoKVHVlIERlYyAyOCAxNDoxNzozMCAxOTkzICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQHR3ZWVkbGVkdW1iLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZXJyb3JzKTogVXNlIENGTEFHUyBhcyB3ZWxsIGFzIExERkxBR1Mgd2hlbgoJbGlua2luZy4KCkZyaSBEZWMgMTcgMTI6MjY6MDcgMTk5MyAgS3VuZyBIc3UgIChrdW5nQGNpcmRhbi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2FybV9wdCk6IE5ldyBmdW5jdGlvbi4gIENvbW1vbiBjb2RlCglmb3IgQVJNIHRlbXBsYXRlIGRlbWFuZ2xpbmcuCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9jbGFzc19uYW1lKTogVXNlIGRlbWFuZ2xlX2FybV9wdC4KCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6IExpa2V3aXNlLgoKVHVlIE5vdiAzMCAxNTo0Nzo0OCAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBBZGQgQ09OU1QgdG8gcGxlYXNlIGdjYy4KClNhdCBOb3YgMjcgMTE6MDU6NTAgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJTWVyZ2UgY2hhbmdlcyBmcm9tIHRvbUBiYXNpbC5pY2NlLnJ1Zy5ubCAoVG9tIFIuSGFnZW1hbikKCSogc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmM6ICBBcyBhIHNtYWxsIHNwYWNlIG9wdGltaXphdGlvbiwgZG9uJ3QKCWluY2x1ZGUgbWVzc2FnZXMgd2hlbiB0aGV5IGFyZW4ndCBhY3R1YWxseSB1c2VkLgoKCU1lcmdlIGNoYW5nZXMgZnJvbSB0YWtlZml2ZS5jby5hdCFqb2UgKEpvc2VmIExlaGVyYmF1ZXIpCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgsIGRlbWFuZ2xlX2Z1bmN0aW9uX25hbWUsCgljcGx1c19kZW1hbmdsZV9vcG5hbWUpOiAgRml4ZXMgZm9yIHN5c3RlbXMgd2hlcmUgY3BsdXNfbWFya2VyCglpcyBzb21ldGhpbmcgb3RoZXIgdGhhbiAnJCcuCgpGcmkgTm92IDI2IDEzOjUxOjExIDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogd2FpdHBpZC5jOiAgU2ltcGxlLW1pbmRlZCBhcHByb2NpbWF0aW9uIHRvIHdhaXRwaWQKCXVzaW5nIHZhbmlsbGEgd2FpdC4KCSogZnVuY3Rpb25zLmRlZiwgTWFrZWZpbGUuaW46ICBVcGRhdGUgYWNjb3JkaW5nbHksCgpUaHUgTm92IDE4IDE4OjAxOjE1IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jKGRlbWFuZ2xlX3RlbXBsYXRlKTogZml4IGJ1ZyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCgl3aXRoIHZhbHVlIG9mIHVzZXIgZGVmaW5lZCB0eXBlLgoKV2VkIE5vdiAxNyAxODozMDoyMSAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyhjcGx1c19kZW1hbmdsZV9vcG5hbWUpOiBhZGQgdGhlIHN1YmplY3QgbmV3IGZ1bmN0aW9uCgl0byBzdXBwb3J0IHVuaWZpZWQgc2VhcmNoIG9mIG9wZXJhdG9yIGluIGNsYXNzLgoKV2VkIE5vdiAxMCAwOTo0NzoyMiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCglnY2MgLVdhbGwgbGludDoKCSogc3RydG91bC5jIChzdHJ0b3VsKTogdXNlICIoZGlnaXQgPSAqcykgIT0gJ1wwJyIgbm90IGp1c3QKCSJkaWdpdCA9ICpzIiBhcyBjb25kaXRpb24gaW4gd2hpbGUgbG9vcC4KClR1ZSBOb3YgIDkgMTU6NTI6MjIgMTk5MyAgTWFyayBFaWNoaW4gIChlaWNoaW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBwYXNzIFNIRUxMIHRvIHJlY3Vyc2l2ZSBtYWtlCgpUaHUgTm92ICA0IDEyOjA5OjI2IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBrYWxlc3Npbi5jeWdudXMuY29tKQoKCSogdmZwcmludGYuYywgdnByaW50Zi5jLCB2c3ByaW50Zi5jOiAgTWFrZSBmb3JtYXQgYXJnCgliZSAoY29uc3QgY2hhciopLCBmb3IgQU5TSSAoYW5kIGdjYyB3L2ZpeHByb3RvKSBjb25zaXN0ZW5jeS4KClRodSBOb3YgIDQgMDg6Mjk6MDQgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6IE1ha2UgKi0qLWhpdXgqIHVzZSBtaC1ocHV4LgoKRnJpIE9jdCAyMiAwNzo1MzoxNSAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy50YWJsZTogQWRkICogdG8gZW5kIG9mIGFsbCBPUyBuYW1lcy4KClR1ZSBPY3QgMTkgMTc6MTI6MDEgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGxuZWVkZWQtbGlzdCk6IGVuc3VyZSB0aGF0IG9iamVjdCBmaWxlIG5hbWVzIGFyZQoJICBub3QgZHVwbGljYXRlZCwgYXMgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIG9iamVjdCBmaWxlIGluCgkgIGEgbGlicmFyeSBjYXVzZXMgcHJvYmxlbXMgb24gc29tZSBtYWNoaW5lcwoKTW9uIE9jdCAxOCAyMTo1OToyOCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCgkqIHN0cmNhc2VjbXAuYywgc3RybmNhc2VjbXAuYzogQ2hhbmdlIHVfY2hhciB0byB1bnNpZ25lZCBjaGFyLgoKRnJpIE9jdCAxNSAyMjoxNzoxMSAxOTkzICBkYXZpZCBkIGB6b28nIHp1aG4gICh6b29AcnRsLmN5Z251cy5jb20pCgoJKiBzdHJuY2FzZWNtcC5jOiBuZXcgZmlsZSwgaW1wbGVtZW50cyBzdHJuY2FzZWNtcAoJKiBzdHJjYXNlY21wLmM6IG5ldyBmaWxlLCBpbXBsZW1lbnQgc3RyY2FzZWNtcAoKCSogTWFrZWZpbGUuaW4gKENGSUxFUyk6IGxpc3QgdGhlc2UgdHdvIG5ldyBzb3VyY2UgZmlsZXMKCgkqIGZ1bmN0aW9ucy5kZWY6IGFkZCBzdHJjYXNlY21wIGFuZCBzdHJuY2FzZWNtcCBlbnRyaWVzCgpGcmkgT2N0IDE1IDE0OjUzOjA1IDE5OTMgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AdHdlZWRsZWR1bWIuY3lnbnVzLmNvbSkKCgkqIHN0cnRvdWwuYyAoc3RydG91bCksIHN0cnRvbC5jIChzdHJ0b2wpOiBIYW5kbGUgb3ZlcmZsb3cKCWFjY29yZGluZyB0byBBTlNJIEMuCgpUaHUgT2N0IDE0IDE2OjM0OjE5IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBhZGQgc3VwcG9ydCBvZiBBUk0gZ2xvYmFsIGNvbnN0cnVjdG9yL2Rlc3RydWN0b3IsCglhbmQgJ0cnIGZvciBwYXNzaW5nIHJlY29yZCBvciB1bmlvbiBpbiBwYXJhbWV0ZXIuCgpXZWQgT2N0IDEzIDEzOjM2OjE5IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IEZpeCBjb21tZW50IHRvIGNsYXJpZnkgdGhhdCBzdHVmZiBpbiBSRVFVSVJFRF9PRklMRVMKCXNob3VsZCBub3QgYmUgaW4gZnVuY3Rpb25zLmRlZi4KCldlZCBPY3QgMTMgMTM6MTM6MzggMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkB0d2VlZGxlZHVtYi5jeWdudXMuY29tKQoKCSogZnVuY3Rpb25zLmRlZjogUmVtb3ZlZCB4bWFsbG9jLiAgU3R1ZmYgaW4gUkVRVUlSRURfT0ZJTEVTIHNob3VsZAoJbm90IGJlIGluIGZ1bmN0aW9ucy5kZWYuCgpNb24gT2N0ICA0IDE4OjI2OjM5IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBjaGFuZ2UgZ2xvYmwgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciB0byBwcm9wZXIgbmFtZQoKVHVlIFNlcCAyOCAxODoxMTowNyAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogZml4IGJ1ZyBpbiBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yCgpUdWUgU2VwIDI4IDE2OjIwOjQ5IDE5OTMgIEt1bmcgSHN1ICAoa3VuZ0BjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiBzdXBwb3J0IGJvdGggb2xkIGFuZCBuZXcgX3Z0JC4uLiB2dGJsIG1hbmdsZWQgbmFtZXMKCkZyaSBTZXAgMjQgMTk6MDc6MTYgMTk5MyAgSmFzb24gTWVycmlsbCAgKGphc29uQGRlbmViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogRml4IGRlbWFuZ2xlX3RlbXBsYXRlIHByb3RvdHlwZQoKRnJpIFNlcCAyNCAxNzozMjo1NSAxOTkzICBLdW5nIEhzdSAgKGt1bmdAY2lyZGFuLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogZml4IHRlbXBsYXRlIGRlbWFuZ2xpbmcKCSogY3BsdXMtZGVtLmM6IGZpeCBjb25zdCB0eXBlIGRlbWFuZ2xpbmcKCSogY3BsdXMtZGVtLmM6IGZpeCBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yLCB2aXJ0dWFsIHRhYmxlLAoJcXVhbGlmaWVyLCBnbG9iYWwgY29uc3RydWN0b3IvZGVzdHJ1Y3RvciBkZW1hbmdsaW5nCgpXZWQgU2VwICAxIDIzOjEzOjExIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmMsIHN0cmVycm9yLmM6IFVzZSBmdWxseS1icmFja2V0ZWQgaW5pdGlhbGl6ZXIgdG8KCWtlZXAgZ2NjIC1XYWxsIGhhcHB5LgoKRnJpIEF1ZyAyNyAxMDozMDowOSAxOTkzICBKYXNvbiBNZXJyaWxsICAoamFzb25AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogQWRkIENPTlNUUyB0byBtYWtlIGdjYyBoYXBweSB3aXRoIGxhc3QKCXBhdGNoLgoKRnJpIEF1ZyAyNyAxMToyNDo1NCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AbGlvdGguY3lnbnVzLmNvbSkKCglQYXRjaCBmcm9tIFBhdWwgRmxpbmRlcnM6CgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogRGVhbCB3aXRoIGFycmF5cy4KClR1ZSBBdWcgMjQgMTQ6MjM6NTAgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcXVhbGlmaWVkOiBEZWFsIHdpdGggR05VIGZvcm1hdCBmb3IgbW9yZQoJdGhhbiA5IGNsYXNzZXMuCgpXZWQgQXVnIDE4IDE5OjUwOjI5IDE5OTMgIEphc29uIE1lcnJpbGwgIChqYXNvbkBkZW5lYi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGR1bW15Lm8pOiBSZWRpcmVjdCB0byAvZGV2L251bGwgdG8gYXZvaWQgInZhcmlhYmxlCglub3QgaW5pdGlhbGl6ZWQiIHdhcm5pbmdzIHVuZGVyIEhQL1VYCgpTdW4gQXVnIDE1IDIwOjQyOjQwIDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogc3RyZXJyb3IuYzogTW92ZSBpbmNsdWRlIG9mIHN0ZGlvLmggYWZ0ZXIgc3lzX2Vycmxpc3QgI2RlZmluZS4KCUFsc28gcmVtb3ZlIE5VTEwgZGVmaW5pdGlvbiAoc3RkaW8uaCBhbHdheXMgZGVmaW5lcyBOVUxMLCBzbyBpdAoJbmV2ZXIgZGlkIGFueXRoaW5nIGJ1dCBjbHV0dGVyIHVwIHRoZSBjb2RlKS4KClNhdCBBdWcgMTQgMTQ6MjE6NDkgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4sIGZ1bmN0aW9ucy5kZWY6IGhhbmRsZSB4bWFsbG9jLmMKCgkqIHhtYWxsb2MuYzogcHJvdmlkZSB4bWFsbG9jIGFuZCB4cmVhbGxvYyBmdW5jdGlvbnMKClRodSBBdWcgMTIgMTc6Mzg6NTcgMTk5MyAgRGF2aWQgSi4gTWFja2VuemllICAoZGptQHRoZXB1Yi5jeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmM6IEZpeCBhIGNvbW1lbnQuCgpTYXQgQXVnICA3IDEzOjU2OjM1IDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIGdldG9wdDEuYzogRGVjbGFyZSBjb25zdCB0aGUgd2F5IGdldG9wdC5jIGRvZXMuCgpGcmkgQXVnICA2IDE3OjAzOjEzIDE5OTMgIERhdmlkIEouIE1hY2tlbnppZSAgKGRqbUB0aGVwdWIuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYywgYWxsb2NhLmM6IFVwZGF0ZSBmcm9tIEZTRi4KCSogZ2V0b3B0LmMsIGdldG9wdDEuYzogVXBkYXRlIHRvIGN1cnJlbnQgRlNGIHZlcnNpb24sIHdoaWNoCglkb2Vzbid0IHVzZSBhbGxvY2EuCgpUdWUgSnVsIDI3IDE0OjAzOjU3IDE5OTMgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChkZW1hbmdsZSk6IEFkZCB0aGUgdGFyZ2V0IHdpdGggYSBtZXNzYWdlIHNheWluZwoJd2hlcmUgZGVtYW5nbGUgd2VudC4KCk1vbiBKdWwgMjYgMTU6NDk6NTQgMTk5MyAgSmltIEtpbmdkb24gIChraW5nZG9uQGxpb3RoLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogUmVtb3ZlIG9ic29sZXRlIGBkZW1hbmdsZScgdGFyZ2V0LgoKVGh1IEp1bCAyMiAwODozMTowMSAxOTkzICBGcmVkIEZpc2ggIChmbmZAZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChhcm1fc3BlY2lhbCk6ICBBcHBseSBwYXRjaCBmcm9tIGFyZ0BsdWNpZC5jb20gdG8KCWF2b2lkIGluZmluaXRlIGxvb3Agb24gdnRibCBzeW1ib2xzIHdpdGggZGlzYW1iaWd1YXRpbmcgImp1bmsiCgl0YWNrZWQgb24gdGhlIGVuZC4KCk1vbiBKdWwgMTkgMTQ6MTA6MzcgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vQHJ0bC5jeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmM6IHdvcmsgYXJvdW5kIHNvbWUgc3lzdGVtcyBsb3NpbmcgZGVmaW5pdGlvbnMgb2YKCXN5c19zaWdsaXN0CgoJKiBjb25maWcvbWgtbHlueG9zOiB0aGlzIHN5c3RlbSBoYXMgYSBsb3NpbmcgZGVmaW5pdGlvbiBvZgoJc3lzX3NpZ2xpc3QKCgkqIGNvbmZpZy50YWJsZTogdXNlIG1oLWx5bnhvcyBmb3IgKi0qLWx5bnhvcwoKTW9uIEp1bCAxOSAxNzowODo1MiAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcudGFibGU6IEFkZCBzdXBwb3J0IGZvciBIUFBBIEJTRCBob3N0cy4KCgkqIGNvbmZpZy9taC1ocGJzZDogTmV3IGZpbGUuCgpNb24gSnVsIDEyIDE4OjAwOjQwIDE5OTMgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKFRBR1MpOiBtYWtlIHdvcmsgd2hlbiBzcmNkaXIgIT0gb2JqZGlyLgoKU3VuIEp1biAyNyAxNTozNTozMSAxOTkzICBEYXZpZCBKLiBNYWNrZW56aWUgIChkam1AdGhlcHViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAobWFpbik6IEFkZCBsb25nIG9wdGlvbnMsIGluY2x1ZGluZyAtLWhlbHAgYW5kCgktLXZlcnNpb24uCgkodXNhZ2UpOiBOZXcgZnVuY3Rpb24gZnJvbSBjb2RlIGluIG1haW4uCgpUdWUgSnVuIDIyIDExOjM3OjM4IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBkZW5lYi5jeWdudXMuY29tKQoKCSogY29uZmlnLnRhYmxlOiAgTmV3IHNoZWxsIHNjaXB0LCBzb3VyY2VkIGJ5IGJvdGggLi9jb25maWd1cmUsaW4KCWFuZCAuLi94aWJlcnR5L2NvbmZpZ3VyZS5pbiwgdG8gYXZvaWQgbWFpbnRhaW5hbmNlIGxvc3NhZ2VzLgoJKiBjb25maWd1cmUuaW4gYW5kIC4uL3hpYmVydHkvY29uZmlndXJlLmluOiAgVXNlIGNvbmZpZy50YWJsZS4KCgkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgdXNlIG1oLWFpeCBmb3IgQUlYIDMuMiwgb25seSBmb3IgMy4xLgoJKiBjb25maWd1cmUuaW46IE1hcCAqLSotaXJpeCogKGV4Y2VwdCBpcml4NCkgdG8gbWgtc3lzdi4KCSogLi4veGliZXJ0eS9jb25maWd1cmUuaW46ICBVcGRhdGUgZnJvbSAuL2NvbmZpZ3VyZS5pbi4KClR1ZSBKdW4gMTUgMTc6MDU6MzEgMTk5MyAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHJlbW92ZSBwYXJlbnRkaXIgc3VwcG9ydAoKV2VkIE1heSAyNiAxMjo1OTowOSAxOTkzICBQZXRlciBTY2hhdWVyICAocGVzQHJlZ2VudC5lLXRlY2huaWsudHUtbXVlbmNoZW4uZGUpCgoJKiBjcGx1cy1kZW0uYyAoeHJlYWxsb2MpOiAgTWF0Y2ggZGVmaW5pdGlvbiB3aXRoIHByb3RvdHlwZS4KClR1ZSBNYXkgMjUgMTQ6Mjc6NTEgMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3ByZWZpeCk6ICBEZW1hbmdsZSBjZnJvbnQKCWxvY2FsIHZhcmlhYmxlcyBhcyBhbiBleHRlbnNpb24gdG8gQVJNIGRlbWFuZ2xpbmcuCgpGcmkgTWF5IDIxIDA5OjUzOjU3IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBsaW90aC5jeWdudXMuY29tKQoKCSogaWVlZS1mbG9hdC5jOiBEb24ndCByZXF1aXJlIHBvaW50ZXJzIHRvIGRvdWJsZSB0byBiZSBhbGlnbmVkLgoKVHVlIE1heSAxOCAxNzoxMjoxMCAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCiAgICAgICAgKG1lcmdlIGNoYW5nZXMgZnJvbSBkbG9uZ0Bjc2UudWNzYy5lZHUpCgkqIGNwbHVzLWRlbS5jIChjb25zdW1lX2NvdW50KTogIFNpbXBsaWZ5LgoJKiBjcGx1cy1kZW0uYyAoYXJtX3B0LCBkZW1hbmdsZV9jbGFzc19uYW1lKTogIE5ldyBmdW5jdGlvbnMuCgkqIGNwbHVzLWRlbS5jICh2YXJpb3VzKTogIENhbGxzIHRvIGFybV9wdCwgZGVtYW5nbGVfY2xhc3NfbmFtZS4KCgkqIGNwbHVzLWRlbS5jICh4bWFsbG9jLCB4cmVhbGxvYywgc3Ryc3RyKTogIE1ha2UgZXh0ZXJuIGRlY2xzIGludG8KCWZ1bGwgcHJvdG90eXBlcy4KCSogY3BsdXMtZGVtLmMgKGZyZWUpOiAgQWRkIHByb3RvdHlwZS4KCSogY3BsdXMtZGVtLmMgKG9wdGFibGUpOiAgRnVsbHkgYnJhY2tldGl6ZSBpbml0aWFsaXplci4KCkZyaSBNYXkgMTQgMTc6MTM6MDUgMTk5MyAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogIFdoZXRoZXIgaW5pdGlhbCB1bmRlcnNjb3JlcyBhcmUgc3RyaXBwZWQKCWRlcGVuZHMgb24gdGhlIGV4dGVybmFsIHZhcmlhYmxlIHByZXBlbmRzX3VuZGVyc2NvcmUKCSh3aGljaCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGJpbnV0aWxzIE1ha2VmaWxlKS4KCkZyaSBNYXkgMTQgMDc6MzI6MjAgMTk5MyAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGRlbmViLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYyAobW9wX3VwLCBhcm1fc3BlY2lhbCk6IFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMuCgpUdWUgTWF5ICA0IDIwOjMxOjU5IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGNvbnN1bWVfY291bnQpOiAgUmV0dXJuIHplcm8gaWYgYXJnIGRvZXMgbm90CglzdGFydCB3aXRoIGRpZ2l0LCBhbmQgZG9uJ3QgY29uc3VtZSBhbnkgaW5wdXQuCgpUdWUgTWF5ICA0IDA4OjEwOjI4IDE5OTMgIEppbSBLaW5nZG9uICAoa2luZ2RvbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGRlbWFuZ2xlKTogVXNlICR7c3JjZGlyfSBub3QgJF4uCgoJKiBzdHJ0b2QuYzogTmV3IGZpbGUsIG5lZWRlZCBhdCBsZWFzdCBmb3IgQlNEIDQuMy4KClN1biBNYXkgIDIgMTE6MzA6NDIgMTk5MyAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYyAoc3lzX3NpZ2xpc3QpOiAgRm9yIEFOU0kgY29tcGlsYXRpb25zLCB0eXBlIGlzCgkiY29uc3QgY2hhciAqY29uc3QiLiAgQWxzbyByZW1vdmUgY29uZGl0aW9uYWxpemF0aW9uIG9uIF9fU1REQ19fCglzaW5jZSBjb25zdCBpcyBkZWZpbmVkIGF3YXkgZm9yIG5vbi1BTlNJLgoKV2VkIEFwciAyOCAxOToyOTo1NSAxOTkzICBLZW4gUmFlYnVybiAgKHJhZWJ1cm5AZGVuZWIuY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplICotKi1ocHV4LgoJKiBjb25maWcvbWgtaHB1eDogTmV3IGZpbGUuCgpUdWUgQXByIDI3IDE1OjIyOjE5IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogdG1wbmFtLmM6ICBBZGRlZCBBTlNJIHRtcG5hbSgpIGZ1bmN0aW9uLgoJKiBmdW5jdGlvbnMuZGVmLCBNYWtlZmlsZS5pbjogIFVwZGF0ZSBhY2NvcmRpbmdseS4KClR1ZSBBcHIgMjcgMTM6Mzg6MzggMTk5MyAgUGV0ZXIgU2NoYXVlciAgKHBlc0ByZWdlbnQuZS10ZWNobmlrLnR1LW11ZW5jaGVuLmRlKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX2Z1bmN0aW9uX25hbWUpOiBHZXQgdGhlIGRlbWFuZ2xpbmcgb2YKCXN0b3BfXzFBIHJpZ2h0LgoKRnJpIEFwciAxNiAyMzo0ODoyNCAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb24gYXQgY2FsdmluKQoKCSogY3BsdXMtZGVtLmM6IERlY2xhcmUgc3Ryc3RyIHJldHVybiB0eXBlLgoKRnJpIE1hciAyNiAxMjowMToyNiAxOTkzICBKaW0gS2luZ2RvbiAgKGtpbmdkb25AY3lnbnVzLmNvbSkKCgkqIHN0cnNpZ25hbC5jOiBBZGQgc29tZSBBSVggc2lnbmFscy4KClRodSBNYXIgMjUgMTU6MTc6MjMgMTk5MyAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKE1BS0VPVkVSUklERVMpOiBEZWZpbmUgdG8gYmUgZW1wdHkuCgpXZWQgTWFyIDI0IDAxOjU5OjI1IDE5OTMgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBwb3NlaWRvbi5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGFkZCBpbnN0YWxsY2hlY2sgJiBkdmkgdGFyZ2V0cwoKVGh1IE1hciAxOCAxNDowNTo0NCAxOTkzICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBpZWVlLWZsb2F0LmM6ICBOZXcgZmlsZSwgbW92ZWQgZnJvbSAuLi9nZGIgKHNpbmNlIGl0IGlzCgluZWVkZWQgYnkgLi4vb3Bjb2RlL202OGstZGlzLmMpLgoKVHVlIE1hciAgMiAxNzo0NzozMSAxOTkzICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAgUmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byBjZnJvbnQgd2l0aCBBUk0uCgpGcmkgRmViIDI2IDAwOjE3OjA3IDE5OTMgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAgRml4IG1haW4gcHJvZ3JhbSAod2hlbiBjb21waWxlZCB3aXRoIC1ETUFJTikKCXRvIGJlIG1vcmUgdXNlZnVsIGFzIGEgZmlsdGVyLgoKU2F0IEZlYiAyMCAyMTo0MTozOSAxOTkzICBCcmVuZGFuIEtlaG9lICAoYnJlbmRhbkBsaXNhLmN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbF90b19saWJkaXIsIGluc3RhbGxfdG9fdG9vbGRpcik6IEdvIGludG8gdGhlCglkZXN0aW5hdGlvbiBkaXJlY3RvcnkgYmVmb3JlIHJ1bm5pbmcgJChSQU5MSUIpLCBpbiBjYXNlIHRoYXQKCXByb2dyYW0gdHJpZXMgdG8gY3JlYXRlIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXMgcGFydCBvZgoJaXRzIHdvcmsuCgpUaHUgRmViIDE4IDIzOjAwOjE5IDE5OTMgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmMgKHN5c19zaWdsaXN0KTogIFJlbW92ZSB5ZXQgYW5vdGhlciAqJV4mJSYkIyAiY29uc3QiCgliZWNhdXNlIEJTRCA0LjQgbGFja3Mgb25lLiAgSXNuJ3QgdGhpcyBmdW4/CgpUaHUgRmViIDE4IDExOjI0OjI1IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6ICBTZXQgZnVuY19kb25lIGFmdGVyCglkZW1hbmdsaW5nIGEgdGVtcGxhdGUuCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV90ZW1wbGF0ZSk6ICBGaXggc2V2ZXJhbCBzbWFsbCBidWdzCglpbiBkZW1hbmdsaW5nIEdOVSBzdHlsZSB0ZW1wbGF0ZXMuCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9wcmVmaXgpOiAgRml4IGZvciB0ZW1wbGF0ZXMgaW4gR05VCglzdHlsZSBjb25zdHJ1Y3RvcnMuCgkqIGNwbHVzLWRlbS5jIChnbnVfc3BlY2lhbCk6ICBGaXggZm9yIHRlbXBsYXRlcyBpbiBHTlUgc3R5bGUKCXN0YXRpYyBkYXRhIG1lbWJlcnMuCgpUdWUgRmViIDE2IDE3OjI4OjM1IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlX3NpZ25hdHVyZSk6ICBNb2RpZnkgdG8gaW5jbHVkZSB0eXBlCgltb2RpZmllcnMgbGlrZSBzdGF0aWMgYW5kIGNvbnN0IGluIHJlbWVtYmVyZWQgdHlwZXMuCgpUaHUgRmViIDExIDIyOjIwOjQ3IDE5OTMgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY3BsdXMtZGVtLmMgKGRlbWFuZ2xlZF9xdWFsaWZpZWQpOiAgQWRkIG5ldyBwYXJhbWV0ZXIgdGhhdCB0ZWxscwoJd2hldGhlciB0byBwcmVwZW5kIG9yIGFwcGVuZCB0aGUgcXVhbGlmaWVycy4KCSogY3BsdXMtZGVtLmMgKHN0cmluZ19wcmVwZW5kcyk6ICBVc2VkIG5vdywgcmVtb3ZlICNpZiAwLgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfc2lnbmF0dXJlKTogIENhbGwgZGVtYW5nbGVfcXVhbGlmaWVkCgl3aXRoIHByZXBlbmRpbmcuCgkqIGNwbHVzX2RlbS5jIChnbnVfc3BlY2lhbCk6ICBSZWNvZ25pemUgc3RhdGljIGRhdGEgbWVtYmVycyB0aGF0Cgl1c2UgcXVhbGlmaWVkIG5hbWVzLgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfcXVhbGlmaWVkKTogIEFjY3VtdWxhdGUgcXVhbGlmaWVycyBpbiBhCgl0ZW1wb3JhcnkgYnVmZmVyIGFuZCB0aGUgcHJlcGVuZCBvciBhcHBlbmQgdGhlbSB0byB0aGUgcmVzdWx0LAoJYXMgc3BlY2lmaWVkIGJ5IHRoZSBuZXcgImFwcGVuZCIgZmxhZy4KCSogY3BsdXMtZGVtLmMgKGRvX3R5cGUpOiAgQ2FsbCBkZW1hbmdsZWRfcXVhbGlmaWVkIHdpdGgKCWFwcGVuZGluZy4KCk1vbiBEZWMgMjggMTA6NDc6MTkgMTk5MiAgS2VuIFJhZWJ1cm4gIChyYWVidXJuQGN5Z251cy5jb20pCgoJKiBzdHJzaWduYWwuYyAoc2lnbmFsX3RhYmxlKTogTm93IGNvbnN0LgoJKGluaXRfc2lnbmFsX3RhYmxlcyk6IFZhcmlhYmxlIGVpcCBub3cgcG9pbnRzIHRvIGNvbnN0LgoKCSogc3RyZXJyb3IuYyAoZXJyb3JfdGFibGUpOiBOb3cgY29uc3QuCgkoaW5pdF9lcnJvcl90YWJsZXMpOiBWYXJpYWJsZSBlaXAgbm93IHBvaW50cyB0byBjb25zdC4KClR1ZSBEZWMgMTUgMTU6MzY6NTAgMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBtZW1jaHIuYyAobWVtY2hyKTogIE5ldyAoQU5TSSBzdGFuZGFyZCkgZnVuY3Rpb24uCgkqIE1ha2VmaWxlLmluLCBmdW5jdGlvbnMuZGVmOiAgQWRkZWQgbWVtY2hyLgoJKiBNYWtlZmlsZS5pbiAoQVJfRkxBR1MpOiBVc2UgcmMgaW5zdGFkIG9mIG5vbi1zdGFuZGFyZCBjcS4KCldlZCBEZWMgIDIgMjI6NDk6MTAgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6IHJlbW92ZSB1c2Ugb2YgVVNHIGFyb3VuZCA8YWxsb2NhLmg+LCB3aGljaCBuZXZlciBtZWFudAoJYW55dGhpbmcgYW55d2F5CgoJKiBjb25maWcvbWgte2FpeCxhcG9sbG82OCxuY3IzMDAwLHN5c3Ysc3lzdjR9OiByZW1vdmVkIGRlZmluaXRpb25zCglvZiBVU0cgYW5kIFVTR3I0CgpUaHUgTm92IDE5IDAzOjA5OjMzIDE5OTIgIEJyZW5kYW4gS2Vob2UgIChicmVuZGFuQGxpc2EuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jIChkZW1hbmdsZV9mdW5kX3R5cGUpOiBSZWNvZ25pemUgYHcnLCBhIHdpZGUgY2hhcmFjdGVyOwoJaXQncyBub3cgYSB0eXBlIGFjY29yZGluZyB0byB0aGUgQU5TSSBYM0oxNiB3b3JraW5nIHBhcGVyOyBvdXRwdXQKCSJ3Y2hhcl90IiBmb3IgaXQuCgkoZGVtYW5nbGVfdGVtcGxhdGUpOiBBY2NlcHQgYHcnIGFzIGFuIGludGVncmFsIHR5cGUuCgkoeG1hbGxvYywgeHJlYWxsb2MpOiBVc2UgYGNoYXIgKicsIG5vdCBgUFRSJy4gIENhc3QgY2FsbHMgdG8gdGhlaXIKCWNvdW50ZXJwYXJ0cyBtYWxsb2MgYW5kIHJlYWxsb2MgdG8gYGNoYXIgKicuCgkobWFpbik6IEV4aXQgd2l0aCBhIDAgc3RhdHVzLgoJKiBNYWtlZmlsZS5pbiAoZGVtYW5nbGUpOiBEb24ndCBleHBlY3QgdGhlIHVzZXIgdG8gZGVmaW5lCglERU1BTkdMRSwgaW5zdGVhZCBmb3JjZSB0byBiZSBjcGx1cy1kZW0uYy4gIExvb2sgaW4gJChzcmNkaXIpLy4uL2luY2x1ZGUKCWZvciBkZW1hbmdsZS5oLiAgUGFzcyBpdCBhbnkgSERFRklORVMgb3IgWFRSQUZMQUdTLgoKV2VkIE5vdiAxOCAxODo1NjoyMCAxOTkyICBKb2huIEdpbG1vcmUgIChnbnVAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChBUl9GTEFHUyk6ICBBdm9pZCB2ZXJib3NpdHkuCgkqIGNvbmZpZy9taC1zeXN2NDogIFJlbW92ZSBBUl9GTEFHUyBvdmVycmlkZSwgdXNlIElOU1RBTEw9Y3AsCglyZXBsYWNlIFVTR3I0IHdpdGggSEFWRV9TWVNDT05GLgoJKiBjb25maWcvbWgtc29sYXJpczogIFJlbW92ZTsgbWgtc3lzdjQgd29ya3Mgbm93LgoJKiBnZXRwYWdlc2l6ZS5jOiAgUmVwbGFjZSBVU0dyNCB3aXRoIEhBVkVfU1lTQ09ORi4KCSogY29uZmlndXJlLmluOiAgU2ltcGxpZnkgaG9zdCBtYXRjaGluZyB0YWJsZSwgcmVtb3ZlIHNlcGFyYXRlCglzb2xhcmlzIGNvbmZpZyBmaWxlLgoKU3VuIE5vdiAxNSAwOTozNToxNiAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoaVszNF04Ni0qLXNvbGFyaXMyKik6ICBBZGQsIHVzZSBtaC1zeXN2NC4KClR1ZSBOb3YgIDMgMjE6Mjc6MDMgMTk5MiAgQnJlbmRhbiBLZWhvZSAgKGJyZW5kYW5AY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jICh4bWFsbG9jLCB4cmVhbGxvYyk6IEFkZCBkZWNscy4KCShyZW1lbWJlcl90eXBlKTogRG9uJ3QgY2FzdCB4bWFsbG9jLgoJKHN0cmluZ19uZWVkKTogTGlrZXdpc2U7IGRvbid0IGNhc3QgeHJlYWxsb2MgZWl0aGVyLgoKRnJpIE9jdCAyMyAwODo1MjowMSAxOTkyICBJYW4gTGFuY2UgVGF5bG9yICAoaWFuQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZnMsIHJlbmFtZS5jOiBhZGRlZCBzaW1wbGUKCWltcGxlbWVudGF0aW9uIG9mIHJlbmFtZSwgc2luY2Ugc29tZSBiaW51dGlscyBwcm9ncmFtcyB1c2UgaXQuCgpUaHUgT2N0IDE1IDE1OjE4OjIyIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBjeWdudXMuY29tKQoKCSogc3Ryc2lnbmFsLmM6ICBBZGQgYXBwcm9wcmlhdGUgJ2NvbnN0JyB0byBzeXNfc2lnbGlzdAoJZXh0ZXJuIGRlY2xhcmF0aW9uIChpZiBfX1NURENfXykuICAoTmVlZGVkIGZvciBMaW51eC4pCgkqIHN0cnNpZ25hbC5jIChzdHJzaWduYWwpOiBBZGQgY2FzdCB0byByZW1vdmUgY29uc3QtbmVzcy4KCkZyaSBPY3QgIDkgMDM6MjI6NTUgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAobmVlZGVkLmF3aywgbmVlZGVkMi5hd2spOiAgUmVtb3ZlIGVycm9uZW91cyBcJ3MKCWJlZm9yZSAiJ3MsIGRpYWdub3NlZCBieSBCU0QgNC40IGF3ay4KClRodSBPY3QgIDggMTU6MjU6MTIgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IGNyZWF0ZSBjb25maWcuaCBhbmQgbmVlZGVkLWxpc3QgdGhyb3VnaCAkKENPTkZJR19IKQoJYW5kICQoTkVFREVEX0xJU1QpLCB0byBnaXZlIHNvbWUgaG9va3MgZm9yIHhpYmVydHkuCgpUaHUgT2N0ICAxIDIzOjMxOjQyIDE5OTIgIGRhdmlkIGQgYHpvbycgenVobiAgKHpvbyBhdCBjaXJkYW4uY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogdXNlIGNwdS12ZW5kb3ItdHJpcGxlIGluc3RlYWQgb2YgbmVzdGVkIGNhc2VzCgpXZWQgU2VwIDMwIDExOjI2OjU5IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBhcmd2LmMsIGJhc2VuYW1lLmMsIGJjbXAuYywgYmNvcHkuYywgYnplcm8uYywKCWNvbmNhdC5jLCBjcGx1cy1kZW0uYywgZmRtYXRjaC5jLCBnZXRjd2QuYywgZ2V0b3B0LmMsIGdldG9wdDEuYywKCWdldHBhZ2VzaXplLmMsIGluc3F1ZS5jLCBtZW1jbXAuYywgbWVtY3B5LmMsIG1lbW1vdmUuYywgbWVtc2V0LmMsCglvYnN0YWNrLmMsIHNpZ3NldG1hc2suYywgc3BhY2VzLmMsIHN0cmNoci5jLCBzdHJlcnJvci5jLAoJc3RycmNoci5jLCBzdHJzaWduYWwuYywgc3Ryc3RyLmMsIHZmb3JrLmMsIHZzcHJpbnRmLmM6CglDb252ZXJ0IGZyb20gdXNpbmcgR1BMIHRvIExHUEwuCgpTYXQgU2VwIDI2IDA0OjAxOjMwIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudUBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGVycm9ycyk6ICBMZWF2ZSBkdW1teS5vIGFuZCBkdW1teSBhcm91bmQgc28gdGhhdAoJd2UgY2FuIHNlZSBob3cgdGhlIG5lZWRlZCBsaXN0IHdhcyBnZW5lcmF0ZWQgKGl0J3Mgc29tZXRpbWVzIHdyb25nKS4KCShtb3N0bHljbGVhbik6ICBSZW1vdmUgdGhlbS4KCk1vbiBTZXAgMjEgMTQ6NTA6NDIgMTk5MiAgSWFuIExhbmNlIFRheWxvciAgKGlhbkBjeWdudXMuY29tKQoKCSogZ2V0Y3dkLmM6IHN1cHBseSBhIGRlZmF1bHQgaWYgTUFYUEFUSExFTiBpcyBub3QgZGVmaW5lZC4KCgkqIGNvbmZpZy9taC1pcml4NDogc2V0IEVYVFJBX09GSUxFUyB0byBhbGxvY2EubywgZnJvbSBXUlMuCgpXZWQgU2VwICA5IDEyOjQxOjQ4IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBVc2UgWFRSQUZMQUdTIHdoZW4gY29tcGlsaW5nLCBzbyB0aGF0IHhpYmVydHkgd29ya3MKCXdoZW4gY3Jvc3MtY29tcGlsaW5nLgoKVGh1IFNlcCAgMyAxMzoyOTozOSAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAc2VuZGFpLmN5Z251cy5jb20pCgoJKiBjcGx1cy1kZW0uYzogKGRlbWFuZ2xlX3ByZWZpeCk6IHJlZHVjdGlvbiBpbiBzdHJlbmd0aCBvZiBzdHJzdHIKCSAgYXMgYSB0aW1lIG9wdGltaXphdGlvbi4KCgkqIGNwbHVzLWRlbS5jIChjcGx1c19kZW1hbmdsZSk6IHJlbW92ZSBzdHJwYnJrIHRlc3QuICBBcHBlYXJzIHRvCgkgIGJlIG1vcmUgZXhwZW5zaXZlIHRoYW4gc2ltcGx5IGRlbWFuZ2xpbmcuCgoJKiBjcGx1cy1kZW0uYyAoY3BsdXNfbWF0Y2gpOiBuZXcgZnVuY3Rpb24uCgpUdWUgU2VwICAxIDE1OjI0OjA0IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAgI2luY2x1ZGUgPHN0ZGlvLmg+LCB0byBkZWZpbmUgTlVMTC4KCURlZmluZSBjdXJyZW50X2RlbWFuZ2xpbmdfc3R5bGUuCgpTdW4gQXVnIDMwIDE3OjU4OjE5IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIGNwbHVzLWRlbS5jOiAgTmV3IGZpbGUsIG1vdmVkIGZyb20gLi4vZ2RiLgoJKiBjcGx1cy1kZW0uYyAoc2V0X2NwbHVzX21hcmtlcl9mb3JfZGVtYW5nbGluZyk6ICBOZXcgZXhwb3J0ZWQKCWZ1bmN0aW9uLCB0byBhdm9pZCBjb21waWxpbmcgaW4gdGFyZ2V0LWRlcGVuZGVuY3kgZm9yIENQTFVTX01BUktFUi4KCSogY3BsdXMtZGVtLmMgKGNwbHVzX2RlbWFuZ2xlKTogIEFsbG93IGRlbWFuZ2xpbmcgc3R5bGUgb3B0aW9uCgl0byBiZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIsIGJ1dCB1c2luZyB0aGUgZ2xvYmFsIHZhcmlhYmxlCgljdXJyZW50X2RlbWFuZ2xpbmdfc3R5bGUgYXMgYSBkZWZhdWx0LgoJKiBNYWtlZmlsZS5pbjogIFVwZGF0ZSBmb3IgY3BsdXMtZGVtLmMKClNhdCBBdWcgMjkgMTA6NDQ6MDkgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmM6ICBNZXJnZSBpbiBjb21tZW50IGNoYW5nZXMgZnJvbSBGU0YgdmVyc2lvbi4gIE5vdwoJbWF0Y2hlcyB0aGUgRlNGIHZlcnNpb24gZXhhY3RseS4KCkZyaSBBdWcgMjggMTg6Mzk6MDggMTk5MiAgSm9obiBHaWxtb3JlICAoZ251QGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKENBTExfRlJFRUZVTik6ICBDYW4ndCB1c2UgPzogd2l0aCB2b2lkIHZhbHVlcyAoYXQKCWxlYXN0IG9uIGxvc2luZyBERUNzdGF0aW9ucyEpOyB1c2UgaWYtdGhlbi1lbHNlIGluc3RlYWQuCgpXZWQgQXVnIDE5IDE0OjQwOjM0IDE5OTIgIElhbiBMYW5jZSBUYXlsb3IgIChpYW5AY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBhbHdheXMgY3JlYXRlIGluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4KCk1vbiBBdWcgMTAgMTc6MzM6NDAgMTk5MiAgZGF2aWQgZCBgem9vJyB6dWhuICAoem9vIGF0IGNpcmRhbi5jeWdudXMuY29tKQoKICAgICAgICogTWFrZWZpbGUuaW46IGNsZWFuIHVwIGRlZmluaXRpb24gb2YgQ0ZJTEVTLCBtb3JlIGNvbW1lbnRzCgpTYXQgQXVnICA4IDIzOjEwOjU5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZ2V0b3B0LmMgKG15X2luZGV4KTogIE1ha2UgZmlyc3QgYXJnIGNvbnN0IHRvIG1hdGNoIHN0cmNociwKCXdoaWNoIGl0IHNvbWV0aW1lcyBpcyByZW1hcHBlZCB0by4KClNhdCBBdWcgIDEgMTM6NDg6NTAgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKERFRkFVTFRfQUxJR05NRU5UKTogIFVwZGF0ZSB0byBtYXRjaCBGU0YgdmVyc2lvbi4KCSogb2JzdGFjay5jIChfb2JzdGFja19iZWdpbik6ICBJbml0aWFsaXplIHVzZV9leHRyYV9hcmcuCgkqIG9ic3RhY2suYyAoX29ic3RhY2tfYmVnaW5fMSk6ICBOZXcsIGZyb20gRlNGIHZlcnNpb24uCgpNb24gSnVsIDIwIDIxOjA3OjU4IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogb2JzdGFjay5jIChDQUxMX0NIRUNLRlVOLCBDQUxMX0ZSRUVGVU4pOiAgVXNlIHVzZV9leHRyYV9hcmcgYW5kCglleHRyYV9hcmcuCgkqIG9ic3RhY2suYyAoX29ic3RhY2tfYmVnaW4pOiAgUmVtb3ZlIGFyZWFfaWQgYW5kIGZsYWdzIGFyZ3VtZW50cwoJKHByZXZpb3VzbHkgYWRkZWQgZm9yIG1tYWxsb2Mgc3VwcG9ydCwgaW50ZXJmYWNlIGhhcyBjaGFuZ2VkKS4KCUFsc28gY29udmVydCBmbGFncyB1c2FnZSB0byB1c2UgdXNlX2V4dHJhX2FyZyBhbmQgbWF5YmVfZW1wdHlfb2JqZWN0LgoKRnJpIEp1bCAxMCAwMDo0MTo1MyAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYzogIE1vdmUgZXhwYW5kYXJndiBpbmxpbmUgYW5kIGVsaW1pbmF0ZSBzdGF0aWMgdmFyaWFibGVzLgoJUmV3cml0ZSB0byBhbHdheXMgYWxsb2NhdGUgaW4gcG93ZXJzIG9mIHR3by4gIEZpeCB0byByZXR1cm4gYW4KCWFyZ3Ygd2l0aCBhIHNpbmdsZSBudWxsIHN0cmluZyBhcmcgaWYgcGFzc2VkIGEgbnVsbCBzdHJpbmcuCgpGcmkgSnVsICAzIDIwOjI3OjI5IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogcmFuZG9tLmMsIHNpZ3NldG1hc2suYywgc3RyZXJyb3IuYywgc3Ryc2lnbmFsLmM6ICBSZW1vdmUKCSIodm9pZCkiIGNhc3RzIGZyb20gZnVuY3Rpb24gY2FsbHMgd2hlcmUgdGhlIHJldHVybiB2YWx1ZSBpcwoJaWdub3JlZCwgaW4gYWNjb3JkYW5jZSB3aXRoIEdOVSBjb2Rpbmcgc3RhbmRhcmRzLgoKTW9uIEp1biAyOSAxMDo1NDoxOSAxOTkyICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGJjb3B5LmMsIHN0cmVycm9yLmMsIHN0cnNpZ25hbC5jOiAgTGludC4KClRodSBKdW4gMjUgMDk6MTg6NDEgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6IG1lcmdlIGNoYW5nZXMgZnJvbSBtYWtlLgoKVGh1IEp1biAyNSAwNDo0MzoyMiAxOTkyICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIGFsbG9jYS5jOiAgSW5jb3Jwb3JhdGUgZml4ZXMgZnJvbSBnZGIvYWxsb2NhLmMuCglGSVhNRTogIEV2ZW50dWFsbHkgbW92ZSBnZGIncyBhbGxvY2EgY29uZmlndXJhdGlvbiBmaWxlcyBoZXJlLAoJYW5kIHJlbW92ZSBnZGIvYWxsb2NhLmMgYW5kIGl0cyBNYWtlZmlsZS5pbiBzdXBwb3J0LgoKVHVlIEp1biAyMyAyMTo1NjozMCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGR1bW15LmM6ICBEZWZpbmUgTk9USElORyB0byAvKm5vdGhpbmcqLywgY2hhbmdlIHJldHVybiB0eXBlCglvZiBtYWluIHRvIGludCBhbmQgcmV0dXJuIHplcm8uCgkqIGZ1bmN0aW9ucy5kZWY6ICBTdXBwbHkgTk9USElORyBhcyB0aGUgZm91cnRoIGFyZyB0byBtYWNyb3MKCXRoYXQgZG9uJ3QgaGF2ZSBhbiBleHBsaWNpdCBhcmcsIHRvIHNhdGlzZnkgcGlja3kgcHJlcHJvY2Vzc29ycy4KCldlZCBKdW4gMTcgMTg6MTM6NTggMTk5MiAgUGVyIEJvdGhuZXIgIChib3RobmVyQHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBDbGVhbiB1cCAqY2xlYW4gcnVsZXMsIGFzIHBlciBzdGFuZGFyZHMudGV4aS4KClR1ZSBKdW4gMTYgMTY6MTE6NTkgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQHJ0bC5jeWdudXMuY29tKQoKCSogZ2V0b3B0LmMsIGdldG9wdDEuYzogbWVyZ2VkIGxhcmdlbHkgZ3JhdHVpdG91cywgbW9zdGx5CgkgIHdoaXRlc3BhY2UgZGlmZnMgZnJvbSBvdGhlciBwcmVwIGRpc3RyaWJ1dGlvbnMuCgpNb24gSnVuIDE1IDEyOjI1OjQ2IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlnL21oLW5jcjMwMDAgKElOU1RBTEwpOiAgRG9uJ3QgdXNlIC91c3IvdWNiL2luc3RhbGwsCglpdCBpcyBicm9rZW4gb24gbmNyIDMwMDAncy4KCk1vbiBKdW4gMTUgMDE6MDM6MjYgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBzaWdzZXRtYXNrLmM6ICBSZXdyaXRlLiAgT2xkIG9uZSB3YXMgdmVyeSBjb25mdXNlZCBhYm91dCBpdHMKCWFyZ3VtZW50cyBhbmQgcmVzdWx0LiAgTmV3IG9uZSBjYW4ndCBkbyBtdWNoLCBidXQgYXQgbGVhc3Qga25vd3MKCXdoYXQgaXQgY2FuJ3QgZG8sIGFuZCBpdCdzIGdvb2QgZW5vdWdoIGZvciBHREIncyB1c2UuCgpTdW4gSnVuIDE0IDE1OjE3OjQwIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBmdW5jdGlvbnMuZGVmOiAgVXNlIHByb3BlciBwcm90b3R5cGUgZm9yIHN0cnRvdWwuCgpGcmkgSnVuIDEyIDE5OjIyOjQwIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBBZGQgcmFuZG9tLmMuCgkqIGNvbmZpZy9taC0qOiAgVXNlICJ0cnVlIiByYXRoZXIgdGhhbiAiZWNobyA+L2Rldi9udWxsIiBmb3IgcmFubGliLgoJKiBjb25maWd1cmUuaW46ICB1cGRhdGUgc29sYXJpczIgY29uZmlnLgoKV2VkIEp1biAxMCAxNjozMToyOSAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIHJhbmRvbS5jOiAgQWRkIGZvciByYW5kb20oKSBhbmQgc3JhbmRvbSgpLgoJKiBmdW5jdGlvbnMuZGVmOiAgQWRkIHJhbmRvbQoKVHVlIEp1biAgOSAxNzoyNzoxOCAxOTkyICBGcmVkIEZpc2ggIChmbmZAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy97bWgtbmNyMzAwMCwgbWgtc3lzdjR9OiAgQWRkIGRlZmluaXRpb24gZm9yIElOU1RBTEwKCXVzaW5nIC91c3IvdWNiL2luc3RhbGwuCgpNb24gSnVuICAxIDEzOjIwOjE3IDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIHN0cmVycm9yLmM6ICBLbHVkZ2UgdG8gZ3VhcmQgYWdhaW5zdCBhIGNvbmZsaWN0IHdpdGgKCXBvc3NpYmxlIGRlY2xhcmF0aW9uIG9mIHN5c19lcnJsaXN0IGluIGVycm5vLmguCgpTdW4gTWF5IDMxIDE1OjA3OjQ3IDE5OTIgIE1hcmsgRWljaGluICAoZWljaGluIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4sIGNvbmZpZy9taC1zb2xhcmlzOiBhZGQgc29sYXJpczIgY29uZmlnIHN1cHBvcnQuCgpGcmkgTWF5IDI5IDE3OjIzOjIzIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIHNpZ3NldG1hc2suYzogICNpZmRlZiBvdXQgc2lnc2V0bWFzayBpZiBTSUdfU0VUTUFTSwoJaXMgbm90IGRlZmluZWQgKHNob3VsZCBiZSBkZWZpbmVkIGluIHNpZ25hbC5oLCBzYXlzIFBvc2l4LikuCgpNb24gTWF5IDE4IDE3OjM1OjA0IDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogZ2V0b3B0LmM6IG1lcmdlZCBjaGFuZ2VzIGZyb20gbWFrZS0zLjYyLjExLgoKRnJpIE1heSAgOCAxNDo1MzowNyAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jOiBtZXJnZWQgY2hhbmdlcyBmcm9tIGJpc29uLTEuMTguCgpUdWUgTWF5ICA1IDExOjUxOjQwIDE5OTIgIFBlciBCb3RobmVyICAoYm90aG5lckBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgRG9uJ3QgaGF2ZSAkKEVYVFJBX09GSUxFUykgZGVwZW5kIG9uIGNvbmZpZy5oLAoJc2luY2UgdGhhdCBpbnRyb2R1Y2VzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4KCSgkKEVYVFJBX09GSUxFUykgYXJlIHVzZWQgdG8gYnVpbGQgY29uZmlnLmguKQoKCSogc3RydG91bC5jOiAgRml4ZXMgdG8gaGFuZGxlIG5vbi1kZWNpbWFsIGJhc2VzIGJldHRlci4KCldlZCBBcHIgMjIgMDk6Mjc6NTEgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtbmNyMzAwMDogIFJlcGxhY2UgTUlOVVNfRyB3aXRoIENGTEFHUy4KCSogTWFrZWZpbGUuZG9zOiAgRmluaXNoIE1JTlVTX0cgZXJhZGljYXRpb24uCgkqIE1ha2VmaWxlLmluIChDRklMRVMpOiAgQWRkIHN0cnNpZ25hbC5jLgoJKiBNYWtlZmlsZS5pbiAoUkVRVUlSRURfT0ZJTEVTKTogIEFkZCBzdHJlcnJvci5vIHN0cnNpZ25hbC5vCgkqIE1ha2VmaWxlLmluIChuZWVkZWQtbGlzdCk6ICBTcGxpdCBjcmVhdGlvbiBvZiBlcnJvcnMgZmlsZSB0bwoJc2VwYXJhdGUgbWFrZSB0YXJnZXQuCgkqIE1ha2VmaWxlLmluIChjb25maWcuaCwgbmVlZGVkMi5hd2ssIGVycm9ycyk6ICBOZXcgdGFyZ2V0cy4KCSogTWFrZWZpbGUuaW4gKGNsZWFuKTogIFNwbGl0IHRvIG11bHRpcGxlIGxpbmVzLCBhZGQgbmVlZGVkMi5hd2sKCWFuZCBjb25maWcuaC4KCSogZHVtbXkuYyAoREVGRlVOQywgREVGVkFSKTogIEFkZCBkZWZpbmVzIGFuZCB1bmRlZnMuCgkqIGZ1bmN0aW9ucy5kZWYgKHN0cmVycm9yKTogIFJlbW92ZSBmcm9tIG9wdGlvbmFsIGxpc3QuCgkqIGZ1bmN0aW9ucy5kZWYgKHN5c19uZXJyLCBzeXNfZXJybGlzdCwgc3lzX3NpZ2xpc3QpOiAgREVGVkFSJ3MKCSogZnVuY3Rpb25zLmRlZiAoc3RyZXJyb3IsIHBzaWduYWwpOiAgREVGRlVOQydzCgkqIHN0cmVycm9yLmM6ICBSZXdyaXRlIGZyb20gc2NyYXRjaCB0byB1c2Ugc3lzX2Vycmxpc3Qgb25seSBpZgoJYXZhaWxhYmxlLCBhZGQgZXJybm9fbWF4KCksIGFkZCBzdHJlcnJubygpLCBhZGQgc3RydG9lcnJubygpLAoJYWRkIHRlc3QgZHJpdmVyLgoJKiBzdHJzaWduYWwuYzogIE5ldyBmaWxlLCBzaWduYWwgZXF1aXZhbGVudCB0byBzdHJlcnJvci5jLgoJVXNlcyBzeXNfc2lnbGlzdCBpZiBhdmFpbGFibGUsIGRlZmluZXMgc2lnbm9fbWF4KCksIHN0cnNpZ25hbCgpLAoJc3Ryc2lnbm8oKSwgc3RydG9zaWdubygpLCBwc2lnbmFsKCksIGFuZCB0ZXN0IGRyaXZlci4KCk1vbiBBcHIgMjAgMjA6NDk6MzIgMTk5MiAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogZG8gbm90IHByaW50IHJlY3Vyc2lvbiBsaW5lLgoKCSogTWFrZWZpbGUuaW46IGFsbG93IENGTEFHUyB0byBiZSBwYXNzZWQgaW4gZnJvbSBjb21tYW5kIGxpbmUuCgkgIFJlbW92ZWQgTUlOVVNfRy4gIERlZmF1bHQgQ0ZMQUdTIHRvIC1nLgoKTW9uIEFwciAyMCAxMjo1Nzo0NiAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAcnRsLmN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtYWl4OiAgTmV3LiAgRVhUUkFfT0ZJTEVTIGxpc3RzIGNvcHlzaWduLm8sCglzbyBsaWJnKysgdXNlcnMgZG9uJ3QgaGF2ZSB0byBiZSBpbmNvbnZlbmllbmNlZCBieSBhCglsaWJjLmEgYnVnIChsaWJjLmEgbmVlZHMgY29weXNpZ24sIGJ1dCBkb2Vzbid0IGRlZmluZSBpdCEpLgoJKiBjb25maWd1cmUuaW46ICBVc2UgY29uZmlnL21oLWFpeC4KCSogc3RydG91bC5jOiAgSGFuZGxlICctJyBhcyByZXF1aXJlZCBieSBBTlNJLgoJQ2xlYW4gdXAgcmFkaXggaGFuZGxpbmcuCgkqIHN0cnN0ci5jOiAgRml4IGJ1Z2d5IGFsZ29yaXRobS4KCSogTWFrZWZpbGUuaW46ICBDaGFuZ2Ugc28gdGhhdCAke0VYVFJBX09GSUxFU30gaXMKCWFwcGVuZGVkIHRvIG5lZWRlZC1saXN0ICh3aGljaCBpcyB1c2VkIGJ5IGxpYmcrKykuCgpGcmkgQXByIDEwIDIyOjUxOjQxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiAgUmVjb2duaXplIG5ldyBuY3IzMDAwIGNvbmZpZy4KCSogY29uZmlnL21oLW5jcjMwMDA6ICBOZXcgY29uZmlnIGZpbGUuCgpXZWQgQXByICAxIDIzOjMxOjQzIDE5OTIgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogYXJndi5jLCBkdW1teS5jOiAgTGludC4KClR1ZSBNYXIgMzEgMTg6NDY6NDQgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtc3lzdjQ6ICBOZXcgY29uZmlnIGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAoaG9zdF9tYWtlZmlsZV9mcmFnKTogIFNldCB0byBjb25maWcvbWgtc3lzdjQgZm9yCglob3N0X29zID09IHN5c3Y0LgoJKiBnZXRwYWdlc2l6ZS5jOiAgRm9yIFNWUjQsIHVzZSBzeXNjb25mKF9TQ19QQUdFU0laRSkgdG8gZ2V0CglwYWdlc2l6ZS4KClN1biBNYXIgMjkgMTI6MjY6NDIgMTk5MiAgSm9obiBHaWxtb3JlICAoZ251IGF0IGN5Z251cy5jb20pCgoJKiBnZXRvcHQuYzogIExpbnQuCgpGcmkgTWFyIDI3IDA4OjMyOjU1IDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogZnVuY3Rpb25zLmRlZiAoYWxsb2NhKTogIEZpeCByZXR1cm4gdHlwZSBhbmQgYXJncyB0byBhdm9pZAoJdHlwZSBjbGFzaCB3aXRoIGdjYydzIGJ1aWx0aW4gYWxsb2NhLgoKVHVlIE1hciAyNCAyMzozMzo0MiAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiwgY29uZmlnL21oLWlyaXg0OiBpcml4NCBzdXBwb3J0LgoKCSogTWFrZWZpbGUuaW4sIGZ1bmN0aW9ucy5kZWYsIGFsbG9jYS5jOiBhZGRlZCBhbGxvY2EuCgpUdWUgTWFyIDI0IDE3OjM0OjQ2IDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmMgKENBTExfRlJFRUZVTik6ICBNYWtlIGl0IGNvbXBpbGUgb24gREVDc3RhdGlvbnMuCgpUaHUgTWFyIDE5IDEzOjU3OjQyIDE5OTIgIEZyZWQgRmlzaCAgKGZuZkBjeWdudXMuY29tKQoKCSogYXJndi5jOiAgRml4IHZhcmlvdXMgZXh0ZXJuYWwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gYmUKCWNvcnJlY3QgaW4gYW4gQU5TSSBjb21waWxhdGlvbiBlbnZpcm9ubWVudC4KClNhdCBNYXIgMTQgMTc6Mjg6MTcgMTk5MiAgRnJlZCBGaXNoICAoZm5mQGN5Z251cy5jb20pCgoJKiBvYnN0YWNrLmM6ICBDaGFuZ2VzIHRvIHN1cHBvcnQgY2FsbGluZyBtbWFsbG9jIGZ1bmN0aW9ucywKCXdoaWNoIHRha2UgYW4gYWRkaXRpb25hbCBhcmd1bWVudCBvdmVyIG1hbGxvYyBmdW5jdGlvbnMuCgpGcmkgTWFyICA2IDIyOjAxOjEwIDE5OTIgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaEBjeWdudXMuY29tKQoKCSogYWRkZWQgY2hlY2sgdGFyZ2V0LgoKVGh1IEZlYiAyNyAyMjoxOTozOSAxOTkyICBQZXIgQm90aG5lciAgKGJvdGhuZXJAY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYzogICNpbmNsdWRlIGFsbG9jYS1jb25mLmggKG5lZWRlZCBieSBBSVgpLgoKV2VkIEZlYiAyNiAxODowNDo0MCAxOTkyICBLLiBSaWNoYXJkIFBpeGxleSAgKHJpY2hAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW46IHJlbW92ZWQgdHJhY2VzIG9mIG5hbWVzdWJkaXIsCgkgIC1zdWJkaXJzLCAkKHN1YmRpciksICQodW5zdWJkaXIpLCBzb21lIHJjcyB0cmlnZ2Vycy4gIEZvcmNlZAoJICBjb3B5cmlnaHRzIHRvICc5MiwgY2hhbmdlZCBzb21lIGZyb20gQ3lnbnVzIHRvIEZTRi4KClNhdCBGZWIgMjIgMDE6MDk6MjEgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGFyZ3YuYzogIENoZWNrIGluIEZyZWQncyB2ZXJzaW9uIHdoaWNoIGZpeGVzIHByb2JsZW1zIHdpdGgKCWFsbG9jYSgpLgoKRnJpIEZlYiAgNyAyMTo0NjowOCAxOTkyICBTdHUgR3Jvc3NtYW4gIChncm9zc21hbiBhdCBjeWdudXMuY29tKQoKCSogbWFrZWZpbGUuZG9zOiAgUmVtb3ZlIE5VTCB0byBrZWVwIHBhdGNoIGZyb20gZmFpbGluZy4KClRodSBKYW4gMzAgMjI6NDg6NDEgMTk5MiAgU3R1IEdyb3NzbWFuICAoZ3Jvc3NtYW4gYXQgY3lnbnVzLmNvbSkKCgkqIGdldG9wdC5jIChfZ2V0b3B0X2ludGVybmFsKTogIEZpeCB1c2FnZSBvZiBlbnVtIGhhc19hcmcuCgpNb24gSmFuIDIwIDE4OjUzOjIzIDE5OTIgIFN0dSBHcm9zc21hbiAgKGdyb3NzbWFuIGF0IGN5Z251cy5jb20pCgogCSogZ2V0b3B0LmMsIGdldG9wdDEuYywgLi4vaW5jbHVkZS9nZXRvcHQuaDogIEdldCBsYXRlc3QgdmVyc2lvbnMuCgpTYXQgSmFuIDE4IDE2OjUzOjAxIDE5OTIgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogYXJndi5jOiAgTmV3IGZpbGUgdG8gYnVpbGQgYW5kIGRlc3Ryb3kgc3RhbmRhcmQgYXJndW1lbnQKCXZlY3RvcnMgZnJvbSBhIGNvbW1hbmQgc3RyaW5nLgoKCSogTWFrZWZpbGUuaW46ICBBZGQgYXJndi5jIGFuZCBhcmd2Lm8gdG8gYXBwcm9wcmlhdGUgbWFjcm9zLgoKRnJpIERlYyAyMCAxMjoxMjo1NyAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogIENoYW5nZSBzdnI0IHJlZmVyZW5jZXMgdG8gc3lzdjQuCgoJKiByaW5kZXguYzogIERlY2xhcmUgcmV0dXJuIHR5cGUgb2YgZXh0ZXJuYWxseSB1c2VkIGZ1bmN0aW9uCglzdHJyY2hyKCkuCgpUaHUgRGVjIDE5IDE4OjM1OjAzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBSZW1vdmUgIioqKiIgaW4gbm9ybWFsIG91dHB1dCwgc2luY2UgTWFrZSBwcm9kdWNlcwoJdGhpcyBvbiBlcnJvcnMsIGFuZCBpdCdzIGNvbnZlbmllbnQgdG8gc2VhcmNoIGZvci4KClR1ZSBEZWMgMTcgMjM6MjE6MzAgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBtZW1jbXAuYywgbWVtY3B5LmMsIG1lbW1vdmUuYywgbWVtc2V0LmMsIHN0cmNoci5jLCBzdHJyY2hyLmM6CglOZXcgQU5TSSBmdW5jdGlvbnMuICBUaGUgb2xkIG5vbi1BTlNJIGZ1bmN0aW9ucyAoc3VjaCBhcyBiY29weSkKCXNob3VsZCBiZSBhdm9pZGVkLgoJKiBiY29weS5jOiAgRml4IHRvIGNvcnJlY3RseSBoYW5kbGUgb3ZlcmxhcHBpbmcgcmVnaW9ucy4KCSogaW5kZXguYywgcmluZGV4LmM6ICBSZS13cml0ZSBpbiB0ZXJtcyBvZiBzdHJjaHIoKSBhbmQgc3RycmNocigpLgoJKiBmdW5jdGlvbnMuZGVmOiAgQWRkIHRoZSBuZXcgZnVuY3Rpb25zLgoJKiBmdW5jdGlvbnMuZGVmOiAgQWRkIDR0aCBwYXJhbWV0ZXIgdG8gREVGIG1hY3JvLAoJYW4gYW5zaWRlY2wuaC1zdHlsZSBwcm90b3R5cGUuCgkqIGR1bW15LmM6ICBVc2UgZXhwYW5kZWQgREVGIG1hY3JvIHRvIGNyZWF0ZSBhIGR1bW15IGZ1bmN0aW9uCgljYWxsLCB3aXRoIGNvcnJlY3QgcGFyYW1ldGVyIHR5cGVzLiAgKFRoaXMgYXZvaWRzIHNvbWUKCWNvbXBsYWludHMgZnJvbSBnY2MgYWJvdXQgcHJlZGVmaW5lZCBidWlsdGlucy4pCgoJTW92ZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiBjb25maWcvbWgtZGVmYXVsdCBpbnRvIE1ha2VmaWxlLmluLgoJVGhpcyBhdm9pZCBkdXBsaWNhdGlvbiwgYW5kIHNpbXBsaWZpZXMgdGhpbmdzIHNsaWdodGx5LgoJKiBNYWtlZmlsZS5pbjogIFR3ZWFrIHNvIHdlIGRvbid0IG5lZWQgY29uZmlnL21oLWRlZmF1bHQuCgkqIFJFQURNRTogIFVwZGF0ZS4KCSogY29uZmlndXJlLmluOiAgTm8gbG9uZ2VyIG5lZWQgY29uZmlnL21oLWRlZmF1bHQuCgkqIGNvbmZpZy9taC1kZWZhdWx0OiAgRGVsZXRlZC4KCSogY29uZmlnL21oLXN5c3Y6ICBSZW1vdmUgbGluZXMgY29waWVkIGZyb20gb2xkIG1oLWRlZmF1bHQuCgpUdWUgRGVjIDE3IDA1OjQ2OjQ2IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZmRtYXRjaC5jIChmZG1hdGNoKTogIERvbid0IGNvbXBhcmUgc3RfcmRldiwgd2hpY2ggaXMgZm9yCgknbWtub2QnIGRldmljZSBudW1iZXJzLgoKTW9uIERlYyAxNiAxMjoyNTozNCAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGZkbWF0Y2guYywgTWFrZWZpbGUuaW46ICBBZGQgbmV3IGZ1bmN0aW9uIHRoYXQgdGFrZXMgdHdvCglvcGVuIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHJldHVybnMgbm9uemVybyBpZiB0aGV5IHJlZmVyIHRvCgl0aGUgc2FtZSBmaWxlLCB6ZXJvIG90aGVyd2lzZS4gICh1c2VkIGluIGdkYikKCldlZCBEZWMgMTEgMTc6NDA6MzkgMTk5MSAgU3RldmUgQ2hhbWJlcmxhaW4gIChzYWMgYXQgcnRsLmN5Z251cy5jb20pCglGcm9tIERKOgoJKiBtc2Rvcy5jOiBzdHViIGZ1bmN0aW9ucyBmb3IgZG9zLgoJKiBtYWtlZmlsZS5kb3MsIGNvbmZpZ2RqLmJhdDogbmV3LgoJKiBnZXRvcHQuYzogRG9uJ3QgaW5jbHVkZSBhbGxvY2EtY29uZi5oIGluIGEgR08zMiB3b3JsZC4KCgpUdWUgRGVjIDEwIDA0OjE0OjQ5IDE5OTEgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaCBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBpbmZvZGlyIGJlbG9uZ3MgaW4gZGF0YWRpci4KCkZyaSBEZWMgIDYgMjM6MjY6NDUgMTk5MSAgSy4gUmljaGFyZCBQaXhsZXkgIChyaWNoIGF0IHJ0bC5jeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46IHJlbW92ZSBzcGFjZXMgZm9sbG93aW5nIGh5cGhlbnMgYmVjYXVzZSBic2QgbWFrZQoJICBjYW4ndCBjb3BlLiAgYWRkZWQgc3RhbmRhcmRzLnRleHQgc3VwcG9ydC4gIGluc3RhbGwgdXNpbmcKCSAgSU5TVEFMTF9EQVRBLgoKCSogY29uZmlndXJlLmluOiByZW1vdmUgY29tbW9udGFyZ2V0cyBhcyBpdCBpcyBubyBsb25nZXIgYQoJICByZWNvZ25pemVkIGhvb2suCgpUaHUgRGVjICA1IDIyOjQ2OjQ2IDE5OTEgIEsuIFJpY2hhcmQgUGl4bGV5ICAocmljaCBhdCBydGwuY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBpZGVzdGRpciBhbmQgZGRlc3RkaXIgZ28gYXdheS4gIEFkZGVkIGNvcHlyaWdodHMKCSAgYW5kIHNoaWZ0IGdwbCB0byB2Mi4gIEFkZGVkIENoYW5nZUxvZyBpZiBpdCBkaWRuJ3QgZXhpc3QuIGRvY2RpcgoJICBhbmQgbWFuZGlyIG5vdyBrZXllZCBvZmYgZGF0YWRpciBieSBkZWZhdWx0LgoKRnJpIE5vdiAyMiAxOToxNToyOSAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiAgZmluZC1uZWVkZWQuYXdrIGRvZXMgbm90IGZpdCBpbiAxNCBjaGFycy4KCgkqIE1ha2VmaWxlLmluOiAgU3VwcHJlc3MgZXJyb3IgY2hlY2tpbmcgd2hlbiBjb21waWxpbmcgdGhlIHRlc3QKCXByb2dyYW0sIGJlY2F1c2UgVWx0cml4IG1ha2Uvc2ggYWJvcnRzIHRoZXJlIGR1ZSB0byBhIGJ1Zy4KCkZyaSBOb3YgMjIgMTI6MjM6MTcgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbjogIFJlLWRpZCBob3cgRVhUUkFfT0ZJTEVTIGlzIHVzZWQgdG8gYmUgbW9yZSB1c2VmdWwuCgkqIFJFQURNRTogIEV4cGxhaW5lZCBob3cgdGhlIGF1dG8tY29uZmlndXJhdGlvbiB3b3JrcywKCWFuZCBob3cgdG8gYWRkIG5ldyBmaWxlcyBhbmQvb3IgY29uZmlndXJhdGlvbnMuCgpGcmkgTm92IDIyIDA5OjQ1OjIzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogc3RydG91bC5jOiAgQXZvaWQgZGVmaW5pbmcgVUxPTkdfTUFYIGlmIGFscmVhZHkgZGVmaW5lZDsKCWNhc3QgYSBjb25zdCBjaGFyICogdG8gY2hhciAqIGZvciBwZWRhbnRzLgoKCSogZ2V0b3B0LmM6ICBPbmx5IGRlZmluZSAiY29uc3QiIGFmdGVyIGxvY2FsIGluY2x1ZGUgZmlsZXMgZ2V0IHRvLAoJYW5kIG9ubHkgaWYgdGhleSBoYXZlbid0IGRlZmluZWQgaXQuCgpUaHUgTm92IDIxIDE2OjU4OjUzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogZ2V0Y3dkLmMgKHJlbW92ZSBnZXR3ZC5jKTogR05VIGNvZGUgc2hvdWxkIGNhbGwgZ2V0Y3dkKCkuICBXZQoJZW11bGF0ZSBpdCB3aXRoIGdldHdkKCkgaWYgYXZhaWxhYmxlLiAgVGhpcyBhdm9pZHMgY2FsbGVycyBoYXZpbmcKCXRvIGZpbmQgYSBNQVhQQVRITEVOIG9yIFBBVEhfTUFYIHZhbHVlIGZyb20gc29tZXdoZXJlLgoJKiBNYWtlZmlsZS5pbiwgZnVuY3Rpb25zLmRlZjogIGdldHdkLT5nZXRjd2QuCgkqIGNvbmZpZ3VyZS5pbjogIFVzZSBnZW5lcmljIGNhc2UgZm9yIGV2ZXJ5IHN5c3RlbS4KCSogY29uZmlnL21oLXtkZWx0YTg4LG1hY2gscnM2MDAwLHN2cjR9OiAgUmVtb3ZlLgoJKiBjb25maWcvbWgtc3lzdjogIFVzZSBkZWZhdWx0IGhhbmRsaW5nLCBqdXN0IGFkZCAtRFVTRy4KClRodSBOb3YgMTQgMTA6NTg6MDUgMTk5MSAgUGVyIEJvdGhuZXIgIChib3RobmVyIGF0IGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiwgY29uZmlnL21oLWRlZmF1bHQ6IFJlLWRvIG1ha2UgbWFnaWMKCXNvIHRoYXQgZm9yIHRoZSBkZWZhdWx0ICgiYXV0b21hdGljIikgbW9kZSB3ZSBvbmx5Cgljb21waWxlIHRoZSBmaWxlcyB3ZSBhY3R1YWxseSBuZWVkLiAgRG8gdGhpcyB1c2luZwoJYSByZWN1cnNpdmUgbWFrZTogIFRoZSB0b3AtbGV2ZWwgZ2VuZXJhdGVzIHRoZSBsaXN0CglvZiBuZWVkZWQgZmlsZXMgKGxvb3NlbHksIHRoZSBvbmVzIG1pc3NpbmcgaW4gbGliYyksCglhbmQgdGhlbiBwYXNzZXMgdGhhdCBsaXN0IHRvIHRoZSByZWN1cnNpdmUgbWFrZS4KCSogY29uZmlnL21oLW1hY2g6ICBSZW1vdmUgb2Jzb2xldGUgU1RSRVJST1Ite0MsT30gbWFjcm9zLgoKVHVlIE5vdiAxMiAxOToxMDo1NyAxOTkxICBKb2huIEdpbG1vcmUgIChnbnUgYXQgY3lnbnVzLmNvbSkKCglSUy82MDAwIGhvc3Qgc3VwcG9ydCAoZ3J1bWJsZSkuCgoJKiBjb25maWd1cmUuaW46ICBCdWlsZCBhbGxvY2EtY29uZi5oIGZpbGUgZnJvbSBhbGxvY2Etbm9ybS5oCgkoZXZlcnl0aGluZyBlbHNlKSBvciBhbGxvY2EtYm90Y2guaCAocnMvNjAwMCkuCgkqIE1ha2VmaWxlLmluOiAgSW5jbHVkZSAuIG9uIHRoZSBpbmNsdWRlIHBhdGguCgkqIGdldG9wdC5jOiAgVXNlIGFsbG9jYS1jb25mLmguCgkqIGFsbG9jYS1ub3JtLmg6ICBIb3cgdG8gZGVjbGFyZSBhbGxvY2Egb24gcmVhc29uYWJsZSBtYWNoaW5lcy4KCSogYWxsb2NhLWJvdGNoLmg6IEhvdyB0byBkZWNsYXJlIGFsbG9jYSBvbiBicmFpbmRlYWQgbWFjaGluZXMuCgpUdWUgTm92IDEyIDA5OjIxOjQ4IDE5OTEgIEZyZWQgRmlzaCAgKGZuZiBhdCBjeWdudXMuY29tKQoKCSogY29uY2F0LmMgOiAgTmV3IGZpbGUsIGxpa2UgY29uY2F0KCkgaW4gZ2RiIGJ1dCBjYW4gdGFrZSBhCgl2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzIHJhdGhlciB0aGFuIGZpeGVkIGF0IDMgYXJncy4gIEZvcgoJbm93LCBjbGllbnQgYXBwbGljYXRpb25zIG11c3Qgc3VwcGx5IGFuIHhtYWxsb2MoKSwgd2hpY2ggaXMgYQoJZnJvbnQgZW5kIGZ1bmN0aW9uIHRvIG1hbGxvYygpIHRoYXQgZGVhbHMgd2l0aCBvdXQtb2YtbWVtb3J5Cgljb25kaXRpb25zLgoKCSogTWFrZWZpbGUuaW46ICBBZGQgY29uY2F0LmMgYW5kIGNvbmNhdC5vIHRvIGFwcHJvcHJpYXRlIG1hY3Jvcy4KClNhdCBOb3YgIDkgMTM6Mjk6NTkgMTk5MSAgRnJlZCBGaXNoICAoZm5mIGF0IGN5Z251cy5jb20pCgoJKiBjb25maWcvbWgtc3ZyNDogIEFkZCBzaWdzZXRtYXNrIHRvIGxpc3Qgb2YgcmVxdWlyZWQgZnVuY3Rpb25zLgoKU3VuIE5vdiAgMyAxMTo1Nzo1NiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIHZzcHJpbnRmLmM6ICBOZXcgZmlsZS4KCSogZnVuY3Rpb25zLmRlZiwgTWFrZWZpbGUuaW46ICBBZGQgdnNwcmludGYuCgpTdW4gT2N0IDI3IDE2OjMxOjIyIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluLCBjb25maWcvbWgtcnM2MDAwOiAgQWRkIHJzLzYwMDAgaG9zdCBzdXBwb3J0LgoJKiBNYWtlZmlsZS5pbjogIENvbXBpbGUgd2l0aCBkZWJ1ZyBpbmZvLgoKRnJpIE9jdCAyNSAxNzowMToxMiAxOTkxICBQZXIgQm90aG5lciAgKGJvdGhuZXIgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUuaW4sIGFuZCBuZXcgZmlsZXM6IGR1bW15LmMsIGZ1bmN0aW9ucy5kZWYsCgljb25maWcvbWYtZGVmYXVsdDogIEFkZGVkIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1vZGUsCgl3aGljaCBpbmNsdWRlcyBpbnRvIGxpYmliZXJ0eS5hIGZ1bmN0aW9ucyB0aGF0IGFyZSAibWlzc2luZyIgaW4gbGliYy4KCSogc3RyZHVwLmMsIHZwcmludGYuYywgdmZwcmludGYuYzogTmV3IGZpbGVzLgoKVGh1IE9jdCAyNCAwMjoyOToyNiAxOTkxICBGcmVkIEZpc2ggIChmbmYgYXQgY3lnbnVzLmNvbSkKCgkqIGNvbmZpZy9obWFrZS1zdnI0OiBOZXcgZmlsZS4KCgkqIGNvbmZpZy9obWFrZS1zeXN2OiBBZGQgSE9TVF9DRklMRVMgYW5kIEhPU1RfT0ZJTEVTLgoKCSogYmFzZW5hbWUuYywgYmNtcC5jLCBiY29weS5jLCBiemVyby5jLCBnZXRwYWdlc2l6ZS5jIGdldHdkLmMsCglpbmRleC5jLCBpbnNxdWUuYywgcmluZGV4LmMsIHNwYWNlcy5jLCBzdHJzdHIuYywgdmZvcmsuYzogTmV3CglmaWxlcyBjb250YWluaW5nIGVpdGhlciBwb3J0YWJsZSBDIHZlcnNpb25zIG9yIGVtdWxhdGlvbnMgdXNpbmcKCW5hdGl2ZSBsaWJyYXJ5IGNhbGxzLgoKCSogc3RyZXJyb3IuYzogIEFkZCBjb3B5cmlnaHQsIGludGVybmFsIGRvY3VtZW50YXRpb24sIGV0Yy4KCgkqIHN0cnRvbC5jOiAgUmVwbGFjZSBoYXJkd2lyZWQgaGV4IGNvbnN0YW50cyB3aXRoIHNvbWUgbW9yZQoJcG9ydGFibGUgbWFjcm9zLiAgUmVtb3ZlIGlsbGVnYWwgKGFjY29yZGluZyB0byBnY2MpIGNhc3QuCgoJKiBzdHJ0b3VsLmM6IFJlcGxhY2UgaGFyZHdpcmVkIGhleCBjb25zdGFudCB3aXRoIG1vcmUgcG9ydGFibGUKCW1hY3JvLgoKCSogTWFrZWZpbGUuaW46IE1vdmUgVEFSR0VUTElCIGFuZCBDRkxBR1Mgd2hlcmUgbWFrZWZpbGUgZnJhZ21lbnRzCgljYW4gb3ZlcnJpZGUgdGhlbS4gIEFkZCBuZXcgc291cmNlIGFuZCBvYmplY3QgZmlsZSBuYW1lcyB0byBDRklMRVMKCWFuZCBPRklMRVMgcmVzcGVjdGl2ZWx5LgoKCSogY29uZmlndXJlLmluOiBBZGQgc3VwcG9ydCBmb3IgU1ZSNCBtYWtlZmlsZSBmcmFnbWVudHMuCgpUdWUgT2N0IDIyIDE5OjAwOjIzIDE5OTEgIFN0ZXZlIENoYW1iZXJsYWluICAoc3RldmUgYXQgY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluOiBNb3ZlIFJBTkxJQiwgQVIgYW5kIEFSX0ZMQUdTIHRvIHdoZXJlIHRoZXkgY2FuIGJlCglvdmVyLXJpZGRlbiBieSBjb25maWcvaG1ha2UtKgoJKiBjb25maWd1cmUuaW46IGFkZGVkIG04OGtjdnMgdG8gc3lzdiBsaXN0CgpGcmkgT2N0ICA0IDAxOjI5OjA4IDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW46ICBNb3N0IGhvc3RzIG5lZWQgc3RyZXJyb3IsIGJ1dCBvbmUgb3IgdHdvIGRvbid0LAoJYW5kIHRoZXkgb3ZlcnJpZGUgdGhlc2UgZGVmaW5pdGlvbnMgaW4gdGhlIGhvc3QtZGVwZW5kZW50IG1ha2VmaWxlCglmcmFnbWVudC4KCSogY29uZmlnL2htYWtlLW1hY2g6ICBUaGUgb2RkIG1hbiBvdXQgb24gc3RyZXJyb3IgLS0gaXQncyBzdXBwbGllZC4KCSogc3RyZXJyb3IuYzogIE5ldyBmaWxlLgoKCSogc3RydG9sLmMsIHN0cnRvdWwuYzogIEFkZCBzdHJ0b2wgdG8gbGliaWJlcnR5LCBzaW5jZSBNYWNoIGxhY2tzCglpdCBhbmQgYmZkIHVzZXMgaXQuCgkqIGNvbmZpZ3VyZS5pbiwgTWFrZWZpbGUuaW4sIGNvbmZpZy9obWFrZS1tYWNoOiAgT25seSBjb25maWd1cmUKCXN0cnRvbCAmIHN0cm90b3VsIGluIG9uIE1hY2guCgpUdWUgU2VwICAzIDA2OjM2OjIzIDE5OTEgIEpvaG4gR2lsbW9yZSAgKGdudSBhdCBjeWdpbnQuY3lnbnVzLmNvbSkKCgkqIG9ic3RhY2suYzogIE1lcmdlIHdpdGggbGF0ZXN0IEZTRiB2ZXJzaW9uLgoKDApMb2NhbCBWYXJpYWJsZXM6CnZlcnNpb24tY29udHJvbDogbmV2ZXIKRW5kOgo=