LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgTWFyICAyIDE3OjQ0OjMyIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdSkKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglSZW1vdmVkIHN5c3JlcyBiaXRtYXAgY29kZTsgeW91IG5lZWQgbGliWHBtIHRvIGNvbXBpbGUgbm93LgoJSW1wbGVtZW50ZWQgTG9hZEljb24oKSBmb3IgT0VNIGljb25zLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vaWNfKl0KCUFkZGVkIE9FTSBpY29ucyBpbiBYUE0gZm9ybWF0LgoKCSogW29iamVjdHMvZGliLmNdCglCdWcgZml4IGluIERyYXdJY29uKCkuCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglSZW1vdmVkOyBhbGwgYml0bWFwcyBhcmUgc3RvcmVkIGluIFhQTSBmb3JtYXQgbm93LgoKVHVlIEZlYiAyOCAxODo1NDoyOCAxOTk1ICBUb21pIExlcHBpa2FuZ2FzICAodG9taWxlcHBAcGFqdS5vdWx1LmZpKQoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVNtYWxsIHBhdGNoIHRvIGZpeCBlZGl0LWNvbnRyb2wgd2hlbiBpdCdzIGNyZWF0ZWQgd2l0aCB0ZXh0LgoKU3VuIEZlYiAyNiAyMDoyMjoxNSAxOTk1ICBNaWNoYWVsIFZla3NsZXIgIChlMTY3ODIyM0B0b2NobmFwYzIudGVjaG5pb24uYWMuaWwpCgoJKiBbdG9vbHMvbWFrZV9kZWJ1Z10KCVRoZSBjcmVhdGVkIG1hY3JvcyB3b24ndCBoYXZlIHNpZGUgZWZmZWN0cyBhbnltb3JlIHdoZW4gdXNlZCBpbgoJYW4gImlmLWVsc2UiIHN0cnVjdHVyZS4gTm8gbW9yZSB3YXJuaW5ncyBmcm9tIHRoZSBjb21waWxlciB3aGVuCgljb21waWxlZCB3aXRob3V0IGRlZmluaW5nIERFQlVHX1JVTlRJTUUuCiAKU3VuIEZlYiAyNiAyMDoyMDo0OSAxOTk1ICBNaWNoYWVsIFBhdHJhIDxtaWNreUBtYXJpZS5waHlzaWsuVFUtQmVybGluLkRFPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEZWxldGVTdHJpbmcoKTogRml4ZWQKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUdldE1lbW9yeVJlZmVyZW5jZSgpOiBXaGVuIHNwZWNpYWwgc2VnbWVudHMgYXJlIHJlZmVyZW5jZWQgYnkKCXBzZXVkby1mdW5jdGlvbnMgbGlrZSBfXzAwNDBILCBhIHJlZmVyZW5jZSB0byBhICJub3JtYWwiIHNlZ21lbnQKCXdpbGwgYmUgcmV0dXJuZWQgcHJldmVudGluZyB0aGUgcHJvZ3JhbSBmcm9tIGNyYXNoaW5nIGFzIHNvb24KCWFzIHRoZSByZWZlcmVuY2VkIHNlZ21lbnQgaXMgYWN0dWFsbHkgYWNjZXNzZWQuCgpTdW4gRmViIDI2IDE1OjU1OjE0IE1FVCAxOTk1ICBNYXJ0aW4gdm9uIExvZXdpcyAobG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlKQoKCSogW0NvbmZpZ3VyZV0KCUFzayBmb3IgT0xFIHN0dWJzIGFuZCBtYWxsb2MgZGVidWdnaW5nCgoJKiBbSW1ha2VmaWxlXQoJbGluayB3aXRoIGxpYm1jaGVjay5hIGlmIG5lY2Vzc2FyeQoKCSogW2lmMTYzMi9yZWxheS5jXVtpbmNsdWRlL2RsbC5oXVtpZjE2MzIvSW1ha2VmaWxlXQoJQWRkIE9MRSBzdHVicywgaW5jcmVhc2UgbnVtYmVyIG9mIGJ1aWx0aW5zCglkbGxfbmFtZV90YWJsZV9lbnRyeV9zOiBuZXcgZmllbGQgZGxsX2lzX3VzZWQKCgkqIFtsb2FkZXIvbGlicmFyeS5jXQoJR2V0TW9kdWxlSGFuZGxlLE1vZHVsZU5leHQ6IENoZWNrIGRsbF9pc191c2VkCgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglCYXJrIG9uIHVuc3VwcG9ydGVkIE5FX1JBRERSX0xPV0JZVEUgZmxhZyAod2hhdCBpcyBpdCBzdXBwb3NlZAoJdG8gbWVhbiwgYW55d2F5PykKCgkqIFttaXNjL29sZWNsaS5jXVttaXNjL29sZXN2ci5jXQoJTmV3IGZpbGVzLiBBZGQgdG8gbWlzYy9JbWFrZWZpbGUKCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX0dldFVuaXhGaWxlTmFtZTogbWFrZSBhIGNvcHkgb2YgdGhlIGlucHV0IHBhcmFtZXRlciB0byAKCXByZXZlbnQgb3ZlcndyaXRpbmcKCgkqIFttaXNjL21haW4uY10KCU1BSU5fUGFyc2VETExPcHRpb25zOiBuZXcgZnVuY3Rpb24KCU1BSU5fUGFyc2VPcHRpb25zOiB0cmVhdCAtZGxsIGNvbW1hbmQgbGluZSBmbGFnCgltYWluOiBhZGQgc3VwcG9ydCBmb3IgbWFsbG9jIGRlYnVnZ2luZwoKRnJpIEZlYiAyNCAxMjo0MzoyNyAxOTk1ICBFcmlrIFN2ZW5kc2VuICA8ejNlc3ZAa21kLWFjLmRrPgoKCSogW2xvYWRlci9zaWduYWwuY10KCVNtYWxsIHBhdGNoIGZvciBwZW9wbGUgdXNpbmcgRnJlZUJTRC0yLjEuMC4KCkZyaSBGZWIgMTcgMjI6NDk6MTggMTk5NSAgTWlndWVsIGRlIEljYXphIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgoJKiBbdG9vbGtpdC9zdXAuY10KCUFkZGVkIHJldHVybiB2YWx1ZXMgdG8gdGhlIENhbGwqIHJvdXRpbmVzCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglMb2FkIHRoZSByZXNvdXJjZSBmaWxlIHByb3Blcmx5IGZvciBXaW5lTGliIGFwcGxpY2F0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEZlYiAxNiAxODo1NzozMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHUpCgoJKiBbaWYxNjMyL2NhbGwuU10KCU9ubHkgc2F2ZSB0aGUgbG93ZXIgMTYtYml0cyBvZiBTUCBhbmQgQlAuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglXaGVuIGNhbGxpbmcgdG8gMTYtYml0IGNvZGUsIHJlc3RvcmUgRFMgZnJvbSBpdHMgcHJldmlvdXMgdmFsdWUgb24KCWVudHJ5IHRvIHRoZSAzMi1iaXQgY29kZSwgaW5zdGVhZCBvZiBmcm9tIHRoZSBjb2RlIHNlZ21lbnQgb3duZXIuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCVVzZSBhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIDE2LWJpdCBzdGFjayBmcmFtZSBsYXlvdXQKCWluc3RlYWQgb2YgaGFyZC1jb2RlZCBvZmZzZXRzLgoJCgkqIFtyYy9JbWFrZWZpbGVdCglVc2UgeS50YWIuYyBmb3IgYmlzb24gb3V0cHV0IGZpbGUgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB5YWNjLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglTbWFsbCBvcHRpbWl6YXRpb24gZm9yIGNhbGxzIHRvIDMyLWJpdCBjb2RlLgoKU3VuIEZlYiAxMiAwMzoxOTo0NyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBidWcgKGluZmxpY3RlZCBieSBwcmV2aW91cyBjaGFuZ2UpIC0gU0VHViBvbiBaTUFHSUMgZmlsZSBmb3JtYXQuCgpTdW4gRmViIDExIDIwOjAwOjAwIDE5OTUgIEf2cmFuIFRoeW5pICAoZ29yYW5Abm9ycnNrZW4uYmlsZGJhc2VuLnNlKQoKCSogW2RlYnVnZ2VyL2RiZy55XQoJUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bS10YWJsZSBsb2FkaW5nIHdoZW4gc3RvcHBlZCBpbiAxNi1iaXQgbW9kZS4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAgQWRkZWQgZHluYW1pYyBhbGxvY3Rpb24gb2Ygc2VsZWN0b3JzLgogICAgICAgIEZpeGVkIHNvbWUgcHJvYmxlbXMgd2l0aCBsYXJnZSBwcm9ncmFtcyBTSUdTRUdWLWluZyB3aGlsZQogICAgICAgIHJ1bm5pbmcgb3V0IG9mIHNlbGVjdG9ycy4KCgkqIFtpbmNsdWRlL3NlZ21lbS5oXSBbbG9hZGVyL3NlbGVjdG9yLmNdIFtpZjE2MzIvY2FsbGJhY2suY10gCiAgICAgICAgICBbbWVtb3J5L2dsb2JhbC5jXSBbbWVtb3J5L2hlYXAuY10gW21lbW9yeS9saW5lYXIuY10KCVVzZSBfX0FIU0hJRlQgYW5kIF9fQUhJTkNSIGluc3RlYWQgb2YgMyBhbmQgOC4KCk1vbiBGZWIgIDYgMTg6MDc6MzggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEJldHRlciByZWxhdGl2ZSBwYXRoIGhhbmRsaW5nIHdoZW4gY29udmVydGluZyBmaWxlbmFtZXMgYmV0d2VlbgogICAgICAgIGRvcyBhbmQgdW5peCwgYWxsb3dpbmcgJy4nIHRvIGJlIHVzZWQgaW4gdGhlIFdpbmRvd3MgcGF0aC4KICAgICAgICBTdGFydHVwIHdvcmtpbmcgZGlyIGlzIG5vdyBiYXNlZCBvbiBjdXJyZW50IHdvcmtpbmcgZGlyLgoKU2F0IEZlYiAgNCAyMToyMToxMyAxOTk1ICBNaWNoYWVsIFZla3NsZXIgKHMxNjc4MjIzQHQyLnRlY2huaW9uLmFjLmlsKQoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFt0b29scy9idWlsZC5jXQoJU3F1ZWV6ZWQgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZWZlcmVuY2VzIGludGVybmFsIGRsbCdzIChtb3N0bHkKCSJzdHJ1Y3QgZGxsX3RhYmxlX2VudHJ5X3MiKS4gQ2F1c2VkIDIwJSByZWR1Y3Rpb24gaW4gZXhlY3V0YWJsZQoJY29kZSBzaXplLgoKRnJpIEZlYiAgMyAxODo1MzoxNSAxOTk1ICBNYXJ0aW4gdi4gTG9ld2lzICAobG9ld2lzQG1hcmllKQoKCSogW0ltYWtlZmlsZV0KCW1ha2Ugd2luZS5zeW0gb25seSB3aGVuIG1ha2luZyBlbXVsYXRvcgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogcmVwb3J0IGFzIG5vdCBpbXBsZW1lbnRlZCBmb3IgV0lORUxJQgoKCSogW21pc2Mvd2luc29jay5jXQoJRml4IENPTlZFUlRfSE9TVEVOVCBhbmQgZnJpZW5kcyBmb3IgdXNlIHdpdGggV0lORUxJQgoKCSogW3JjL0ltYWtlZmlsZV1bcmMvcmMueV1bcmMvcGFyc2VyLmNdCglSZW5hbWUgcmMueSB0byBwYXJzZXIueQoJVXNlIGZsZXggYW5kIGJpc29uIG9uIFN1bgoKCSogW3Rvb2xraXQvc3VwLmNdCglDYWxsV2luZG93UHJvYzogZml4IHBhcmFtZXRlciB0eXBlCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ29tbWVudGVkICNpZmRlZiBzcGFyYwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgRmViICAxIDE5OjI3OjU1IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW5wb3MuY10KCUltcGxlbWVudGVkIG1heGltaXplZCB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgaWNvbiBwb3NpdGlvbmluZyBhbmQgQXJyYW5nZUljb25pY1dpbmRvd3MoKS4KCUJ1ZyBmaXhlcyBpbiBTZXRXaW5kb3dQb3MoKS4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBHZXRDb250cm9sQnJ1c2goKS4KCVdpbmRvdyBmcmFtZSBpcyBubyBsb25nZXIgY29udGFpbmVkIGluIHRoZSB1cGRhdGUgcmVnaW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglEZXN0cm95IG93bmVkIHdpbmRvd3MgdXBvbiBEZXN0cm95V2luZG93KCkuCgpTdW4gSmFuIDI5IDE2OjE3OjIyIDE5OTUgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglDaGFuZ2VkIGxpbmUgdGVybWluYXRvciB0byBcclxuIHRvIGJlIGNvbXBhdGlibGUgd2l0aAoJV2luZG93cy4gIEZpeGVkIGJ1ZyBpbiB0ZXh0IHNlbGVjdGlvbi4KClN1biBKYW4gMjkgMTQ6MTA6MjIgMTk5NSAgIEJlcm5kIFNjaG1pZHQgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKICAgICAgICogW21pc2Mvc2hlbGwuY10KICAgICAgIFJld3JvdGUgUmVnQ3JlYXRlS2V5IGFuZCBSZWdPcGVuS2V5LCBzaW5jZSB0aGV5IHdlcmUgY29tcGxldGVseSBicm9rZW4uCiAgICAgICBGaXhlZCBhIGJ1ZyBpbiBSZWdRdWVyeUtleVZhbHVlLiBJbXBsZW1lbnRlZCBSZWdFbnVtS2V5CiAgICAgICBUaGVzZSBmdW5jdGlvbnMgbm93IHdvcmsgc29tZXdoYXQgbW9yZSB0aGUgd2F5IFdpbmRvd3MgcHJvZ3JhbXMgZXhwZWN0CiAgICAgICB0aGVtIHRvIHdvcmsuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMjIgMTg6NTU6MzMgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9kaWIuY10KCUZpeGVkIGljb24gbG9hZGluZyBhbmQgZHJhd2luZywgbm93IHRoYXQgQml0Qmx0KCkgd29ya3MgY29ycmVjdGx5LgoJCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3JlZ2lvbi5jXQoJSW1wbGVtZW50ZWQgZWxsaXB0aWMgcmVnaW9ucyB3aXRoIGEgc2V0IG9mIHJlY3RhbmdsZS4gVGhpcyBncmVhdGx5CglzaW1wbGlmaWVzIHRoZSByZWdpb24gY29kZSBhbmQgc2hvdWxkIGJvb3N0IGNsaXBwaW5nIHBlcmZvcm1hbmNlLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBzZWctZmF1bHQgb24gMjRicHAgZGlzcGxheXMuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIGJ1ZyB3aGVuIHNocmlua2luZyBhIGJpdG1hcCB0byBtb3JlIHRoYW4gaGFsZiBpdHMgc2l6ZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBidWdzIGluIFBhaW50UmduKCkgYW5kIFBvbHlsaW5lKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglGaXhlZCBzb21lIHByb2JsZW1zIHdpdGggd2luZG93IGJhY2tncm91bmQgcGFpbnRpbmcuCgpUaHUgSmFuIDEyIDEyOjIwOjI1IFBTVCAxOTk1IFJvc3MgQmlybyAoYmlyb0B5Z2dkcmFzaWwuY29tKQoKICAgICAgICogW3Rvb2xzL2J1aWxkLmNdCiAgICAgICAqIFt0b29scy9uZXdidWlsZC5jXQogICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgKiBbaW5jbHVkZS93aW5lLmhdCiAgICAgICAqIFtsb2FkZXIvY2FsbC5TXQogICAgICAgKiBbbG9hZGVyL3NlbGVjdG9yLmNdCiAgICAgICAqIFtpbmNsdWRlL3NlZ21lbS5oXQogICAgICAgKiBbbWlzYy9tYWluLmNdCiAgICAgICBDaGFuZ2VkIHNlbGVjdG9yIGNvZGUgYW5kIDE2LzMyIGJpdCB4ZmVyIGNvZGUgc28gdGhhdCB3aW5lCiAgICAgICBubyBsb25nZXIgaGFzIHRvIGJlIGxvYWRlZCBsb3cgaW4gbWVtb3J5LiAgQ2hhbmdlZCB3aW5lCiAgICAgICB0byB3b3JrIHdpdGggRUxGIGJpbmFyeSBmb3JtYXRzIHVuZGVyIExpbnV4LgogICAgICAgClNhdCBTZXAgMTcgMTE6MDg6NDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJTmV3IGluc3RydWN0aW9uIGRpc2Fzc2VtYmxlciAtIGJvcnJvd2VkIGZyb20gTWFjaCBrZXJuZWwuICBIYXMgYQoJQlNEIHN0eWxlIG9mIGxpY2Vuc2UgYXMgb3Bwb3NlZCB0byB0aGUgZ2RiIGNvZGUgd2Ugd2VyZSBwcmV2aW91c2x5Cgl1c2luZyB3aGljaCB3YXMgdW5kZXIgdGhlIEdQTC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEphbiAgOSAxODoyNzoxMSAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbSW1ha2VmaWxlXQoJQ29tcGlsaW5nIHdpdGggLVdhbGwgZmxhZy4KCgkqIFsqLypdCglGaXhlcyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglGaXhlZCBCaXRCbHQoKSBhbmQgdXNlZCB0aGUgc2FtZSBjb2RlIHRvIHJld3JpdGUgUGF0Qmx0KCkgYW5kCglTdHJldGNoQmx0KCkuIFRoZSB0aHJlZSAqQmx0KCkgZnVuY3Rpb25zIHNob3VsZCBub3cgYmUgY29ycmVjdCBpbgoJZXZlcnkgY2FzZSAoZmFtb3VzIGxhc3Qgd29yZHMpLgoKCSogW29iamVjdHMvYnJ1c2guY10gW29iamVjdHMvZGl0aGVyLmNdCglNZXJnZWQgdGhlIHR3byBmaWxlcyBpbnRvIGJydXNoLmMKCgkqIFtvYmplY3RzL2RjLmNdCglGaXhlZCBidWcgd2hlbiB0aGUgV2luZG93cyBwcm9ncmFtcyBmb3JnZXQgdG8gcmUtc2VsZWN0IHRoZQoJb3JpZ2luYWwgYml0bWFwIGluIGEgbWVtb3J5IERDLgoKCSogW29iamVjdHMvZm9udC5jXQoJVHR5IHRvIHVzZSAnZml4ZWQnIGZvbnQgd2hlbiB0aGUgc3lzdGVtIGZvbnQgY2FuJ3QgYmUgZm91bmQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVRlbnRhdGl2ZSBmaXggdG8gbWFrZSBkaWFsb2dzIGxvb2sgYmV0dGVyIHdoZW4gdXNpbmcgZml4ZWQtd2lkdGgKCWZvbnRzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVBhcnRpYWxseSBpbXBsZW1lbnRlZCB0aGUgUFNfSU5TSURFRlJBTUUgcGVuIHN0eWxlLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXggZm9yIHdpbmRvd3MgdGhhdCBoYXZlIHRoZSBXU19FWF9ETEdNT0RBTEZSQU1FIHN0eWxlIGJpdAoJd2l0aG91dCB0aGUgV1NfRExHRlJBTUUgc3R5bGUuCgpUaHUgSmFuICA1IDEzOjM3OjQyIDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglHbG9iYWxDb21wYWN0IHNob3VsZCBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4gdGhlCglsYXJnZXN0IHJ1biBvZiBmcmVlIGJsb2NrcyBpbmNsdWRlcyB0aGUgbGFzdCBibG9jay4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVGlsaW5nIGFuZCBjYXNjYWRpbmcgd2luZG93cyB3aXRob3V0IGFueSBNREkgY2hpbGRyZW4gc2hvdWxkCglubyBsb25nZXIgY3Jhc2ggKGFzc3VtaW5nIG5vLW9wIGlzIHRoZSBjb3JyZWN0IHRoaW5nIHRvIGRvKS4KClN1biBKYW4gIDEgMjM6MzA6MjUgMTk5NSAgRm9ucyBCb3RtYW4gIDxib3RtYW5AcmFiby5ubD4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUdldFRleHRFeHRlbnRQb2ludDogZml4ZWQgZGVidWcgb3V0cHV0LCBzdHIgaXMgY291bnRlZCBzdHJpbmcsIG5vdAogICAgICAgIHplcm8gdGVybWluYXRlZC4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCURMTFJlbGF5OiB3aGVuIGRlYnVnZ2luZ19zdGFjayBnb3Qgc2VndiwgYWRkZWQgdXBwZXIgYm91bmQgZm9yCiAgICAgICAgc3RhY2sgZHVtcC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIERlYyAyNyAxMzozNToxNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbKi9JbWFrZWZpbGVdCglBbGwgb2JqZWN0cyBmaWxlcyBhcmUgbm93IGtlcHQgaW4gdGhlaXIgcmVzcGVjdGl2ZSBkaXJlY3RvcnkuCgoJKiBbUkVBRE1FXQoJUmV3cm90ZSBtb3N0IG9mIGl0LgoKCSogW29iamVjdHMvYml0Ymx0LmNdCglSZXdyb3RlIEJpdEJsdCgpIHRvIGxvb2sgcmlnaHQgaW4gZXZlcnkgY2FzZSwgd2hpbGUgbWluaW1pemluZwoJdGhlIGltcGFjdCBvbiBwZXJmb3JtYW5jZS4gTm90IHJlYWxseSBmaW5pc2hlZCB5ZXQuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGMuY10KCUZpeGVkIGJ1ZyB3aXRoIHBhdHRlcm4gYnJ1c2hlcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlcyBmb3IgbG9naWNhbCBjb29yZGluYXRlcy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglGaXhlZCBHZXRQaXhlbCgpIHRvIHJldHVybiB0aGUgY29ycmVjdCBjb2xvciwgYW5kIG1hZGUgaXQgZmFzdGVyLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBidWcgaW4gQ29tYmluZVJnbigpIHdoZW4gb25lIG9mIHRoZSByZWdpb24gaXMgZW1wdHkuCgpGcmkgRGVjIDIyIDAxOjQyOjU3IE1FVCAxOTk0CQkgIERhZyBBc2hlaW0gKGRhc2hAaWZpLnVpby5ubykKCgkqIFtDb25maWd1cmVdCglEb24ndCBhc3N1bWUgdGhhdCBleHByIGhhbmRsZXMgJz09JywgdXNlICc9JyBpbnN0ZWFkLgoJR2l2ZSBhIChob3BlZnVsbHkgaW5mb3JtYXRpdmUpIG1lc3NhZ2UgaWYgaW1ha2UgZmFpbHMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBEZWMgIDcgMTQ6NTI6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIHByb2JsZW1zIGR1ZSB0byBuZXcgc2Nyb2xsLWJhciBjb2RlLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW9wb3J0cy5jXQoJSGFuZGxlIEkvTyBvcGNvZGVzIHRoYXQgdXNlIGFuIGFic29sdXRlIGFkZHJlc3MuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBUYWJiZWRUZXh0T3V0KCkuCgpTYXQgRGVjICAzIDE4OjUzOjA4IDE5OTQgIEtlbm5ldGggTWFjRG9uYWxkICA8Sy5NYWNEb25hbGRAZWQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJSW1wbGVtZW50ZWQgR2V0TWV0YWZpbGUoKS4KCUZpeGVkIGJ1ZyBpbiBQbGF5TWV0YUZpbGUoKSB3aGVuIHJlYWRpbmcgZGlzYyBiYXNlZCBtZXRhZmlsZSByZWNvcmRzLgoJQWRkZWQgTUVUQV9QT0xZUE9MWUdPTiwgTUVUQV9ERUxFVEVPQkpFQ1QgYW5kIE1FVEFfRU9GIHRvIAoJUGxheU1ldGFGaWxlUmVjb3JkKCkuCgkKV2VkIE5vdiAzMCAwNjozMjoyNSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW0ltYWtlZmlsZV0KCXdpbmUuc3ltOiBSZW1vdmUgZ2NjMl9jb21waWxlZCBhbmQgZnJpZW5kcwoKCSogW2NvbnRyb2xzL2xpc3Rib3guY11baWYxNjMyL3JlbGF5LmNdW2lmMTYzMi9yZWxheS5jXQoJICBbbG9hZGVyL3Jlc291cmNlLmNdW21lbW9yeS9oZWFwLmNdW29iamVjdHMvZGliLmNdW3dpbmRvd3MvZGlhbG9nLmNdCglSZXBsYWNlICNpZmRlZiBERUJVR19YWFggd2l0aCBpZihkZWJ1Z2dpbmdfeHh4KXsKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvTGliTWFpbjogTmV3IGZ1bmN0aW9uCgoJKiBbaWYxNjMyL3JlbGF5LmNdW2luY2x1ZGUvb3B0aW9ucy5oXVttaXNjL21haW4uY10KCSAgW21pc2NlbXUvaW50MWEuY11bbWlzY2VtdS9pbnQyMS5jXVttaXNjZW11L2tlcm5lbC5jXQoJcmVtb3ZlZCBPcHRpb25zLnJlbGF5X2RlYnVnCgoJKiBbaW5jbHVkZS9oZWFwLmhdCglIRUFQX09XTkVSOiBVc2UgZHMgaW5zdGVhZCBvZiBjczppcAoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTG9hZE5FSW1hZ2U6IFJlbWVtYmVyIGN1cnJlbnQgZXhlLCBoYW5kbGUgbm9kYXRhIGRsbHMKCUluaXRORURMTDogaGFuZGxlIG5vZGF0YSBkbGxzLCBjYWxsIENhbGxUb0xpYk1haW4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUNyZWF0ZVNlbGVjdG9yczogSW5pdGlhbGl6ZSBhdXRvX2RhdGFfc2VsIHdpdGggMAoKCSogW21lbW9yeS9oZWFwLmNdCglIRUFQX0NoZWNrSGVhcDogQ2hlY2sgcHJldgoJSEVBUF9DaGVja0xvY2FsSGVhcHM6IG5ldyBmdW5jdGlvbgoKCSogW21pc2MvcHJvZmlsZV0KCVJlbWVtYmVyIGFuZCBkdW1wIG9ubHkgY2hhbmdlZCBwcm9maWxlcwoKCSogW3Rvb2xzL21ha2VkZWJ1Z10KCUludHJvZHVjZSBkZWJ1Z2dpbmdfeHh4IGZsYWdzCgpTdW4gTm92IDI3IDIzOjEzOjIyIE1FVCAxOTk0CTxlcmlrQHhzNGFsbC5ubD4KCgkqIFtjbGlwYm9hcmQuaCBjb2xvci5oIGRjLmggZG9zX2ZzLmggZXZlbnQuaCBmb250LmggZ3JhcGhpY3MuaAoJaWYxNjMyLmgga2VybmVsLmggbGlicmFyeS5oIG1pc2NlbXUuaCBuZV9pbWFnZS5oIG5vbmNsaWVudC5oIAoJcGVfaW1hZ2UuaCBzZWxlY3RvcnMuaCB3aW50eXBlcy5oXQoJQWRkZWQuCgoJKiBbKi8qXQoJLSBDb21tZW50ZWQgYWxsICdzdGF0aWMgY2hhciBjb3B5cmlnaHQgc3RhdGVtZW50cycsIHNlZSBtaXNjL21haW4uYwoJLSBtb3ZlZCBwcm90b3R5cGVzIHRvIGhlYWRlcnMgZmlsZXMsIGZpeGVkIHdyb25nIHByb3RvdHlwZXMuCgktICpwbGVhc2UqIGFkZCBhIGhlYWRlciBmaWxlIGZvciBlYWNoIC5jIGlmIHlvdSBuZWVkIHRvIGV4cG9ydAoJICB0aGluZ3MuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBvbmUgc3RhdGljIHN0cmluZyB3aGljaCBsaXN0IHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzLgoKRnJpIE5vdiAyNSAxNjoyNDoyNyBNRVQgMTk5NAkJICBEYWcgQXNoZWltIChkYXNoQGlmaS51aW8ubm8pCgoJKiBbQ29uZmlndXJlXQoJTWFkZSB0aGUgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbGFuZ3VhZ2VzIG1vcmUgYXV0b21hdGljLiAgQWRkZWQKCWEgW2ZvbnRzXSBzZWN0aW9uIHRvIHRoZSB3aW5lLmNvbmYgZmlsZS4gIE1hZGUgdGhlIGRlZmF1bHRzCgliZXR0ZXIuICBHZW5lcmFsbHkgY2xlYW5lZCBpdCB1cC4KCgkqIFtyYy9zeXNyZXNfTm8ucmNdIFtyYy9zeXNyZXNfRGUucmNdIFtyYy9zeXNyZXMuY10KCU5vcndlZ2lhbiByZXNvdXJjZXMgYW5kIHNtYWxsIGZpeGVzIHRvIHRoZSBnZXJtYW4gcmVzb3VyY2VzLgoKV2VkIE5vdiAyMyAyMDoyODo1OSAxOTk0ICBNYXJ0aW4gdm9uIExvZXdpcyAgKG1hcnRpbkBjcy5jc3VmcmVzbm8uZWR1KQoKCSogW2RlYnVnZ2VyL2JyZWFrLmNdCgliYXJrKCksIHRvZ2dsZV9uZXh0KCksIHNob3VsZF9jb250aW51ZSgpOiBOZXcgZnVuY3Rpb25zCglpbnNlcnRfYnJlYWsoKTogRml4ZWQsIGFkZHMgd3JpdGUgYWNjZXNzIHRvIHBhZ2UgYmVmb3JlIHdyaXRpbmcKCXdpbmVfYnAubmV4dF9hZGRyOiBuZXcgc3RydWN0dXJlIGZpZWxkCgoJKiBbZGVidWdnZXIvZGJnLnldCglDaGFuZ2VkIHN5bWJvbCdzIHZhbHVlIHRvIGJlIGl0J3MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUKCXBvaW50ZWQgdG8gYnkgdGhlIHN5bWJvbC4KCUNoYW5nZWQgU0lHVFJBUCBoYW5kbGluZyB0byBhbGxvdyBjb250aW51YXRpb24gYWZ0ZXIgYnJlYWsgcG9pbnQKCgkqIFttaXNjL3NoZWxsLmNdCglTaGVsbEFib3V0KCk6IExvYWQgcmVzb3VyY2UgZnJvbSBtZW1vcnkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAyMCAxODozMDowNiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFtpbmNsdWRlL3Njcm9sbC5oXQoJUmV3cml0dGVuIG1vc3Qgb2Ygc2Nyb2xsLWJhciBjb2RlIGZvciBiZXR0ZXIgV2luZG93cyBsb29rICYgZmVlbC4KCUltcGxlbWVudGVkIEVuYWJsZVNjcm9sbEJhcigpLgoJUHJlbGltaW5hcnkga2V5Ym9hcmQgc3VwcG9ydC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJRml4ZWQgQmFkTWF0Y2ggZXJyb3IgZm9yIEJpdEJsdCgpIGFuZCBTdHJldGNoQmx0KCkgd2hlbiByZWFkaW5nCgliaXRzIGZyb20gb3V0c2lkZSB0aGUgdmlzaWJsZSByZWdpb24uCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10gW2luY2x1ZGUvYml0bWFwcy9vYm1fKl0KCVVzZSBYUE0gc3ltYm9saWMgY29sb3JzIHRvIGxvYWQgYml0bWFwcy4gVGhpcyBhbGxvd3MgdGhlIGNvbG9ycwoJb2YgdGhlIGJpdG1hcHMgdG8gZGVwZW5kIG9uIHRoZSBzeXN0ZW0gY29sb3JzLgoKCSogW3Rvb2xzL21ha2VfZGVidWddCglNYWRlIHRoZSBtYWtlX2RlYnVnIHNjcmlwdCBtb3JlIHJvYnVzdC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRml4ZWQgQ2hlY2tSYWRpb0J1dHRvbigpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGZldyBjaGFuZ2VzIHRvIHNjcm9sbC1iYXIgZHJhd2luZyBhbmQgdHJhY2tpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJlbmFtZWQgTmV4dFdpbmRvd0Zyb21Qb2ludCgpIHRvIFdJTlBPU19OZXh0V2luZG93RnJvbVBvaW50KCkgdG8KCWF2b2lkIGNvbmZ1c2lvbiwgYW5kIG9wdGltaXplZCBpdCBzb21ld2hhdC4KCk5vdiAxOSwgOTQgTWFydGluIEF5b3R0ZSAod2luZUB0cmdjb3JwLm1rc2luZm8ucWMuY2EpCgoJKiBbbWlzYy9hdWRpby5jXQoJKiBbbWlzYy9tY2lhbmltLmNdCgltb3JlIGNvZGluZyBidXQgbm90aGluZyBzcGVjdGFjdWxhci4KCgkqIFttaXNjL21tYXV4LmNdCglzb21lIGNvZGluZyB0byBhY2Nlc3MgJy9kZXYvbWl4ZXInLgoKCSogW21pc2MvbWlkaS5jXQoJc29tZSBjb2RpbmcgdG8gcmVhZCAuTUlEIGZpbGVzLCBidXQgaXQncyBub3QgcGxheWluZyB5ZXQuCgpTdW4gTm92IDEzIDE5OjMxOjAzIDE5OTQgICAgSmFtZXMgWW91bmdtYW4gKG1iY3N0anlAYWZzLm1hbi5hYy51aykKCgkqIFtvYmplY3RzL2RpYi5jXQoJUmVpbXBsZW1lbnRlZCBESUJfU2V0SW1hZ2VCaXRzX1JMRTgoKSBzbyB0aGF0IGl0IHdvdWxkIGNvcGUgd2l0aAoJYml0bWFwcyB3aGljaCBkb24ndCBlbmQgMHgwMCwgMHgwMiAocHJldmlvdXNseSBpdCBibGV3IHVwKS4gIFRoaXMKCWluY2x1ZGVzIHNvbWUgYml0bWFwcyBvdXRwdXQgYnkgUGFpbnQgU2hvcCBQcm8uICBJbXBsZW1lbnRhdGlvbiBpcwoJcG9zc2libHkgbm93IHRvbyBsYXguICBQbGVhc2Ugc2VlIHRoZSBub3RlcyBvbiB0aGUgZnVuY3Rpb24gYWJvdXQKCXdoeS4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglUaGUgZGVza3RvcCBwYXR0ZXJuIHNob3VsZCBiZSBwYWludGVkIGlmIHRoZSB3YWxscGFwZXIgZG9lc24ndAoJY292ZXIgdGhlIHdob2xlIHNjcmVlbiB3aWR0aCBPUiB0aGUgd2hvbGUgc2NyZWVuIGhlaWdodC4KClN1biBOb3YgMTMgMDA6MDc6MTEgTUVUIDE5OTQJRXJpayBCb3MJPGVyaWtAeHM0YWxsLm5sPgoKCSogW29iamVjdHMvZGliLmNdCglTbWFsbCBidWcgaW4gRElCX1NldEltYWdlQml0cygpIGZpeGVkLCBiaXRtYXBzIGluIDE2LDI0IGJwcAoJbm93IHdvcmsuCgoJKiBbbG9hZGVyL25lX3Jlc291cmNlLmNdIFtpbmNsdWRlL3Jlc291cmNlLmhdCglTb21lIGNsZWFudXAuCgpUaHUgTm92IDEwIDIwOjQ0OjU4IDE5OTQgIE1hcnRpbiB2b24gTG9ld2lzICAobWFydGluQGNzLmNzdWZyZXNuby5lZHUpCgoJKiBbQ29uZmlndXJlXQoJICBbcmMvc3lzcmVzLnJjXQoJUHJpbWl0aXZlIGNvbXBpbGUtdGltZSBzdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKCgkqIFtyYy9zeXNyZXNfRGUucmNdCglOZXcgZmlsZQoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTG9hZEJpdG1hcDogUmVjb2duaXplIGVuZCBvZiBzeXNyZXNibSBwcm9wZXJseQoKCSogW3JjL0ltYWtlZmlsZV0KCVJ1bGVzIHRvIGNvbXBpbGUgcmVzb3VyY2VzIHNpbXBsaWZpZWQsIGRlcGVuZGVuY2llcyBjaGFuZ2VkCgoJKiBbcmMvc3lzcmVzYm0ucmNdCglEb24ndCB1c2Ugc3lzcmVzYm0gaWYgdXNpbmcgWFBNCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW06IFJldmVyc2UgWi1vcmRlciBvZiBjb250cm9scwoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTVNHX1RyYW5zbGF0ZU1vdXNlTXNnOiBGaXggSFRUUkFOU1BBUkVOVCBoYW5kbGluZwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglOZXh0V2luZG93RnJvbVBvaW50OiBOZXcgZnVuY3Rpb24KCgkqIFtjb250cm9scy9idXR0b24uY10KCVdNX05DSElUVEVTVDogR3JvdXAgQm94IGlzIEhUVFJBTlNQQVJFTlQKCUJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbjogTmV3IGZ1bmN0aW9uCglCTV9TRVRDSEVDSzogQWRkZWQgY2FsbCB0byBCVVRUT05fQ2hlY2tBdXRvUmFkaW9CdXR0b24KCk1vbiBOb3YgIDcgMTE6MjA6MjYgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4IGhhbmcgd2hlbiB1c2luZyBEcmF3VGV4dCguLi4sIERUX1dPUkRCUkVBSykgd2l0aCBhIHdvcmQgdGhhdAoJaXMgdG9vIGxvbmcgdG8gYnJlYWsuCgoJKiBbb2JqZWN0cy9mb250LmNdCglEb24ndCBhc3N1bWUgaGVsdmV0aWNhIGlmIHRoZXJlIGlzIG5vIGZvbnQgZmFtaWx5OyBsZXQgdGhlIG90aGVyCglmb250IGF0dHJpYnV0ZXMgZGVjaWRlIHdoYXQgZm9udCB0byB1c2UuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJTGlzdGJveGVzIGFuZCBjb21ibyBib3hlcyBuZWVkIHRvIGJlIG5vdGlmaWVkIG9mIGRvdWJsZS1jbGlja3MuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJICBbaW5jbHVkZS9saXN0Ym94LmhdCgoJc2Nyb2xsaW5nIHRvIGJvdHRvbSBvZiBsaXN0IGJveCBzaG91bGQgZGlzcGxheSBsYXN0IGl0ZW0gYXQgdGhlCglib3R0b20sIG5vdCBhdCB0aGUgdG9wLgoJCglsaXN0IGJveGVzIG5lZWQgdG8gYWxsb2NhdGUgYSBzZXBhcmF0ZSBoZWFwIGZvciB0aGVpciBpdGVtIGRhdGEsCglyYXRoZXIgdGhhbiB1c2luZyB0aGUgdXNlciBoZWFwLiAgT3RoZXJ3aXNlLCBpdCdzIHZlcnkgZWFzeSB0byBydW4KCW91dCBvZiBtZW1vcnkgZm9yIGxpc3QgYm94IGl0ZW1zLgoKCXJlbW92ZWQgcmVkdW5kYW50IGNvZGUgaW4gTGlzdEJveEFkZFN0cmluZygpLiAgSW1wbGVtZW50ZWQgc2ltcGxlCgl2ZXJzaW9uIG9mIExCU19TT1JULgoKCURvbid0IHB1dCBbLl0gaW4gdGhlIGxpc3QgYm94IHdoZW4gdXNpbmcgRERMX0RJUkVDVE9SWS4KCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm9zIHNob3VsZCBwYXNzIENCU19TT1JUIG9udG8gdGhlaXIgbGlzdCBib3guCgoJKiBbd2luZG93cy93aW4uY10KCUlmIHdpbmRvdyBjcmVhdGlvbiBpcyBhYm9ydGVkLCByZW1vdmUgdGhlIHdpbmRvdyBmcm9tIHRoZQoJbGlua2VkIGxpc3RzLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJc3RhdGljIGNvbnRyb2xzIHdpdGggU1NfSUNPTiB3ZXJlIGFsd2F5cyByZXR1cm5pbmcgMCBmcm9tCglXTV9OQ0NSRUFURS4KCglNYWtlIHN1cmUgc3RhdGljIGNvbnRyb2xzIGhhdmUgdGV4dCB0byBkcmF3IGJlZm9yZSBkcmF3aW5nIGl0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTm92ICA2IDE4OjUyOjA0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXSAgKE5ldyBmaWxlKQoJQWRkZWQgcG9zc2liaWxpdHkgdG8gdXNlIC54cG0gZmlsZXMgZm9yIE9FTSBiaXRtYXBzLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vYm0qXSAgKE5ldyBmaWxlcykKCVJlZHJhd24gYWxsIE9FTSBiaXRtYXBzIGluIHhwbSBmb3JtYXQuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGQgc3BhY2UgZm9yIGludGVybmFsIGxlYWRpbmcgd2hlbiB1c2luZyBhIG5lZ2F0aXZlIGZvbnQgaGVpZ2h0LgoJU3R1YnMgZm9yIEFkZEZvbnRSZXNvdXJjZSgpIGFuZCBSZW1vdmVGb250UmVzb3VyY2UoKS4KCUZpeCBpbiBGT05UX0luaXQoKSBmb3IgdW5pbml0aWFsaXNlZCBkZWZhdWx0IGZvbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1ha2UgZm9udCBoZWlnaHQgbmVnYXRpdmUgYXMgaXQgaXMgcmVhbGx5IGEgcG9pbnQgc2l6ZSBhbmQgbm90IGEKCXBpeGVsIHNpemU7IGRpYWxvZ3MgdXNpbmcgOC1wb2ludCBmb250cyBsb29rIGJldHRlciBub3cuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJRml4ZWQgdGhlIGZpeCA6LSkgZm9yIFBpZSgpIHRvIG1ha2UgaXQgd29yayBmb3IgQXJjKCkgYW5kIENob3JkKCkgYWxzby4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQSBmZXcgY2hhbmdlcyBmb3IgbmV3IE9FTSBiaXRtYXBzLgoKU3VuIE5vdiAgNiAxODoyMjoxOCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglUaGUgbmFtZXMgb2YgbG9jYWwgY2xhc3NlcyBoYXZlIHRvIGJlIHN0b3JlZCB1c2luZyBHbG9iYWxBdG9tKi4KCU90aGVyd2lzZSB0aGV5IGNvdWxkbid0IGJlIGFjY2Vzc2VkIGZyb20gb3RoZXIgbW9kdWxlcyAoZS5nLiBCV0NDKSAKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoY3gpOiBJdCdzIHBvc3NpYmxlIHRvIHNldCB0aGUgY29udGVudHMgb2YgdGhlIGN4LXJlZ2lzdGVyLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJSW5pdE5FRExMKCk6IFRoZSBzaXplIG9mIHRoZSBsb2NhbCBoZWFwIGlzIG5vdyBwYXNzZWQgaW4gdGhlIGN4LQoJcmVnaXN0ZXIgd2hlbiBpbml0aWFsaXppbmcgYSBETEwuCgoJKiBbbWVtb3J5L2hlYXAuY10KCUxvY2FsSW5pdCgpOiBUaGUgY2FzZSBzdGFydD09MCBpcyBub3cgaGFuZGxlZCBpbiB0aGUgd2F5IGl0IHNob3VsZC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0V2luZG93TG9uZygpOiBJZiB0aGUgYWRyZXNzIG9mIHRoZSB3aW5kb3dzIGZ1bmN0aW9uIGlzIHJlcXVlc3RlZAoJaXQncyBubyBsb25nZXIgcmV0dXJuZWQgaWYgaXQncyB3aXRoaW4gdGhlIFdpbmUgY29kZSAoYW5kIHRoZXJlZm9yZQoJdW5yZWFjaGFibGUgYnkgYSB3aW5kb3dzIHByb2dyYW0pLiBUaGlzIG1ha2VzIEJvcmxhbmQncyBPV0wgaGFwcHkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9HZXRTdHIoKTogQWRkZWQgaGFuZGxpbmcgZm9yIG9mZjwwLgoKU3VuIE5vdiAgNiAxNzozNzoxNCAxOTk0ICBDaHJpcyBKb25lcyAgPGNocmlzakBpY2hpcHMuaW50ZWwuY29tPgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglGaXhlZCBpbmZpbml0ZSBsb29wIGJ1ZyB3aGVuIHR3byBETExzIHJlZmVyIHRvIGVhY2ggb3RoZXIgKGZpeGVzCgloYW5ndXAgb2YgUXVpY2tlbiBkdXJpbmcgbG9hZGluZykuCgpUaHUgTm92IDA0IDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbbWlzYy9kb3NfZnMuY10KCUJ1ZyBmaXg6IFRoZSBzaXplIG9mIGEgZGlzayBhbiB0aGUgYXZhaWxhYmxlIHNwYWNlCglpcyBub3cgcmV0dXJuZWQgaW4gYnl0ZXMgaW5zdGVhZCBvZiAoaW5jb3JyZWN0bHkpCglLQnl0ZXMuCgpUaHUgTm92IDAzIDEyOjAwOjAwIDE5OTQgIEphbiBXaWxsYW1vd2l1cyAgKGphbkBqYW5oaC5zaC5zdWIuZGUpCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeDogUGllIHNlZ21lbnRzIGFyZSBub3cgZmlsbGVkIHdpdGggY29ycmVjdCBicnVzaC4KClRodSBOb3YgIDMgMTA6NDA6MDkgMTk5NCAgTWFydGluIHZvbiBMb2V3aXMgIChtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdSkKCiAgICAgICAgKiBbSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gYmVmb3JlIGxvYWRlci5vCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBDb3B5U3lzTWVudTogZ2VuZXJhdGUgU1lTTUVOVSBvbiB0aGUgZmx5LCBlbGltaW5hdGUgaFN5c01lbnUKCiAgICAgICAgKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQogICAgICAgIEFkZCBzdHJ1Y3QgUmVzb3VyY2VUYWJsZQoKICAgICAgICAqIFtsb2FkZXIvYml0bWFwLmhdCiAgICAgICAgTG9hZCBzeXN0ZW0gYml0bWFwcyBmcm9tIHN5c3Jlc2JtVGFibGUKCiAgICAgICAgKiBbbWlzYy9jbGlwYm9hcmQuY10KICAgICAgICAgIFt3aW5kb3dzL2V2ZW50LmNdCiAgICAgICAgSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUsRVZFTlRfU2VsZWN0aW9uUmVxdWVzdDogYnVnIGZpeGVzCiAgICAgICAgCiAgICAgICAgKiBbcmMvSW1ha2VmaWxlXQogICAgICAgIGdlbmVyYXRlIHJjLm8gZnJvbSBzeXNyZXMubyBhbmQgc3lzcmVzYm0uby4gQWRkZWQgLWxmbAoKICAgICAgICAqIFtyYy9yYy55XQogICAgICAgIGNoYW5nZSBzdHlsZSBoYW5kbGluZyB0byBhbGxvdyAoIFMxIHwgUzIgKSB8IFMzCgogICAgICAgICogW3JjL3N5c3Jlcy5yY10KICAgICAgICAgIFtyYy9zeXNyZXNibS5yY10KICAgICAgICBQdXQgYml0bWFwcyBhbmQgaWNvbnMgdG8gc3lzcmVzYm0sIGV2ZXJ5dGhpbmcgZWxzZSB0byBzeXNyZXMKCiAgICAgICAgKiBbcmMvd2luZXJjLmNdCiAgICAgICAgICBbcmMvd2luZXJjLmhdCiAgICAgICAgQWRkZWQgLW8sIC1jIGZsYWdzLiBOZXcgZnVuY3Rpb24gc2V0X291dF9maWxlLiBPdXRwdXQgdG8gZmlsZXMuCgogICAgICAgICogW3dpbmRvd3MvZGlhbG9nLmNdCiAgICAgICAgRGlhbG9nQm94SW5kaXJlY3RQdHIsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1QdHI6IE5ldyBmdW5jdGlvbnMgCgogICAgICAgICogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCiAgICAgICAgQ3JlYXRlIEFib3V0V2luZSBkaWFsb2cgZnJvbSB0ZW1wbGF0ZSBwb2ludGVyCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMzAgMTM6MDE6MTggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQnVnIGZpeCBmb3IgU1NfSUNPTiBjb250cm9scy4KCgkqIFtpZjE2MzIvSW1ha2VmaWxlXQoJRml4ZWQgY2FsbC5vIGRlcGVuZGVuY2llcy4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2RjLmNdCglGaXhlZCB2aXNpYmxlIHJlZ2lvbiBoYW5kbGluZy4gaFZpc1JnbiBpcyBhbHdheXMgbm9uLW51bGwgbm93LgoKCSogW3dpbmRvd3MvZGNlLmNdCglCdWcgZml4IGluIEdldERDRXggZm9yIENTX09XTkRDIHdpbmRvd3MuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVzIHRvIGljb24gd2luZG93IGRyYXdpbmcuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUEgZmV3IGZpeGVzIGluIFNldFdpbmRvd1BvcygpLgoKU3VuIE9jdCAzMCAxMjo1MDoyNCAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJQml0Qmx0KCk6IEJpdEJsdCBpcyBub3cgYWJsZSB0byBoYW5kbGUgYW55IHJhc3RlciBvcGVyYXRpb24uIElmCgl0aGUgcmVxdWVzdCBjYW4ndCBiZSBwYXNzZWQgdG8gWFdpbmRvd3MgZGlyZWN0bHksIGl0J3MgcXVpdGUKCXNsb3csIHRob3VnaC4KCgkqIFsqLyouY10KCSAgW21pc2MvbWFpbi5jXQoJSW1wcm92ZW1lbnRzIG9mIHRoZSBzeXN0ZW0gZm9yIGhhbmRsaW5nIGRlYnVnIG1lc3NhZ2VzLiBPcHRpb25zIGFyZQoJbm93IGFsc28gbG9hZGVkIGZyb20gL3Vzci9saWIvWDExL2FwcC1kZWZhdWx0cy9XaW5lIChpbnNlcnQKCSpkZWJ1Z29wdGlvbnM6ICt4eHggdGhlcmUgaWYgeW91IHdhbnQgdG8gaGF2ZSB0dXJuIG1lc3NhZ2VzIHh4eCBvbikuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRGVzdHJveU1lbnUoKTogVGhlIHdob2xlIHdpbmRvdyB3b24ndCBiZSBkZXN0cm95ZWQgYXMgYSBzaWRlZWZmZWN0CglhbnkgbG9uZ2VyLgoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4ZWQgYnVnIGluIHNlYXJjaGluZyBpbiBzeXN0ZW0vd2luZG93LWRpcmVjdG9yeS4KClN1biBPY3QgMzAgMTI6MjU6NTMgMTk5NCAgSmltbXkgVGlydGF3YW5nc2EgPGowdDI1MjdAdGFtMjAwMC50YW11LmVkdT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUJ1ZyBmaXggZm9yIHdpbmRvdyByZWxhdGVkIHN0cnVjdHVyZXMuCglEQ0IgYW5kIENPTVNUQVQgYXJlIGFmZmVjdGVkLiBUaGV5IG11c3QgYmUgcGFja2VkLgoKCSogW21pc2MvY29tbS5jXQoJQnVnIGZpeCBmb3IgQ09NIHBvcnRzOgoJRGlhbCBhbmQgZGlhbG9nIHdpbmRvdyBpbiB0ZXJtaW5hbC5leGUgbm93IHdvcmtzLgoJTm9uIHNlcXVlbnRpYWwgQ09NIGFzc2lnbm1lbnRzIGluIHdpbmUuY29uZiBzaG91bGQgbm90IGJyZWFrIG5vdy4KCUJhdWRyYXRlIGNhbiBiZSBzcGVjaWZpZWQgaW4gd2luZS5jb25mIHRvIG92ZXJjb21lIGJhdWRyYXRlIGxpbWl0YXRpb24KCWluIG1zd2luZG93LiBTZWUgc2FtcGxlIHdpbmUuaW5pCgoJKiBbaW5jbHVkZS9jb21tLmhdCglhZGQgYmF1ZHJhdGUgZmllbGQgdG8gRG9zRGV2aWNlU3RydWN0cmUKCgkqIFtvYmplY3QvZm9udC5jXQoJQnVnIGZpeCBmb3IgZm9udCBhc3NpZ25tZW50LgoJVXNlIHBhaXJzIG9mIGZvdW5kcnkgYW5kIGZhbWlseSBmb250bmFtZXMgaW4gWDExIHRvIGNvcnJlc3BvbmQgd2l0aAoJd2luZG93J3MgZm9udHMuCglQdXQgZm9udCBhc3NpZ25tZW50IGluaSB3aW5lLmluaS4KCgkqIFt3aW5lLmluaV0KCUFkZGluZyBvcHRpb25hbCBiYXVkcmF0ZSBhZnRlciBwb3J0IG5hbWUgaW4gInNlcmlhbHBvcnRzIiBzZWN0aW9uCglBZGQgbmV3IHNlY3Rpb24sICJmb250cyIuCgkiZGVmYXVsdCIgaXMgc3BlY2lhbCBrZXkgaW4gImZvbnRzIiB0byBtYXRjaCBhbnkgdW5tYXRjaCB3aW5kb3cgZm9udC4KCk9jdCAyOSwgOTQgKG5ldyBhZGRyZXNzKSB3aW5lQHRyZ2NvcnAubWtzaW5mby5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtpZjE2MzIvcmVsYXkuY10KCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdIAlOZXcgZmlsZS4KCSogW21pc2MvY29tbWRsZy5jXSAJCQlOZXcgZmlsZS4KCSogW2luY2x1ZGUvY29tbWRsZy5oXSAJCU5ldyBmaWxlLgoJQmVnaW4gb2YgYW4gZW11bGF0ZWQgQ09NTURMRyBETEwsIGJ1aWx0LWluIGZvciBub3cuCgkoQlRXLCBpZiB5b3Ugd2FudCB0byBzd2l0Y2ggYmV0d2VlbiBidWlsdC1pbiAmIDE2Yml0cyBDb21tRGxnLCBvbmx5IAoJdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgdG8gcHV0IHRoZSByZWFsL2R1bW15IG5hbWUgaW4gZmlsZSByZWxheS5jKQoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZldyBidWcgZml4ZXMgYW5kL29yIGNvc21ldGljLgoKCSogW21pc2MvYXVkaW8uY10KCSogW21pc2MvbW1hdXguY10KCWJ1ZyBmaXhlcyBhbmQgZmxhZ3MgcmV0dXJuZWQgdG8gZW11bGF0ZSBTQjE2LgoKCSogW21pc2MvbWlkaS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnTWlkaScgTU1TWVNURU0gJiBNQ0kgZHJpdmVyLgoKCSogW21pc2MvbWNpYW5pbS5jXSAJCQlOZXcgZmlsZS4KCXNrZWxldG9uIGZvciAnQW5pbWF0aW9uMScgTUNJIGRyaXZlci4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkIG5ldyBzdHViIGZvciBHZXRMYXN0QWN0aXZlV2luZG93KCkuCgpUdWUgT2N0IDI1IDA5OjE3OjI1IDE5OTQgIE9sYWYgRmxlYmJlICAoZmxlYmJlQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtpZjE2MzIvY2FsbC5TXSBbdG9vbHMvYnVpbGQuY10KICAgICAgICAgICBTdXBwb3J0IGZvciBFTEYgZm9ybWF0LiAoTm90IGNvbXBsZXRlKQoKU3VuIE9jdCAyMyAwMDo1MTo1MCAxOTk0ICBQYXVsIEZhbHN0YWQgIChwZkB6b29mKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGQgc3R1YnMgZm9yIEFycmFuZ2VJY29uaWNXaW5kb3dzKCksIGV0Yy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglBZGQgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCB0ZXN0X21lbW9yeSgpLCBmb3IgdXNlIHdpdGggSXNCYWQqUHRyKCkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZCBzdHVicyBmb3IgVGlsZUNoaWxkV2luZG93cygpLCBldGMuCgoJKiBbd2luZG93cy93aW4uY10KCUlzV2luZG93KCkgc2hvdWxkbid0IGNyYXNoIGlmIGl0J3MgZ2l2ZW4gYSBiYWQgaGFuZGxlLgoJQWRkIHN0dWIgZm9yIEdldExhc3RBY3RpdmVQb3B1cCgpLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudCB0aGUgSXNCYWQqUHRyKCkgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVJldHVybiB0aGUgZnVsbCBsb25nd29yZCBvZiB0aGUgaXRlbSBkYXRhIGluIExCX0dFVElURU1EQVRBLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCURvbid0IGxldCB0aGUgdXNlciBzZWxlY3QgYW4gYXJlYSBwYXN0IHRoZSBlbmQgb2YgdGhlIHRleHQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbiBEcmF3VGV4dCgpLCB0aGUgY29kZSB0byBkZWxldGUgY3JsZnMgYWxzbyByZW1vdmVkIG11bHRpcGxlCgljb25zZWN1dGl2ZSBuZXdsaW5lcy4gIEFsc28sIHVzaW5nIERUX0NBTENSRUNUIGRpZG4ndCByZXR1cm4KCXRoZSByaWdodCBoZWlnaHQsIGFuZCB0aGUgd2lkdGggd2Fzbid0IHJldHVybmVkIGF0IGFsbC4KCVRoaXMgY2F1c2VkIE1lc3NhZ2VCb3hlcyB0byBiZSBtaXNzaW5nIG11Y2ggb2YgdGhlaXIgdGV4dC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJU2Nyb2xsV2luZG93W0V4XSBkaWRuJ3Qgd29yayByaWdodCB3aXRoIG51bGwgTFBSRUNUIGFyZ3VtZW50cy4KCkZyaSBPY3QgMjEgMjE6NDc6MTkgMTk5NCAgUGF1bCBGYWxzdGFkICAocGZAem9vZi5jdHMuY29tKQoKCSogW21pc2NlbXUvaW50MjEuY10KCUZpeGVkIGludDIxIDB4NDIgaGFuZGxlciB0byBwcm9wZXJseSBhc3NlbWJsZSAzMi1iaXQgc2VlayBwdHIuCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJRml4ZWQgaW52ZXJ0ZWQgbG9naWMgaW4gRW51bVByb3BzKCksIGFuZCBjaGFuZ2VkIENhbGxCYWNrMTYoKQoJY2FsbCB0byB1c2UgbmV3IGFyZyBmb3JtYXQuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIENhbGxCYWNrMTYoKSBjYWxsIGluIEVudW1bQ2hpbGRdV2luZG93cyB0byB1c2UgbmV3IGFyZwoJZm9ybWF0OyB0aGlzIGZpeGVzIGNyYXNoZXMgaW4gZW51bSBwcm9jZWR1cmVzLgoKV2VkIE9jdCAxOSAyMTozMDowMCBQRFQgMTk5NAkJbWFydGluQGNzLmNzdWZyZXNuby5lZHUKCgkqIFttaXNjL2NsaXBib2FyZC5jXQoJICBbd2luZG93cy9ldmVudC5jXQoJICBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBjdXQgYW5kIHBhc3RlIGJldHdlZW4gV2luZSBhbmQgb3RoZXIgWCBjbGllbnRzIHZpYQoJdGhlIFBSSU1BUlkgc2VsZWN0aW9uLiBUZXh0IG9ubHkgdGhpcyB0aW1lLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfTGluZUxlbmd0aCwgRURJVF9UZXh0TGluZSByZXR1cm4gMCBmb3IgbGluZXMgYWZ0ZXIgbGFzdCBvbmUuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVNlbmQgV01fU1lTQ09NTUFORCB0byBvdmVybGFwcGVkIGFuY2VzdG9yIHdpbmRvdywgCglub3QgdGhlIHJlY2VpdmVyIG9mIFdNX1NZU0tFWURPV04KClNhdCBPY3QgMjIgMTU6MDE6MDIgMTk5NCAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBicmFkZm9yZC5hYy51az4KCiAgICAgICAgKiBbY29udHJvbHMvZWRpdC5jXQoJQ2xpZW50V2lkdGgoKS9DbGllbnRIZWlnaHQoKSBtYWNyb3M6IHJldHVybiAwIGlmIHNpemUgd291bGQKCWJlIG5lZ2F0aXZlCglFRElUX1N0ckxlbmd0aCgpOiB0YWtlcyB1bnNpZ25lZCBjaGFyKiBpbnN0ZWFkIG9mIGNoYXIqCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTGlzdEJveFduZFByb2MoKTogaW4gImNhc2UgV01fTU9VU0VNT1ZFIiAtIHNldCBscGhsIGF0IHN0YXJ0IG9mCgljYXNlIGluc3RlYWQgb2YgaW4gZWFjaCBwbGFjZSByZXF1aXJlZCAoaXQgd2FzIG9taXR0ZWQgaW4KCXNvbWUgcGxhY2VzIGNhdXNpbmcgcHJvYmxlbXMhKQoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1FTlVfQ2FsY0l0ZW1TaXplKCk6IGRvbid0IHRyeSB0byBmaW5kIHNpemUgb2YgYSB0ZXh0IGl0ZW0KCWlmIHRoZSBwb2ludGVyIGlzIE5VTEwKCgkqIFtpbmNsdWRlL2hlYXAuaF0KCWFkZGVkIGRlZmluaXRpb24gb2YgSEVBUF9Mb2NhbEluaXQoKQoKCSogW2luY2x1ZGUvbXNkb3MuaF0KCXJlbW92ZWQgYnVnZ3kgcG9pbnRlcigpIG1hY3JvICh1c2UgU0FGRU1BS0VQVFIoKSBmcm9tIHNlZ21lbS5oCglpbnN0ZWFkKQoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSVBDQ29weVNlbGVjdG9yKCk6IGFkZGVkIG1pc3NpbmcgZmxhZ3MgdG8gc2htZ2V0KCkgY2FsbAoJPyBkb2VzIHRoaXMgYnJlYWsgbGludXggLSBJIGFkZGVkIHRoZXNlIGZsYWdzIGluIGEgcHJldmlvdXMKCXBhdGNoIGJ1dCB0aGV5IHdlcmUgbWlzc2luZyBpbiB0aGUgY29ycmVzcG9uZGluZyByZWxlYXNlID8KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCgl3aW5fZmF1bHQoKTogYWRkZWQgbWlzc2luZyBkZWZpbml0aW9ucyBvZiBpLCBkdW1wIGZvciB0aG9zZQoJbm90IHJ1bm5pbmcgTmV0QlNEIG9yIGxpbnV4CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19HZXRDdXJyZW50RGlyKCk6IG1hZGUgdGVtcFtdIHN0YXRpYyBzbyBpdCBjYW4gYmUgc2FmZWx5CglyZXR1cm5lZAoKCSogW21pc2NlbXUvaW50MjEuYyxpbnQyNS5jLGludDI2LmNdCglDaGFuZ2VkIGFsbCBpbnZvY2F0aW9ucyBvZiBwb2ludGVyKCkgdG8gU0FGRU1BS0VQVFIoKS4gSW5jbHVkZWQKCXNlZ21lbS5oIHdoZXJlIG5lY2Vzc2FyeS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbSgpOiBDaGFuZ2VkIEhFQVBfSW5pdCgpIGNhbGwgdG8gCglIRUFQX0xvY2FsSW5pdCgpLCByZW1vdmVkIHJlZHVuZGFudCB2YXJpYWJsZXMKClNhdCBPY3QgMjIgMDA6Mjk6NDEgTUVUIDE5OTQJCSAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW2xvYWRlci9saWJyYXJ5LmNdIFtsb2FkZXIvbWFpbi5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCgkgIFttaXNjL2V4ZWMuY10gW21pc2NlbXUvaW50MTAuY10gW21pc2NlbXUvaW50MjEuY10KCSAgW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZXdyaXR0ZW4gbW9yZSBwcmludGYncyB0byB1c2UgdGhlIG5ldyBkZWJ1Z2dpbmcgc3lzdGVtLCBhbmQKCW1hZGUgd2luZSBsZXNzIHZlcmJvc2UgcGVyIGRlZmF1bHQuIFVzZSAiLWRlYnVnbXNnICttb2R1bGUiCgl0byBnZXQgKGFsbW9zdCkgdGhlIHNhbWUgYmVoYXZpb3IgYXMgYmVmb3JlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gT2N0IDE2IDEzOjI5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9idXR0b24uY10KCUltcGxlbWVudGVkIFdNX0dFVERMR0NPREUsIFdNX1NFVEZPTlQsIEJNX1NFVFNUWUxFLCBCTV9TRVRDSEVDSywKCUJNX1NFVFNUQVRFLgoJSW1wbGVtZW50ZWQgZGVmYXVsdCBidXR0b24gcGFpbnRpbmcuCglPcHRpbWlzZWQgcmVkcmF3aW5nLgoJRml4ZWQgb3duZXItZHJhdyBidXR0b25zLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJSW1wbGVtZW50ZWQgV01fU0VURk9OVC4KCUEgZmV3IG9wdGltaXNhdGlvbnMgaW4gcGFpbnRpbmcgY29kZS4KCUJ1ZyBmaXggZm9yIFNTX1NJTVBMRSBjb250cm9scy4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCVByZWxpbWluYXJ5IEdldENvZGVIYW5kbGUoKS4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglDaGFuZ2VkICdwYXNjYWwnIHRvICdwYXNjYWwxNicgZXZlcnl3aGVyZSBpdCdzIG5lZWRlZC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIGEgZmV3IGRhdGEgc3RydWN0dXJlcy4KCgkqIFttZW1vcnkvaGVhcC5jXQoJQnVnIGZpeCBpbiBIRUFQX1JlQWxsb2MoKS4KCgkqIFttaXNjL2N1cnNvci5jXQoJRml4ZWQgU2V0Q3Vyc29yKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCUZpeGVkIFBhdEJsdCgpIHdoZW4gdXNpbmcgQkxBQ0tORVNTIG9yIFdISVRFTkVTUyBjb2Rlcy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUJldHRlciBmb250IG1hcHBpbmcgY29kZS4KCUltcGxlbWVudGVkIEdldFRleHRGYWNlKCkuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXggaW4gUkVHSU9OX01ha2VQaXhtYXAoKS4KCUZhc3RlciByZWdpb24gY29weWluZy4KCgkqIFtvYmplY3RzL3RleHQuY10KCUltcGxlbWVudGVkIEV4dFRleHRPdXQoKS4KCUltcGxlbWVudGVkIERUX05PQ0xJUCBzdHlsZSBmb3IgRHJhd1RleHQoKS4KCgkqIFt3aW5kb3dzL2RjLmNdCglGcmVlIHRoZSBiaXRtYXAgd2hlbiBkZWxldGluZyBhIG1lbW9yeSBEQy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igd2luZG93cyB0aGF0IGhhdmUgbm8gYXNzb2NpYXRlZCBYIHdpbmRvdy4KCUltcGxlbWVudGVkIERDWF9DTElQU0lCTElOR1MgYW5kIERDWF9QQVJFTlRDTElQIGluIEdldERDRXgoKS4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJSW1wbGVtZW50ZWQgZGVmYXVsdCBwdXNoIGJ1dHRvbiBoYW5kbGluZyBhbmQgRE1fU0VUREVGSUQuCglJbXBsZW1lbnRlZCBXTV9ORVhURExHQ1RMLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkZWZhdWx0IHB1c2ggYnV0dG9uIGhhbmRsaW5nLgoJQmVnaW5uaW5nIG9mIGEga2V5Ym9hcmQgaW50ZXJmYWNlIGluIGRpYWxvZ3MKCShkb2VzIG5vdCByZWFsbHkgd29yayB5ZXQpLgoJRml4ZWQgZGlhbG9ncyB0aGF0IHVzZSBhIHNwZWNpYWwgZm9udC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL2ZvY3VzLmNdCglBZGRlZCBzdXBwb3J0IGZvciBub24tWCB3aW5kb3dzLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBGbG9vZEZpbGwoKSBhbmQgaW1wbGVtZW50ZWQgRXh0Rmxvb2RGaWxsKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglDbGVhbmVyIGhhcmR3YXJlIG1lc3NhZ2VzIGFuZCBYIGV2ZW50cyBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9wYWludGluZy5jXQoJSW1wbGVtZW50ZWQgV01fU0VUUkVEUkFXLgoKCSogW3dpbmRvd3Mvd2luLmNdCglPbmx5IGNyZWF0ZSBhbiBYIHdpbmRvdyBmb3IgdG9wLWxldmVsIHdpbmRvd3MsIG9yIGZvciB0aGUgZGVza3RvcC4KCUNoaWxkIHdpbmRvd3Mgbm93IHVzZSB0aGVpciBwYXJlbnQncyBkcmF3YWJsZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQmVnaW5uaW5nIG9mIHN1cHBvcnQgZm9yIG5vbi1YIHdpbmRvd3MgKHN0aWxsIHNvbWV3aGF0IGJyb2tlbikuCglJbXBsZW1lbnRlZCAqRGVmZXJXaW5kb3dQb3MoKS4KCgkqIFsqL0ltYWtlZmlsZV0KCUNsZWFuZWQgdXAgc29tZSBJbWFrZWZpbGVzLgoJTW92ZWQgZGMuYyBmcm9tIHdpbmRvd3MvIHRvIG9iamVjdHMvLgoJTW92ZWQgY3Vyc29yLmMgZnJvbSBtaXNjLyB0byB3aW5kb3dzLy4KClN1biBPY3QgMTYgMTI6MjE6NTIgMTk5NCAgTWljaGFlbCBQYXRyYSA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kNDAwLmRlPgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCSAgW2luY2x1ZGUvc3RkZGVidWcuaF0KCSAgWyovKi5jXQogICAgICAgIFJld3JpdHRlbiBhbGwgdGhlIGNhbGxzIHRvIHByaW50ZiBmb3IgZGlzcGxheWluZyBkZWJ1Zy1pbmZvcm1hdGlvbgogICAgICAgIChtZXNzYWdlcyBsaWtlICJMb2FkSW1hZ2U6IGxvYWRpbmcgU09MIChTT0wuRVhFKSIgZXRjLikgCiAgICAgICAgQWRkZWQgb3B0aW9uICItZGVidWdtc2ciIHRvIFdpbmUuIEV4YW1wbGU6ICItZGVidWdtc2cgK2FsbCIgd2lsbCB0dXJuCiAgICAgICAgYWxsIHRoZXNlIG1lc3NhZ2VzIG9uLCAiLWRlYnVnbXNnIC1kbGwiIHdpbGwgdHVybiBhbGwgbWVzc2FnZXMgCgljb25jZXJuaW5nIERMTHMgb2ZmLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGRlZCBzb21lIGhhbmRsaW5nIGZvciBjb21ibyBjb250cm9scyB3aXRoIG93bmVyZHJhdy1zdHlsZXMKICAgICAgICAoanVzdCBjcmVhdGluZyBhbmQgcGFzc2luZyB0aGUgbmVjZXNzYXJ5IG1lc3NhZ2VzIHRvIHRoZSAKCWNvcnJlc3BvbmRpbmcgbGlzdGJveCBjb250cm9sOyB0aGUgZWRpdC1jb250cm9sIG5lZWRzIHRvIGJlCglyZXBsYWNlZCB3aXRoIHNvbWV0aGluZyBlbHNlKS4KCgkqIFtjb250cm9scy9lZGl0LmNdCgkgIFt3aW5kb3dzL2RpYWxvZy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgdXNlIG9mIGdsb2JhbCBoZWFwIG1lbW9yeSBpbiBkaWFsb2dzIHdpdGggCgllZGl0IGNvbnRyb2xzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGl0ZW0gZGF0YS4KCUxpc3RCb3hJbnNlcnRTdHJpbmcoKTogRml4ZWQgYnVnIGZvciBlbGVtZW50cyB3aGljaCBhcmUgbm90IGluc2VydGVkCglhZnRlciB0aGUgY3VycmVudGx5IGxhc3QgZWxlbWVudC4KCQoJKiBbbWlzYy9kb3NfZnMuY10KCSAgW21pc2NlbXUvaW50MjEuY10KCURPU19WYWxpZERpcmVjdG9yeSgpOiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIHN0cmluZyBpcyBpbiBmYWN0IHRoZQoJdmFsaWQgbmFtZSBvZiBhIGRpcmVjdG9yeS4KClNhdCBPY3QgMTUgMTc6MzU6MDAgUERUIDE5OTQJCTxtYXJ0aW5AY3MuY3N1ZnJlc25vLmVkdT4KCgkqIFtJbWFrZWZpbGVdCglnZW5lcmF0ZSB3aW5lLnN5bSBhZnRlciBjcmVhdGluZyB3aW5lCgoJKiBbZGVidWdnZXIvZGJnLnldCglsb2FkICJ3aW5lLnN5bSIgd2hlbiBlbnRlcmluZyBkZWJ1Z2dlcgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCXN5bWJvbGljIGJhY2t0cmFjZSBmb3IgMzItYml0IHN0YWNrLiBCcmVha3MgMTYtYml0IGJ0LgoKU3VuIFNlcCAgMjUgMTI6MDA6MDAgUERUIDE5OTQgICA8bWFydGluQG9zaXJpcy5jcy5jc3VmcmVzbm8uZWR1PgoKCSogW3JjL3JjLnldIFtyYy9yYy5oXSBbcmMvcmMubF0gW3JjL3dpbmVyYy5jXQoJRmlsZXMgY3JlYXRlZAoKU3VuIFNlcCAxOCAxMTowNDo0NSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW21pc2Mvc3B5LmNdCglFeGNsdWRlIGFuZCBJbmNsdWRlIG5vIGxvbmdlciByZXF1aXJlcyBhIHRlcm1pbmF0aW5nICc7JyB0bwoJcmVnaXN0ZXIgdGhlIGxhc3QgY29tcG9uZW50LgoKVGh1IFNlcCAxNSAyMzoxMDowOSBNRVQgRFNUIDE5OTQgICAgICAgICAgRGFnIEFzaGVpbSAoZGFzaEBpZmkudWlvLm5vKQoKCSogW0NvbmZpZ3VyZV0KCVJld3JvdGUgbXVjaCBvZiBpdC4gIEFkZGVkIGNhcGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSB3aW5lLmluaQoJZmlsZS4gIENvbW1lbnRlZCBvdXQgdGhlIHByb2Nlc3NvciBlbXVsYXRvciBvcHRpb25zIHVudGlsIHRoYXQKCWJlY29tZXMgaW50ZXJlc3RpbmcuICBHaXZlcyBhIHdhcm5pbmcgaWYgaXQgc2VlcyBhbnkgKi5yZWoKCWZpbGVzLiAgSSBob3BlIEkgaGF2ZW4ndCBhc3N1bWVkIHRvIG11Y2ggYWJvdXQgdGhlIHNoZWxsL09TIHNvCgl0aGF0IGl0IGJyZWFrcyB1bmRlciAqQlNELgoKCSogW21pc2MvZG9zX2ZzLmNdCglSZW1vdmVkL2NoYW5nZWQgY2FsbHMgdG8gVG9Vbml4KCkgKHdoaWNoIGNhbGxzIHRvbG93ZXIoKSkgc28KCXRoYXQgdGhlIHBhcnQgb2YgdGhlIHBhdGhuYW1lIHdoaWNoIGNvcnJlc3BvbmQgd2l0aCB0aGUgZHJpdmUKCWxldHRlciBvbiBET1Mgbm8gbG9uZ2VyIHdpbGwgYmUgbWFwcGVkIHRvIGxvd2VyY2FzZS4gIFRoaXMKCW1lYW5zIHRoYXQgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGhhdmUgdXBwZXJjYXNlIGxldHRlcnMgaW4KCXRoZSBbZHJpdmVzXSBzZWN0aW9uIG9mIHdpbmUuaW5pLgoKCSogW0xJQ0VOU0VdCglDb3NtZXRpYyBjaGFuZ2VzIHNvIHRoYXQgaXQgZGlzcGxheXMgYmV0dGVyIGluIHRoZSB3aW5kb3cgeW91CglnZXQgZnJvbSBwcmVzc2luZyAiQ3JlZGl0X0xpY2Vuc2UiIGluIHRoZSAiQWJvdXQgV0lORSIgd2luZG93LgoKU3VuIEF1ZyAyMSAyMToxMjowNiBNRVQgRFNUIDE5OTQJPGVyaWtAeHM0YWxsLm5sPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUxvYWRNZW51KCkgbW92ZWQgdG8gbG9hZGVyL3Jlc291cmNlLmMuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBzdHViIGZvciBGaWxlQ0RSKCkuCgoJKiBbaW5jbHVkZS9wZWV4ZS5oXQoJQWRkZWQsIGZyb20gRXJpYydzIHBlLXRlc3QuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJQWRkZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlcy5jXQoJUmVtb3ZlZCBkdXBsaWNhdGVkIGNvZGUgaW4gKlJlc291cmNlKCkgZnVuY3Rpb25zLgoJTW92ZWQgTkUtcHJvZ3JhbSBzcGVjaWZpYyBmdW5jdGlvbnMgaW50byBuZV9pbWFnZS5jLgoJTW92ZWQgTkUtZmlsZWZvcm1hdCBmdW5jdGlvbnMgdG8gbmVfcmVzb3VyY2UuYy4KCgkqIFtwZV9pbWFnZS5jXSBbcGVfcmVzb3VyY2UuY10KCUFkZGVkLiBOb3RoaW5nIGltcGxlbWVudGVkIHRvIHJ1biBQRS1leGVjdXRhYmxlcywgcmVzb3VyY2UKCWxvYWRpbmcgb25seS4KCgkqIFttaXNjL2ZpbGUuY10KCUNoYW5nZWQgT3BlbkZpbGUoKSB0byB1c2UgbWFjcm9zLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkZGVkIE5VTEwtcHRyIGNoZWNrcyB0byBTaGVsbEFib3V0KCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRml4ZWQgYSBmZXcgdHlwb3MuCgoJKiBbbWlzY2VtdS9rZXJuZWwuY10KCUFkZGVkIF9ESSA9IF9EUywgdG8gcHV0IHRoZSBjYWxsZXIncyBpbnN0YW5jZSBpbiBESS4gRG9lc24ndAoJd29yayBwcm9wZXJseSBpZiBjYWxsZXIgY2hhbmdlZCBEUyA6LSgKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAyNSAxNToyNDozNiBFRFQgMTk5NCAgICAgICAgICAgIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKICAgICAgICAqIFtpbmNsdWRlL3dpbi5oXQogICAgICAgIFJlbW92ZWQgc2VwZXJhdGUgWCB3aW5kb3cgZm9yIGljb24sIGFkZGVkIGljb24gd2lkdGgsaGVpZ2h0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ29tbWVudGVkIG91dCB0aGUgb2xkIFNXX3h4eCBlbXVtIGFuZCBhZGRlZCBkZWZpbmVzIHNpbmNlCgl0aGV5IGFyZW4ndCBlbnVtZXJhdGVkLgoKCSogW3dpbmRvd3MvZGNlLmNdCiAgICAgICAgUmVtb3ZlZCBzb21lIG9sZGVyIElzSWNvbmljIGNoZWNrcyBmcm9tIEdldERDRXgoKSwgZnVuY3Rpb25hbGl0eQogICAgICAgIGlzIG5vdyBpbiBub25jbGllbnQgYW5kIGdlbmVyaWMgd2luZSB3aW5kb3cgaGFuZGxpbmcgY29kZS4KICAgICAgICBMb3RzIG9mIHRoYW5rcyB0byBBbGV4YW5kcmUgSnVsbGlhcmQgYWxsIHRoZSBoaW50cyBhbmQKICAgICAgICBoZWxwLi4uCgogICAgICAgICogW3dpbmRvd3MvZGVmd25kLmNdCiAgICAgICAgUmVtb3ZlZCBjYWxsIHRvIE5DX0hhbmRsZU5DUGFpbnRJY29uKCkgdW5kZXIgY2FzZSBXTV9QQUlOVElDT04sCiAgICAgICAgV01fUEFJTlRJQ09OIG5vdyBjYWxscyBOQ19IYW5kbGVOQ1BhaW50LiAgCgogICAgICAgICogW3dpbmRvd3MvZXZlbnQuY10KICAgICAgICBSZW1vdmVkIElzSWNvbmljIGNoZWNrcy4KCiAgICAgICAgKiBbd2luZG93cy9pY29uLmNdCiAgICAgICAgUmVtb3ZlZCBldmVyeXRoaW5nIGluIHRoaXMgZmlsZSBmb3Igbm93Li4uIGNvdWxkIGJlIHVzZWQgbGF0ZXIuCiAgICAgICAgSWNvbiBmdW5jdGlvbmFsaXR5IGlzIG5vdyBoYW5kbGVkIGJ5IHRoZSBnZW5lcmljIHdpbmUgd2luZG93cwogICAgICAgIGhhbmRsaW5nIGZ1bmN0aW9ucy4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL21kaS5jXQogICAgICAgIEFkZGVkIGEgU2hvd1dpbmRvdyBpbiBNRElSZXN0b3JlQ2hpbGQoKS4gIE1ESSBjaGlsZCB3aW5kb3dzIG5vdwogICAgICAgIHNob3cgdXAgd2hlbiBkZWljb25pZmllZC4gIFJlbW92ZWQgSXNJY29uaWMgY2hlY2tzLgoKICAgICAgICAqIFt3aW5kb3dzL21lc3NhZ2UuY10KICAgICAgICBSZW1vdmVkIG9sZCBpY29uIHJvdXRpbmVzIGZyb20gaGFyZHdhcmVfZXZlbnQoKS4KCiAgICAgICAgKiBbd2luZG93cy9ub25jbGllbnQuY10KICAgICAgICBDaGFuZ2VkIE5DX0hhbmRsZU5DQ2FsY1NpemUoKSBzbyBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc2l6ZQogICAgICAgIG9mIGFuIGljb24gd2luZG93LiAgTWFkZSBOQ19JbnRlcm5hbE5DSGl0VGVzdCgpIG9uIGFuIEljb25pYwogICAgICAgIHdpbmRvdyBhbHdheXMgcmV0dXJuIEhUQ0FQVElPTi4gIE1hZGUgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrKCkKICAgICAgICBvbiBhbiBJY29uaWMgd2luZG93IGFsd2F5cyBzZW5kIGEgU0NfUkVTVE9SRSBtZXNzYWdlLgoKICAgICAgICAqIFt3aW5kb3dzL3BhaW50aW5nLmNdCiAgICAgICAgQ2hhbmdlZCBSZWRyYXdXaW5kb3coKSBzbyBpdCBkb2Vzbid0IHJlZHJhdyBhbiBpY29uaWMgd2luZG93CiAgICAgICAgdW5sZXNzIGl0IGhhcyB0byAobm8gaWNvbiBmb3IgdGhpcyBjbGFzcykuCiAgICAgICAgCiAgICAgICAgKiBbd2luZG93cy93aW4uY10KICAgICAgICBSZW1vdmVkIGNyZWF0aW9uIG9mIHNlcGVyYXRlIGljb24gd2luZG93IGZyb20gQ3JlYXRlV2luZG93RXgoKS4KICAgICAgICAKICAgICAgICAqIFt3aW5kb3dzL3dpbnBvcy5jXQogICAgICAgIEFkZGVkIHNhdmluZyBhbmQgcmVzdG9yaW5nIG9mIHdpbmRvdyByZWN0YW5nbGUgZHVyaW5nCiAgICAgICAgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24gdG8gU2hvd1dpbmRvdygpLiAgQWRkZWQKCWZ1bmN0aW9ucyB0byByZWN1cnNpdmVseSBoaWRlIGFuZCBzaG93IGNoaWxkcmVuLi4uIGNhbGxlZAoJYnkgU2hvd1dpbmRvdyBkdXJpbmcgaWNvbmlmaWNhdGlvbi9kZWljb25pZmljYXRpb24uCgpTYXQsIDI3IEF1ZyAxOTk0IDE4OjQ3OjM0ICswMTAwIChNRVQgRFNUKSAgbWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZSAoTWljaGFlbCBQYXRyYSkKCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCiAgICAgICAgV2FpdE1lc3NhZ2UoKTogRml4ZWQgaGFuZGxpbmcgb2Ygd21fdGltZXItbWVzc2FnZXMKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpbmROZXh0RkNCKCk6IFJld3JpdHRlbiB0byBzdXBwb3J0IG90aGVyIGZ1bmN0aW9ucyB0aGFuIGp1c3QKICAgICAgICByZXR1cm5pbmcgdGhlIHZvbHVtZSBsYWJlbAoKCSogW21pc2MvZmlsZS5jXQoJT3BlbkZpbGUoKTogRml4IGluIGhhbmRsaW5nIG9mIE9GX0NSRUFURQoKV2VkIEF1ZyAyNCAxOTo0MDo0MiBQRFQgMTk5NCAgQW5kcmV3IExhZ29kemluc2tpICAoYW5kcmV3QG5ldGNvbS5jb20pCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIFNldFBhcmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWRkZWQgU2V0UGFyZW50LgoKRnJpIEF1ZyAxOSAxNjozNzowMCAxOTk0ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQGJyYWRmb3JkLmFjLnVrPgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJTWFueSBjaGFuZ2VzIHRocm91Z2hvdXQgZmlsZSB0byBjb3JyZWN0IGhhbmRsaW5nIG9mIHNoYXJlZCBtZW1vcnkKCWZ1bmN0aW9uIHJldHVybiBjb2Rlcy4gRnJlZUJTRCBhbmQgU3VuT1Mgc2htIGZ1bmN0aW9ucyByZXR1cm4KCS0xIG5vdCAwIG9uIGVycm9yLiBJZiBMaW51eCBpcyBkaWZmZXJlbnQsIHRoZXNlIGNoYW5nZXMKCXdpbGwgaGF2ZSB0byBiZSBiYWNrZWQgb3V0LgoJQ2xlYW51cFNlbGVjdG9ycygpOiB0aGlzIGlzIGEgbmV3IChpbnRlcm5hbCkgY2FsbCB0byBmcmVlCgl1cCBhbGwgc2VsZWN0b3JzIChhbmQgc2htIGhhbmRsZXMvbWVtb3J5KSBmb3IgdXNlIG9uIGV4aXQuCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0KCUNoYW5nZSBjb21tZW50IHRvIHJlZmxlY3QgbmV3IHVzZSBvZiBzaG1fa2V5CgoJKiBbbWlzYy9tYWluLmNdCgljYWxsZWRfYXRfZXhpdCgpOiBhZGQgY2FsbCB0byBDbGVhbnVwU2VsZWN0b3JzKCkKCk1vbiBBdWcgMjIgMTg6MTk6MjUgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJVXNlIE9CTV9DSEVDS0JPWEVTIHRvIGRyYXcgY2hlY2sgYm94ZXMgd2l0aCBjb3JyZWN0IGNvbG9ycy4KCUZpeGVkIGJ1ZyB3aXRoIFdNX1NFVFRFWFQgaGFuZGxpbmcuCglBIGZldyBkcmF3aW5nIG9wdGltaXNhdGlvbnMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJSW1wbGVtZW50ZWQgY29ycmVjdCBcdCBhbmQgXGEgaGFuZGxpbmcgaW4gbWVudSBpdGVtcy4KCUltcGxlbWVudGVkIGhlbHAgaXRlbXMgKGZsdXNoIHJpZ2h0KSBvbiBtZW51IGJhci4KCUFkZGVkIFdNX0VOVEVSTUVOVUxPT1AgYW5kIFdNX0VYSVRNRU5VTE9PUCBtZXNzYWdlcy4KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIFNTX0lDT04gY29udHJvbHMgYW5kIGltcGxlbWVudGVkIFNUTV9TRVRJQ09OIG1lc3NhZ2UKCWhhbmRsaW5nLgoKCSogW2NvbnRyb2xzL3dpZGdldC5jXQoJU2V0IGN1cnNvciB0byBJRENfQVJST1cgZm9yIGJ1aWx0LWluIGNsYXNzZXMuCgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10KCUJhY2tpbmcgc3RvcmUgaXMgbm93IG9mZiBieSBkZWZhdWx0LgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglVc2UgWCByZWdpb25zIGZvciByZWN0YW5nbGUgYW5kIHBvbHlnb24gcmVnaW9uczogKm1ham9yKiBzcGVlZAoJaW1wcm92ZW1lbnQuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIHRoZSBmaXggZm9yIGludGVnZXIgaWRzIGluIGNvbnRyb2xzLiBTU19JQ09OIGNvbnRyb2xzIGluCglkaWFsb2dzIHNob3VsZCB3b3JrIG5vdy4KCUltcGxlbWVudGVkIERTX0FCU0FMSUdOIHN0eWxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJnbigpLgoJTmV3IGludGVybmFsIGZ1bmN0aW9uIEdSQVBIX0RyYXdCaXRtYXAoKSB0byBkcmF3IGJpdG1hcHMgZmFzdGVyCgl0aGFuIHdpdGggQ3JlYXRlQ29tcGF0aWJsZURDKCkgKyBCaXRCbHQoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCURldGVybWluaW5nIHRoZSB3aW5kb3cgZm9yIGEgbW91c2UgbWVzc2FnZSBpcyBub3cgZG9uZSBhdAoJR2V0TWVzc2FnZSgpIHRpbWUuCglNb2RpZmllZCBQZWVrTWVzc2FnZSgpIGhhbmRsaW5nIHRvIGF2b2lkIG5lZWRsZXNzbHkgZmx1c2hpbmcgdGhlCglvdXRwdXQgcXVldWUuCgoJKiBbd2luZG93cy90aW1lci5jXQoJQ2hlY2sgZm9yIHJlc3RhcnQgb2YgYSB0aW1lciAoU2V0VGltZXIgY2FsbCB3aXRoIHRoZSBzYW1lIGh3bmQgYW5kCglpZCB0aGFuIGFuIGV4aXN0aW5nIHRpbWVyKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEF1ZyAgOSAyMzo1ODoyOSBNRVQgRFNUIDE5OTQJPGVyaWtAaGFja3RpYy5ubD4KCgkqIFttaXNjL2ZpbGUuY10KCU9wZW5GaWxlKCk6IENvbXBsZXRseSByZXdyaXR0ZW4uCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJQ3JlYXRlRmlsZSgpOiBGaXhlZCB3cm9uZyBtb2RlIGluIGNhbGwgdG8gb3Blbi4KCU9wZW5FeGlzdGluZ0ZpbGUoKTogSW1wbGVtZW50ZWQgZmlsZSBzaGFyaW5nLgoJRmluZE5leHQoKTogRml4ZWQuCglDcmVhdGVOZXdGaWxlKCk6IEZpeGVkIHdyb25nIG1vZGUgaW4gY2FsbCB0byBvcGVuLgoJZkxvY2soKTogQWRkZWQgdG8gaGFuZGxlIHJlY29yZCBsb2NraW5nLgoJR2V0RmlsZUF0dHJpYnV0ZSgpOiBBZGRlZC4KCUFzIGEgcmVzdWx0LCBBSCA9IDB4NWMsIDB4MDksIGFuZCAweDBiIHdlcmUgY2hhbmdlZC4KCgkqIFttaXNjZW11L2ludDJmLmNdCglBSCA9IDB4MTA6IFNIQVJFIGluc3RhbGxhdGlvbiBjaGVjawogCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFjY2Vzc1Jlc291cmNlKCk6IEZpeGVkLiBBIG5ldyBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSByZXR1cm5lZCBieQoJZXZlcnkgY2FsbCB0byBBY2Nlc3NSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvdXRpbGl0eS5jXQoJd3ZzcHJpbnRmKCk6IEZpeGVkLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpbmRNZW51SXRlbSgpOiBGaXhlZCAoaGFuZGxpbmcgZm9yIG5Qb3MgPT0gLTEgYWRkZWQpLgkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJQ3JlYXRlV2luZG93RXgoKTogQWRkZWQgY2FsbCB0byBXSU5QT1NfR2V0TWluTWF4SW5mby4KCgkqIFtDb25maWd1cmVdCglBZGRlZCB0d28gb3B0aW9ucyBmb3IgYSBwcm9jZXNzb3IgZW11bGF0b3IgdGhhdCBtaWdodCBiZQoJcGx1Z2dlZCBpbiBsYXRlci4uCgoJKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdG9vbGhlbHAuaF0gW2lmMTYzMi90b29saGVscC5zcGVjXQoJQ3JlYXRlTmV3VGFzaygpIHN0b3JlcyByZWFsIG1vZHVsZW5hbWUgaW5zdGVhZCBvZiAnVEFTS3h4eHgnLgoJQWRkZWQgVGFza0ZpcnN0KCksIFRhc2tOZXh0KCksIFRhc2tGaW5kSGFuZGxlKCkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJQWRkZWQgc3R1YiBmb3IgTWVtTWFuSW5mbygpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgc3R1YiBmb3IgR2V0VGFiYmVkVGV4dEV4dCgpLgoKCSogW21pc2NlbXUvKl0KCUNoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gcmVnaXN0ZXJzLiBQbGVhc2UgZG9uJ3QgYWNjZXNzCiAJdGhlIGNvbnRleHQgc3RydWN0dXJlLgoJZml4IGZvciBHZXRTeXN0ZW1UaW1lKCkgYnkgPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PiBhZGRlZC4KCgkqIFttaXNjL2xzdHIuY10KCUZpeGVkIGJ1ZyBpbiBBbnNpVXBwZXIoKSAmIEFuc2lMb3dlcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglidWdmaXggaW4gZ2V0c29ja29wdCgpL3NldHNvY2tvcHQoKTogd2luc29jayB1c2VzIGRpZmZlcmVudCB2YWx1ZXMKCXRoYW4gdW5peC4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgRElCX1NldEltYWdlQml0c19STEVbNDhdIHRvIHN1cHBvcnQgY29tcHJlc3NlZCBiaXRtYXBzLgoKTW9uIEF1ZyAgOCAyMToxMjozMyAxOTk0ICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgV01fQ09QWSwgV01fQ1VUIGFuZCBXTV9QQVNURSBtZXNzYWdlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10gW2luY2x1ZGUvZGlhbG9nLmhdCglNb2RpZmllZCBkaWFsb2cgY29kZSB0byBjcmVhdGUgbmV3IGhlYXAgZm9yIGVkaXQgY29udHJvbHMKCXVubGVzcyBEU19MT0NBTEVESVQgc3R5bGUgaXMgc2V0LgoKVGh1IEF1ZyAgNCAxODo1MDo1NiAxOTk0ICBBbGV4YW5kcmUgSnVsbGlhcmQgIChqdWxsaWFyZEBsYW1pc3VuLmVwZmwuY2gpCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9zdGF0aWMuY10KCVJlbW92ZWQgdW5uZWVkZWQgR2xvYmFsVW5sb2NrKCkgY2FsbHMuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9tZW51LmhdCglMb3RzIG9mIGNoYW5nZXMsIGZpeGVkIGEgbG90IG9mIG9sZCBidWdzIGFuZCBpbnRyb2R1Y2VkIGEgbG90IG9mCgluZXcgb25lcyA6LSkKCS0gQ2hhbmdlZCBtZXNzYWdlIGxvb3AgdG8gdXNlIE1TR19HZXRJbnRlcm5hbE1lc3NhZ2UoKS4KCS0gRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIG1haW4gd2luZG93IHRvIGxvc2UgYWN0aXZhdGlvbiB3aGVuCgkgIGRpc3BsYXlpbmcgYSBtZW51LgoJLSBDb3JyZWN0bHkgc2VuZCBpbml0aWFsaXNhdGlvbiBtZXNzYWdlcyAoV01fSU5JVE1FTlVQT1BVUCkuCgktIEltcGxlbWVudGVkIEVuZE1lbnUoKSBhbmQgTG9va3VwTWVudUhhbmRsZSgpLgoJLSBDaGFuZ2VkIGludGVybmFsIHN0cnVjdHVyZXMgdG8gYmUgYXMgY29tcGF0aWJsZSBhcyBwb3NzaWJsZSB3aXRoCgkgIE1TLVdpbmRvd3MuCgktIEFsbG9jYXRlZCBldmVyeXRoaW5nIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIGhlYXAuCgktIFByZWZpeGVkIGFsbCBpbnRlcm5hbCBmdW5jdGlvbiBuYW1lcyB3aXRoIE1FTlVfIGFuZCBkZWNsYXJlZAoJICB0aGVtIHN0YXRpYy4KCS0gTW92ZWQgIkFib3V0IFdpbmUuLi4iIGhhbmRsaW5nIHRvIE5DX0hhbmRsZVN5c0NvbW1hbmQoKS4KCS0gTXVsdGktbGluZSBtZW51cyBzaG91bGQgbm93IHdvcmsgY29ycmVjdGx5LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbb2JqZWN0cy9iaXRtYXAuY10KCUFkZGVkIHRoZSBwb3NzaWJpbGl0eSB0byBjcmVhdGUgT0VNIGJpdG1hcHMgZGlyZWN0bHkgYXMgWCBiaXRtYXBzLgoKCSogW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUZpeGVkIEdldERDT3JnKCkgdG8gcmV0dXJuIHNjcmVlbiBjb29yZGluYXRlcy4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGRvdWJsZS1jbGljayBjaGVja3Mgd2hlbiB0aGUgbWVzc2FnZSBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZQoJcXVldWUuCglGaXhlZCBNU0dfR2V0SW50ZXJuYWxNZXNzYWdlKCkgdG8gc2VuZCBXTV9FTlRFUklETEUgbWVzc2FnZXMuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1ZyBmaXggaW4gc3lzdGVtIG1lbnUgaGl0LXRlc3QgY2FsY3VsYXRpb24uCglBIGZldyBjaGFuZ2VzIGZvciBuZXcgbWVudSBmdW5jdGlvbnMuCgpUaHUgQXVnIDExIDE3OjUxOjAyIDE5OTQgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAYnJhZGZvcmQuYWMudWs+CgogICAgICAgICogW2NvbnRyb2xzL2VkaXQuY10KICAgICAgICBCdWcgZml4IGluIEVkaXRfTkNDcmVhdGVNZXNzYWdlCiAgICAgICAgZXMtPnRleHRsZW4gd2FzIGJlaW5nIHVzZWQgYmVmb3JlIGJlaW5nIHNldAoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgQnVnIGZpeCBpbiBNRU5VX0RyYXdNZW51SXRlbQogICAgICAgIGRvbid0IHRyeSB0byB3cml0ZSB0ZXh0IGlmIE5VTEwgcG9pbnRlciBwYXNzZWQKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEF1ZyAgNCAwNzoxODowMiAxOTk0ICBNaWNoYWVsIFBhdHJhICA8bWlja3lAbWFyaWUucGh5c2lrLnR1LWJlcmxpbi5kZT4KCiAgICAgICAgKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXYWl0TWVzc2FnZSgpIChVU0VSLjExMikuCgogICAgICAgICogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBXYWl0TWVzc2FnZS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJV01fRVJBU0VCS0dORDogQWRkZWQgc3VwcG9ydCBmb3IgaGJyQmFja2dyb3VuZD1DT0xPUl94eHguCgogICAJKiBbbWlzY2VtdS9pbnR7MTMsMjEsMmF9LmNdCiAgICAgICAgKiBbbWlzY2VtdS9JbWFrZWZpbGVdCgkqIFtzaWduYWwvbG9hZGVyLmNdCglBZGRlZCBhIGZldyBiYXNpYyBkaXNrIGluZm9ybWF0aW9uIGFuZCBkaWFnbm9zdGljIGZ1bmN0aW9ucyB0bwoJcHJldmVudCBwcm9ncmFtcyB1c2luZyB0aGlzIGZ1bmN0aW9uIGZyb20gY3Jhc2hpbmcuIEFsbCBkcml2ZXMKCWFyZSBjbGFpbWVkIHRvIGJlIHJlbW90ZSBvbmVzLCBzbyBkaXJlY3QgSS9PIGlzbid0IGFsbG93ZWQuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRURJVF9Xcml0ZVRleHQoKTogQWRkZWQgY29kZSB0byBjb3JyZWN0bHkgZXJhc2UgdGhlIHJlbWFpbmluZyBzcGFjZQoJb2YgdGhlIGVkaXQtY29udHJvbCBpZiB0aGUgc2l6ZSBvZiB0aGUgY29udHJvbCBoYXMgY2hhbmdlZCBzaW5jZWQgaXQncwoJY3JlYXRpb24uCgpUdWUgSnVsIDI2IDIyOjA1OjU0IE1FVCBEU1QgMTk5NCBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9tb3VzZS5zcGVjXQoJQWRkZWQgbW91c2UuZGxsIGVudHJ5LCBubyBmdW5jdGlvbnMuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIEFjY2Vzc1Jlc291cmNlKCkuIAoKCSogW21pc2Mva2V5Ym9hcmQuY10sIGFkZGVkIFtpbmNsdWRlL2tleWJvYXJkLmhdCglDaGFuZ2VkIGZ1bmN0aW9ucyB0byByZXR1cm4gbW9yZSB1c2VmdWwgdmFsdWVzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglIYWNrZWQgRElBTE9HX0dldENvbnRyb2woKSB0byBzdXBwb3J0IHJlc291cmNlcyB3aGljaAoJaGF2ZSAweGZmMDAgLSAweGZmZmYgYXMgaWQuICoqIE5lZWRzIHRvIGJlIGRvbmUgcHJvcGVybHkgYnkKCXNvbWVvbmUgd2hvIGtub3dzIHRoZSBORSBmaWxlZm9ybWF0ICoqCgpKdWwgMjksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGQgbmV3IHN0dWIgZm9yIEVuYWJsZUhHYXJkd2FyZUlucHV0KCkgZnVuY3Rpb24uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGQgY29kaW5nIGZvciBIV05EX0JST0FEQ0FTVCBpbiBQb3N0TWVzc2FnZSgpLgoKCSogW21pc2MvZmlsZS5jXQoJQWRkIGNvZGluZyBmb3IgT3BlbkZpbGUoKSBhbHNvIHNlYXJjaCBpbiBXaW5kb3dQYXRocy4KCgkqIFttaXNjL21tc3lzdGVtLmNdCgkqIFttaXNjL2F1ZGlvLmNdCgkqIFttaXNjL21tYXV4LmNdCgkqIFttaXNjL21jaWNkYS5jXQoJQ2hhbmdlICNpbmNsdWRlICJsaW51eC9zb3VuZGNhcmQuaCIgYnkgI2luY2x1ZGUgInN5cy9zb3VuZGNhcmQuaCIKCUFkZCBjb2RpbmcgaW4gTU1JTyBmdW5jdGlvbnMuIE5vdywgbW1pb0Rlc2NlbmQoKSBjYW4gZmluZCBXQVYgY2h1bmtzLgoJU25kUGxheVNvdW5kICYgTUNJX0VMRU1FTlQgbm93IHVzZSBNTUlPIGFuZCBhZGp1c3QgdG8gcHJvcGVyIGZvcm1hdHMuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEp1bCAxOCAyMzo1NToxMyBNRVQgRFNUIDE5OTQKCgkqIFtpZjE2MzIvY2FsbC5TXQoJQ2FsbFRvMTYoKTogYWRkZWQgYG1vdiAlZWF4LCVlZHgnIGp1c3QgYmVmb3JlIGxjYWxsLAoJdG8gbWFrZSBzdXJlIHRoYXQgRFggY29udGFpbiB0aGUgRExMJ3MgaGluc3RhbmNlIHdoZW4KCWluaXRpYWxpc2VkLgoKCUNhbGxUbzMyXzE2KCkgYWRkZWQsIGVxdWFsIHRvIENhbGxUbzMyKCkgZXhjZXB0IGZvcgoJb25lIHRoaW5nOiBpdCBzYXZlcyBEWCBhbmQgCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHNvbWUgY29kZSB0byBzdXBwb3J0IDE2IGFuZCAzMiBiaXQgcmV0dXJuIHZhbHVlcy4KCgkqIFsxNjMyL3trZXJuZWwsdXNlcn0uc3BlY10KCUNoYW5nZWQgbW9zdCBvZiB0aGUgYHBhc2NhbCcgc3R5bGUgdG8gcGFzY2FsXzE2IHdoZW4KCWZ1bmN0aW9uIHJldHVybmVkIGEgMTZiaXQgdmFsdWUuCgpUdWUgSnVsIDE5IDE4OjQwOjI1IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9tZW51LmNdCglSZW9yZ2FuaXplZCBzaXppbmcgYW5kIGRyYXdpbmcgY29kZSB0byBpbXBsZW1lbnQgbXVsdGktbGluZSBtZW51cy4KCUltcGxlbWVudGVkIE1FTlVCUkVBSyBzdHlsZS4KCVVzZSBzeXN0ZW0gY29sb3JzIHRvIGRyYXcgbWVudXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQnVnIGZpeCBpbiBDT0xPUl9Jc1NvbGlkKCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglCdWcgZml4IGluIEZPTlRfR2V0TWV0cmljcygpOiBjYWxjdWxhdGUgYXZlcmFnZSBjaGFyYWN0ZXIgd2lkdGgKCW9ubHkgb24gZXhpc3RpbmcgY2hhcnMgKGRpYWxvZ3MgbG9vayBtdWNoIGJldHRlcikuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4IGluIERyYXdUZXh0KCk6IHVzZSB0ZXh0IGNvbG9yIHRvIHVuZGVybGluZSBtbmVtb25pYy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBXTV9OQ0hJVFRFU1QgaGFuZGxpbmcgdG8gY29wZSB3aXRoIG11bHRpLWxpbmUgbWVudSBiYXJzLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUFkZGVkIHN5c3RlbSBvYmplY3RzIGZvciBtZW51IGNvbG9ycy4KCk1vbiBKdWwgMTggMTk6MzI6MDggUERUIDE5OTQgIEFuZHJldyBMYWdvZHppbnNraSAgKGFuZHJld0BuZXRjb20uY29tKQoKICAgICAgICAqIFtjb250cm9scy9tZW51LmNdCiAgICAgICAgRml4ZWQgYnVnIGluIFNlbGVjdFByZXZJdGVtIHRoYXQgY2F1c2VkIHNlcGVyYXRvcnMgdG8gbm90IGJlCglza2lwcGVkIHdoZW4gdXNpbmcgdGhlIHVwIGFycm93IGtleS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IEp1bCAxNCAxNzo1MDo0NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW0NvbmZpZ3VyZV0KCUF1dG9kZXRlY3RzIExpbnV4IHZlcnNpb24gKGlmIHJ1bm5pbmcgTGludXgpLgoKCSogW2xvYWRlci9zaWduYWwuY10KCU5ldyBzaWduYWxzIGZvciBMaW51eC4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglOZXcgc3RydWN0dXJlIGZpZWxkIGluIHN5cyBjYWxsLgoKU3VuIEp1bCAxMCAxOTozMTozNCAxOTk0ICBPbGFmIEZsZWJiZSAgKG9sYWZAZHJhZ29uKQoKICAgICAgICAqIFtsb2FkL3Jlc291cmNlLmNdIAogICAgICAgICAgZml4ZWQgTWVtb3J5IChSZXNvdXJjZSkgTGVhay4KCiAgICAgICAgKiBbbG9hZC9tYWluLmNdIAogICAgICAgICAgZml4ZWQgYSBwcmludGYuCgpUdWUgSnVsIDEyIDE4OjUwOjM0IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGxhbWlzdW4uZXBmbC5jaCkKCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdhbGxwYXBlciAob25seSAxNiBjb2xvcnMgZm9yIG5vdykuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVByZWxpbWluYXJ5IHdvcmsgdG8gYWxsb3cgbXVsdGktbGluZSBtZW51cy4KCgkqIFttaXNjL21haW4uY10KCU5vIGJhY2tpbmcgc3RvcmUgb24gZGVza3RvcCB3aW5kb3cgKG5vdCB1c2VmdWwpLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQSBmZXcgZml4ZXMgdG8gRHJhd1RleHQoKSB0byBtYWtlIHVuZGVybGluZXMgdW5kZXIgbW5lbW9uaWMKCWxldHRlcnMgdG8gbG9vayBiZXR0ZXIuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTW9yZSBmaXhlcyB0byBHUkFQSF9EcmF3QXJjKCksIGFuZCBzb21lIGZpeGVzIHRvIFBvbHlnb24oKS4KCUltcGxlbWVudGVkIFBvbHlQb2x5Z29uKCkgKHBhcnRpYWxseSB3b3JraW5nKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTmV3IGZ1bmN0aW9uIFdJTlBPU19TZW5kTkNDYWxjU2l6ZSgpLgoJQ2xlYW5lZCB1cCBTZXRXaW5kb3dQb3MoKSBhbmQgYWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IKCW11bHRpLWxpbmUgbWVudXMuCgpNb24gSnVsIDExIDE5OjE1OjUxIDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQ2hhbmdlcyB0byB3b3JrIGFzIGEgbGlicmFyeS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10gCglJZmRlZmVkIG1vZHVsZS4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCUNoYW5nZXMgdG8gYWxsb3cgbGlua2luZyB3aXRoIFdpbmVMaWIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtYWNybyBXSU5FTElCX1VOSU1QCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCVdoZW4gY29tcGlsaW5nIFdpbmVMaWIsIEdldFByb2NBZGRyZXNzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCgoJKiBbbG9hZGVyL21haW4uY10KCUFkZGVkIGVtcHR5IEluaXRETEwgd2hlbiB1c2luZyBXaW5lTGliLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJU29tZSBwYXJ0cyBvZiB0aGUgbG9hZGVyIGFyZSBuZWVkZWQgZm9yIFdpbmVMaWIsIGlmZGVmZWQgY29ycmVjdGx5CgoJKiBbbWlzYy97YXVkaW8uYyxtY2ljZGEuYyxtbWF1eC5jLG1tc3lzdGVtLmNdCglEaXNhYmxlIGNvbXBpbGF0aW9uIG9mIG1vZHVsZSB3aGVuIGNvbXBpbGluZyBXaW5lTGliLgoKCSogW3Rvb2xraXQvaGVhcC5jXQoJRml4ZWQgc21hbGwgYnVnLiAgV2hlbiBwYXNzZWQgYW4gaW52YWxpZCBoYW5kbGUgV2luZUxpYiB3b3VsZAoJY3Jhc2gsIG5vdyByZXR1cm4gTlVMTC4KCgkqIFt0b29sa2l0L3dpbm1haW4uY10KCUNhbGwgQ3JlYXRlTmV3VGFzayBpbiBfV2luTWFpbi4KClN1biBKdWwgMTAgMDk6MDg6MDIgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL3dpZGdldC5jXQoJTW9yZSBjaGFuZ2VzIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSB3aXRoIFdpbmRvd3MnIGVkaXQKCWNvbnRyb2wuICBGaW5pc2hlZCBvZmYgdGFiIHN0b3Agc3VwcG9ydC4KCk1vbiBKdWwgMTEgMjE6MDU6MDIgTUVUIERTVCAxOTk0ICBFcmlrIEJvcyA8ZXJpa0BoYWNrdGljLm5sPgoKCSogW2lmMTYzMi9yZWxheS5jXQoJIyBvZiBvcmRpbmFscyBpbiBzaGVsbC5kbGwgY2hhbmdlZCB0byAxMDMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJc3RpLCBjbGkgd2lsbCBub3cgYmUgaWdub3JlZC4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglBZGRlZCBzdHViIGZvciBHZXRTeXNDb2xvckJydXNoKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biwgMyBKdWwgMTk5NCAyMDoxNTo1NiArMDEwMCAoQlNUKSAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUJ1ZyBmaXhlcyBhbmQgdGlkeWluZyB1cC4gIFByZWxpbWluYXJ5IHRhYiBzdG9wIHN1cHBvcnQKCShkb2Vzbid0IHdvcmsgeWV0KS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJUmV2ZXJzZWQgb3JkZXIgb2YgYnV0dG9ucyBpbiBDaGVja1JhZGlvQnV0dG9ucyBzbyB0aGF0IGFsbAoJYnV0dG9ucyBhcmUgbm93IGRpc3BsYXllZC4KClR1ZSBKdWwgIDUgMTg6MzA6MjQgMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBub3NhdmV1bmRlcnMgb3B0aW9uLCByZXBsYWNlZCBieSBoYW5kbGluZwoJdGhlIENTX1NBVkVCSVRTIGZsYWcuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgdGhlIGZpeCBmb3IgbmVnYXRpdmUgc2l6ZSBpbiBjbGFzcyBleHRyYSBieXRlcyB0bwoJYXZvaWQgbW9kaWZ5aW5nIHRoZSBjYWxsZXIncyBkYXRhLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXg6IHN5c3RlbSBmb250IG11c3QgYmUgYSBwcm9wb3J0aW9uYWwgZm9udC4KCUZpeGVkIGEgYnVnIHRoYXQgY2F1c2VkIHRoZSBkZWZhdWx0IHBlbiB0byBub3QgYmUgc2VsZWN0ZWQKCWNvcnJlY3RseSBpbiBhIERDLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUJ1ZyBmaXggaW4gR1JBUEhfRHJhd0FyYygpLiBUaGFua3MgdG8gQWRyaWFubyBBemV2ZWRvIGZvcgoJbm90aWNpbmcgaXQuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJUmVtb3ZlZCBpbmNvcnJlY3Qgc2VsZWN0aW5nIG9mIGRlZmF1bHQgb2JqZWN0cyBpbiBCZWdpblBhaW50KCkKCShubyBsb25nZXIgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIGZpeCBpbiBkYy5jKS4KCkp1bCA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJKiBbbWlzYy9hdWRpby5jXQoJQWRkIG1vcmUgY29kZSB0byBpbnRlcmZhY2UgJy9kZXYvZHNwJy4KCgkqIE5ldyBmaWxlIFttaXNjL21jaWNkYS5jXQoJQ3JlYXRlIGFuIE1DSV9ERVZUWVBFX0NEX0FVRElPIGRyaXZlciBjb25uZWN0ZWQgdG8gJy9kZXYvc2JwY2QnLgoKCSogTmV3IGZpbGUgW21pc2MvbW1hdXguY10KCVN0dWJzIHRvIG1ha2UgYSBmdXR1cmUgZHJpdmVyIGNvbm5lY3RlZCB0byAnL2Rldi9taXhlcicuCgoJKiBbd2luZG93cy93aW4uY10KCVRlbXBvcmFyeSBwYXRjaCB0byBDcmVhdGVXaW5kb3dFeCgpIGZvciByZXNldGluZyBuZWdhdGl2ZQoJY29vcmRpbmF0ZXMgdG8gMCwwIDsgYmVjYXVzZSAnc291bmRyZWMuZXhlJyBnaXZlIG5lZ2F0aXZlIHZhbHVlcwoJYW5kIEkgbmVlZCBpdCB0byB3b3JrIG9uIE1NU1lTVEVNIC4uLiA6LSkKCgkqIFttaXNjZW11L2ludDJmLmNdCglhZGQgYSBzdHViICdkb19pbnQyZl8xNicgKGZ1bmN0aW9uIDB4MTYpIGZvciBETVBJIHNlcnZlci4KCk1vbiBKdW4gMjAgMTA6MDg6NDAgQlNUIDE5OTQgIFdpbGxpYW0gU21pdGggKHdvc0BkY3Mud2Fyd2ljay5hYy51aykKCgkqIGluY2x1ZGUvY29tbS5oCglOZXcgZmlsZSAtLSBzb21lIGRlZmluaXRpb25zIHRoYXQgd2VyZSBpbiBjb21tLmMgbm93IG5lZWQgdG8KCWJlIHNoYXJlZCB3aXRoIG1pc2MvZG9zX2ZzLmMKCgkqIG1pc2MvY29tbS5jCglTb21lIGRlZmluaXRpb25zIG1vdmVkIGludG8gaW5jbHVkZS9jb21tLmgKCgkqIG1pc2MvZG9zX2ZzLmMgKERPU19HZXRFcXVpcG1lbnQpOgoJRml4ZWQgZXJyb3IgaW4gZXF1aXBtZW50IC0tIGJpdHdpc2Ugb3Igb2YgdHdvIHZhbHVlcyBzaG91bGQKCWJlIHVzZWQgaW5zdGVhZCBvZiBsb2dpY2FsIG9yLiAgQWxzbyBhZGRlZCBjb2RlIHRvIGNvcnJlY3RseQoJcmVwb3J0IHRoZSBudW1iZXIgb2Ygc2VyaWFsIGFuZCBwYXJhbGxlbCBkZXZpY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSnVuIDIwIDE0OjI2OjQxIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUFsbG93IG5lZ2F0aXZlIGJpdG1hcCBzaXplcy4KClN1biBKdW4gMTkgMTI6MDA6MDQgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgSW1wcm92ZWQgc2VsZWN0aW9uIGRpc3BsYXkuICBBZGRlZCBwcm9jZXNzaW5nIGZvciBXTV9TRVRGT05ULAogICAgICAgIEVNX1JFUExBQ0VTRUwsIEVNX0xJTkVMRU5HVEgsIEVNX1VORE8sIEVNX0VNUFRZVU5ET0JVRkZFUiwKICAgICAgICBFTV9HRVRIQU5ETEUsIEVNX1NFVEhBTkRMRSBtZXNzYWdlcy4gIFRleHQgYnVmZmVyIG5vdyBzdG9yZWQgb24gCiAgICAgICAgYXBwbGljYXRpb24ncyBsb2NhbCBoZWFwLgoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQ29ycmVjdGVkIGJ1ZyBpbiBSZWN0YW5nbGUoKS4gIFhGaWxsUmVjdGFuZ2xlIGhhcyB0aGUgc2FtZQogICAgICAgIHdpZHRoIGFzIFJlY3RhbmdsZSwgYnV0IFhEcmF3UmVjdGFuZ2xlIGlzIG9uZSBwaXhlbCB3aWRlcgogICAgICAgIGZvciB0aGUgc2FtZSBjby1vcmRpbmF0ZXMuCgogICAgICAgICogW21lbW9yeS9oZWFwLmNdIFtpbmNsdWRlL2hlYXAuaF0KICAgICAgICBBZGRlZCBIRUFQX0xvY2FsU2l6ZSBmdW5jdGlvbi4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9rZXlib2FyZC5jXQogICAgICAgIEltcHJvdmVtZW50cyB0byBLZXlTdGF0ZVRhYmxlIGFuZCBhZGRpdGlvbiBvZiBBc3luY0tleVN0YXRlVGFibGUuCiAgICAgICAgQWRkZWQgc3VwcG9ydGluZyBjb2RlIHRvIEdldEtleVN0YXRlIGFuZCBHZXRBc3luY0tleVN0YXRlIGFuZAogICAgICAgIG1lcmdlZCBtb3VzZSBidXR0b24gc3RhdGVzIGludG8gR2V0S2V5Ym9hcmRTdGF0ZS4KCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdIFtpbmNsdWRlL2FjY2VsLmhdCiAgICAgICAgQWRkZWQgcmVjb2duaXRpb24gb2YgU0hJRlQsIENPTlRST0wgYW5kIEFMVCBrZXlzIHRvCiAgICAgICAgVHJhbnNsYXRlQWNjZWxlcmF0b3IuCgogICAgICAgICogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZm9udC5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBBIGJpdCBtb3JlIG1ldGFmaWxlIHN1cHBvcnQuCgpTdW4gSnVuIDE5IDE3OjI5OjAwIE1FVCBEU1QgMTk5NCAgRXJpayBCb3MgKGVyaWtAaGFja3RpYy5ubCkKCiAgICAgICAgKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAgICAgICAgU2l6ZW9mUmVzb3VyY2UoKSBhbmQgQWxsb2NSZXNvdXJjZSgpIGFkZGVkLCBBY2Nlc3NSZXNvdXJjZSgpIHVwZGF0ZWQuCgogICAgICAgICogW2lmMTYzMi9rZXJuZWwuc3BlY10KICAgICAgICBGcmVlTGlicmFyeSgpIHVzZWQgZm9yIEZyZWVNb2R1bGUoKS4KCiAgICAgICAgKiBbd2luZG93cy9ncmFwaGljcy5jXQogICAgICAgIFJlY3RhbmdsZSgpOiBzd2FwIGxlZnQgJiByaWdodCBjb3JuZXJzIHdoZW4gcmlnaHQgPCBsZWZ0LAogICAgICAgIHN3YXAgdG9wICYgYm90dG9tIHdoZW4gYm90dG9uIDwgdG9wLgoKSnVuIDE5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeCBidWcgaW4gd2luZG93IHN0eWxlIG9mIHRoZSBhc3NvY2lhdGVkIGxpc3Rib3guCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2tpcCBzZXBhcmF0b3JzIGluIGtleWJvYXJkIG5hdmlnYXRpb24gYnkgdXNpbmcgbmV3IGludGVybmFsIAoJCWZ1bmN0aW9ucyBTZWxlY3RQcmV2SXRlbSgpICYgU2VsZWN0TmV4dEl0ZW0oKSwKCgkqIFttaXNjL3Byb2ZpbGUuY10KCUJ1ZyBmaXggaW4gR2V0UHJpdmF0ZVByb2ZpbGVJbnQoKSwgd2FzIGxpbWl0ZWQgdG8gNCBkaWdpdCwKCQlJbnRCdWYgbXVzdCBiZSBhbGxvYyB0byAoNSsxKT02LiBjaGFyIGluc3RlYWQgb2YgNS4KCgkqIFttaXNjL21haW4uY10KCVB1dCBjb2RlIGluIGZ1bmN0aW9ucyBTZXRFbnZpcm9ubWVudCgpICYgR2V0RW52aXJvbm1lbnQoKS4KCgkqIFttaXNjL3NoZWxsLmNdCglTdGFydCBwdXR0aW5nIHNvbWUgY29kZSBpbiBFeHRyYWN0SWNvbigpIGZ1bmN0aW9uLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCVNvbWUgY29kZSBmb3IgTU1UaW1lciBmdW5jdGlvbnMgJiB0aW1lcnMgbGlzdC4KCgkqIFttaXNjZW11L2ludDMxLmNdCglGZXcgc3R1YnMgZm9yIERQTUkgaW50ZXJydXB0IGNhbGxzLiBOb3RoaW5nIHdvcmsgeWV0LgoKTW9uIEp1biAyMCAwNzozNzo0MyBFRFQgMTk5NAlKb2huIFJpY2hhcmRzb24gKGpyaWNoYXJkQGNzLnVtbC5lZHUpCgoJKiBpbmNsdWRlL3dpbi5oICh0YWdXTkQpOgoJQWRkZWQgaWNvbiBmaWVsZHMgaWNvbiwgaEljb24gYW5kIHJlY3RDbGllbnRTYXZlIHRvIAoJdGhlIHRhZ1dORCBzdHJ1Y3QuCgoJKiB3aW5kb3dzL0ltYWtlZmlsZQoJQWRkZWQgaWNvbi5jIHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIGNvbXBpbGUKCgkqIHdpbmRvd3MvZGNlLmMgKEdldERDRXgpOgoJQWRkZWQgc29tZSBjaGVja3MgZm9yIGljb25pYyBtb2RlIGFuZCBwYXNzIGljb24gd2luZG93IGFzIGRyYXdhYmxlLAoJbm90IHRoZSByZWFsIHdpbmRvdy4KCgkqIHdpbmRvd3MvZGVmd25kLmMgKERlZldpbmRvd1Byb2MpCglBZGRlZCBQQUlOVElDT04gZGVmYXVsdCB3aW5kb3dzIHByb2NlZHVyZS4KCgkqIHdpbmRvd3MvZXZlbnQuYyAoRVZFTlRfRXhwb3NlKQoJQWRkZWQgY2hlY2sgZm9yIGljb25pYyB3aW5kb3cgZXhwb3NlLiBJZiBpY29uaWMgd2luZG93IGlzIGV4cG9zZWQKCXNlbmQgYSBXTV9QQUlOVElDT04gbWVzc2FnZQoKCSogd2luZG93cy9pY29uLmMgCglOZXcgZmlsZS4gIElDT05fSWNvbmlmeSwgSUNPTl9maW5kSWNvbkZyb21Qb2ludCwgSUNPTl9EZWljb25pZnkuCgoJKiB3aW5kb3dzL21kaS5jIChEZWZNRElDaGlsZFByb2MpCglUZXN0IGZvciBJc0ljb25pYyBkdXJpbmcgYSBTQ19SRVNUT1JFLCB0aGlzIGRvZXNuJ3Qgd29yayB5ZXQuCgoJKiB3aW5kb3dzL21lc3NhZ2UuYyAoaGFyZHdhcmVfZXZlbnQpCglMb29rcyBmb3IgaWNvbiBhcyB3ZWxsIGFzIHdpbmRvdyBub3cuCgoJKiB3aW5kb3dzL25vbmNsaWVudC5jIChOQ19IYW5kbGVTeXNDb21tYW5kLCBOQ19Eb05DUGFpbnRJY29uKQoJQWRkZWQgaWNvbmlmeS9kZWljb25pZnkgaW4gTkNfSGFuZGxlU3lzQ29tbWFuZCwgbmV3IGZ1bmN0aW9uCglOQ19Eb05DUGFpbnRJY29uIHdoaWNoIHBhaW50cyBhbiBpY29uLgoKCSogd2luZG93cy9wYWludGluZy5jIChCZWdpblBhaW50KQoJTWFkZSBhIEJlZ2luUGFpbnQgc2VsZWN0IHRoZSBTVE9DS19CTEFDS19QRU4sIFNUT0NLX1dISVRFX0JSVVNILAoJYW5kIFNUT0NLX1NZU1RFTV9GT05UIG9iamVjdHMgc2luY2UgdGhpcyBpcyAoaG9wZWZ1bGx5KSBkZWZhdWx0Cgl3aW5kb3dzIGJlaGF2aW9yLgoKCSogd2luZG93cy93aW4uaCAoQ3JlYXRlV2luZG93RXgpCglTZXQgdGhlIGRlZmF1bHQgYmFja2dyb3VuZCBjb2xvciBvZiBhIHdpbmRvdyB0byBiZSB3aGl0ZS4KCUNyZWF0ZSBpY29uIHdpbmRvdywgdHVybiBvZmYgTUlOSU1JWkUgaWYgaXQgaXMgb24sIHNpbmNlCglJIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0IGFzIG9mIHlldC4uLiByZWdpc3RlcgoJdGhlIGljb24gd2l0aCB0aGUgaHduZCBvZiBpdHMgd2luZG93IHNvIHdlIGNhbiBpZGVudGlmeSB3aGVyZQoJaWNvbiBtZXNzYWdlcyBhcmUgY29taW5nIGZyb20uCgpNb24gSnVuIDIwIDEwOjE1OjU5IDE5OTQgIE1pZ3VlbCBkZSBJY2F6YSAgKG1pZ3VlbEBzcGhpbngpCgoJKiB3aW5kb3dzL2V2ZW50LmM6IEFkZGVkIGEgaGFjayB0byBkZWZpbmUgWFBvaW50ZXIgd2hlbiB1c2luZwoJWDExUjQuIAoKCSogdG9vbGtpdC9oZWxsby5jOiBUZXN0IGFwcGxpY2F0aW9uIGZvciBXaW5lTGliLiBUbyBjb21waWxlIHlvdSdsbAoJbmVlZDogZ2NjIC1JaW5jbHVkZSAtRFdJTkVMSUIgLWcgaGVsbG8uYyAtYywgYW5kIHRvIGxpbmsgeW91J2xsCgluZWVkOiBnY2MgaGVsbG8ubyBsaWJ3aW5lLmEgLWxYMTEgLUwvdXNyL29wZW53aW4vbGliIC1sbSAKCgkqIHRvb2xraXQvaGVhcC5jOiBFeHRlbmRlZCB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgc2l6ZSBwZXIgY2h1bmsuCgoJKiBtaXNjL3N0cmVzcy5jIChHZXRGcmVlRmlsZUhhbmRsZXMpOiBGaXhlZCB0eXBvLgoKCSogbWlzYy9tYWluLmMgKG1haW4pOiBDaGFuZ2VzIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TLiAKCgkqIGxvYWRlci9saWJyYXJ5LmM6IENoYW5nZWQgc29tZSBpZmRlZnMgdG8gY29tcGlsZSBXaW5lTGliLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSnVuIDE0IDA4OjA5OjE0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvc2VsZWN0b3IuYyAoR2V0Q3VycmVudFBEQik6IAoJQWRkZWQgdHJpdmlhbCBmdW5jdGlvbiBHZXRDdXJyZW50UERCKCkgd2hpY2ggcmV0dXJucyB0aGUgcHJvZ3JhbQoJc2VnbWVudCBwcmVmaXggc2VsZWN0b3IuCgoJKiBtZW1vcnkvaGVhcC5jIChIRUFQX0ZyZWUpOiAKCUlmIGZyZWUgbGlzdCBpcyBlbXB0eSwgbWFrZSB0aGUgZnJlZWQgYmxvY2sgdGhlIGZyZWUgbGlzdC4KCkZyaSBKdW4gMTAgMDc6NTY6NDkgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL2VkaXQuYyAoRURJVF9TZXRUZXh0TXNnKTogCglEbyBub3QgYXBwZW5kIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGxpbmUuCgoJKiB3aW5kb3dzL2V2ZW50LmMgKFNldENhcHR1cmUpOiAKCVNldCB3aW5IYXNDdXJzb3IgaWYgbW91c2UgY2FwdHVyZSBzdWNjZWVkcy4KCkp1biAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCBidWcgaW4gbGlzdGJveCA6IEluc2VydFN0cmluZyBzaG91bGQgY2FsbCBBZGRTdHJpbmcgaWYgLTEuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uIEdldE1lbnVTdGF0ZSgpLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCVRyeSB0byBtYWtlIFNob3dTY3JvbGxCYXIoKSByZWNhbGMgTkNfIHJlZ2lvbnMuIE5vdCBmaW5pc2hlZCAhCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGQgU3R1YiBmb3IgVGFiYmVkVGV4dE91dCgpLCB3aGljaCB0ZW1wb3JhcmVseSBjYWxsIFRleHRvdXQoKS4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglOZXcgZnVuY3Rpb24gR2V0S2V5Qm9hcmRTdGF0ZSgpIHdpdGggYW4gS2V5U3RhdGVUYWJsZSBhcnJheQoJCSYgYXNzb2NpYXRlZCBoYW5kbGluZyBpbiBmdW5jdGlvbiBFVkVOVF9rZXkoKS4KCk1vbiBKdW4gMTMgMTY6NDU6MjQgTUVUIERTVCAxOTk0IChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2NvbnRyb2xzL21lbnUuY10KICAgICAgICBJc01lbnUoKSBhZGRlZC4KCiAgICAgICAgKiBbbG9hZGVyL2xpYnJhcnkuY10KICAgICAgICBNb2R1bGVGaXJzdCgpLCBNb2R1bGVOZXh0KCksIE1vZHVsZUZpbmROYW1lKCksIE1vZHVsZUZpbmRIYW5kbGUoKQogICAgICAgIGFkZGVkLgoKICAgICAgICAqIFtvYmplY3QvZ2Rpb2JqLmNdCiAgICAgICAgSXNHRElPYmplY3QoKSBhZGRlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyWzU2XS5jXQogICAgICAgIGJ1Z2ZpeDogYm90aCBkaWRuJ3QgbGVhdmUgZmxhZ3MgcHVzaGVkIG9uIDE2Yml0LXN0YWNrLgogICAgICAgICh3aW5maWxlIGdldHMgYSBiaXQgZnVydGhlcikKCiAgICAgICAgKiBbbWlzY2VtdS9pbnQxNi5jXQogICAgICAgIEFkZGVkIChlbXB0eSkuCgpTYXQgSnVuIDExIDIyOjU2OjQ4IDE5OTQgSm9uIFRvbWJzIChqb25AZXNpeDIudXMuZXMpCgkqIHdpbmRvd3MvZXZlbnQuYzoKCUFkZGVkIGNvZGUgdG8gZHJvcCByZWR1bmRhbnQgbW90aW9uIEV2ZW50cyBpbiB0aGUgWEV2ZW50IHF1ZXVlLgoKVGh1IEp1biAgOSAxMDo1NTo1NSBNRVQgRFNUIDE5OTQgIEpvY2hlbiBIZWluICggSGVpbkBTdHVkZW50LlRVLUNsYXVzdGhhbC5kZSApCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmMgaW5jbHVkZS90ZXh0cy5oXQoJUmVtb3ZlZCB0aGUgdGV4dC1jb25zdGFudHMgZnJvbSBtZXNzYWdlLmMgaW50byB2YXJpYWJsZXMKCXdoaWNoIG1heSBiZSBjaGFuZ2VkIGZyb20gWC1yZXNvdXJjZXMuCgoJKiBbbWlzYy9tYWluLmMgbWlzYy9tZXNzYWdlLmNdCglhZGRlZCA8bG9jYWxlLmg+IGFuZCBzZXRsb2NhbGUoKSB0byBtYWluLmMsIHVzZWQgdG91cHBlcigpIGluIG1lc3NhZ2UuYwoKTW9uLCAxMyBKdW4gOTQgMDk6NDE6MTYgLTA1MDAgUGF1bCBCcmFtZWwgPHBhdWxickBjb21tLm1vdC5jb20+CgogICAgICAgICogY29udHJvbHMvYnV0dG9uLmMgKCBbQ1JdQl9MQnV0dG9uKiApIAogICAgICAgIGxlZnQgcmMucmlnaHQgYXQgZnVsbCB3aW5kb3cgd2lkdGggc28gY2xpY2sgb24gbGFiZWwgYWxzbyAKICAgICAgICBhY3RpdmF0ZXMgdGhlIGNvbnRyb2wgKE1TV2luIGJlaGF2aW9yKQoKU2F0IEp1biAxMSAxOTowNTo0MCAxOTk0ICBPbGFmIEZsZWJiZSAgKGZsZWJiZUB0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGUpCgogICAgICAgICogaW5jbHVkZS93aW5kb3dzLmg6CiAgICAgICAgICBmdW5jdGlvbnMgcG9pbnRlcnMgY2FuIG5vdCBiZSBwYWNrZWQuCiAgICAgICAgICAoYW5ub3lpbmcgd2FybmluZ3Mgd2l0aCBmb3J0aGNvbW1pbmcgZ2NjLTIuNi54KQogICAgICAgIAogICAgICAgICogbG9hZGVyL21haW4uYyAoSW5pdERMTCk6IAogICAgICAgICAgRml4ZWQgYSBwcmludGYgc3RhdGVtZW50LiAoZm9yIGNvbnRyb2wuZXhlKSAKCiAgICAgICAgICAoSW5pdGlhbGl6ZUxvYWRlZERMTHMpOiAKICAgICAgICAgIGRlbGV0ZWQgc2hhZG93IGRlZmluaXRpb24gb2YgICp3cG50LgogICAgICAgICAgKEJyZWFrcyBtYW55IHByb2dyYW1zLCBiZWNhdXNlIG5vdyBDT01NRExHIHdpbGwgYmUKICAgICAgICAgICBpbml0aWFsaXplZCA6LSgKCiAgICAgICAgKiB3aW5kb3dzL3dpbi5jIChTZXRXaW5kb3dUZXh0KTogCiAgICAgICAgICBhZGRlZCBtaXNzaW5nIGJyZWFrczsgKFBFTlNBVEUgc3RhcnRzKSAKCiAgICAgICAgKiB3aW5kb3dzL2dyYXBoaWNzLmMgKEZsb29kRmlsbCk6IAogICAgICAgICAgUHJvcGVyIGJvdW5kYXJ5cy4gKEJBTkdCQU5HIHN0YXJ0cykgRmxvb2RGaWxlX3JlYyBzaG91bGQKICAgICAgICAgIGJlIHJld3JpdHRlbi4KCiAgICAgICAgKiBvYmplY3RzL2ZvbnQuYyAoRk9OVF9HZXRNZXRyaWNzKTogCiAgICAgICAgICBUWVBPOiB1c2UgZm9udC0+cGVyY2hhciBvbmx5IGlmIGl0IGlzIGRlZmluZWQuIChXUklURSBzdGFydHMpCgpTdW4gSnVuZSAxMiwgUGV0ZXIgQnJvYWRodXJzdCAocGJyQHVhLm53bC5hYy51aykKICAgICAgICBjb250cm9scy9zY3JvbGwuYzoKICAgICAgICBGaXhlcyBmb3IgaW1wcm92ZWQgYmVoYXZpb3VyIHdoZW4gZHJhZ2dpbmcgdGh1bWI7CiAgICAgICAgQWRkZWQgU0JfVEhVTUJQT1NJVElPTiBtZXNzYWdlIHdoZW4gdGh1bWIgaXMgcmVsZWFzZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBKdW4gIDcgMDg6NDE6MjcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGxvYWRlci9zZWxlY3Rvci5jIChGaXh1cEZ1bmN0aW9uUHJvbG9ncyk6IAoJTmV3IGZ1bmN0aW9uIHRvIGZpeHVwIGxvYWRlZCBETEwgZnVuY3Rpb24gcHJvbG9ncy4gIEl0IHJlcGxhY2VzIHRoZQoJZG8gbm90aGluZyBjb2RlIHdpdGggY29kZSB0aGF0IGxvYWRzIERTIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRhdGEKCXNlZ21lbnQgZm9yIHRoZSBETEwuCgoJKiBtaXNjL2N1cnNvci5jIChMb2FkQ3Vyc29yKTogCglEaXNhYmxlZCBjdXJzb3IgbG9hZGluZyBmcm9tIC5FWEUgb3IgLkRMTC4gIFRoZSBjb2RlIG5lZWRzIHRvIGhhbmRsZQoJdGhlIHBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIGN1cnNvcnMgaW4gYSBzaW5nbGUgZGlyZWN0b3J5LiAgQWxzbywKCWl0IHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlIGN1cnNvciBpcyB0aGUgcmlnaHQgc2l6ZS4KCgkqIG9iamVjdHMvZm9udC5jIChFbnVtRm9udHMpOiAKCUNoZWNrZWQgZm9yIGxwTG9nRm9udExpc3RbaV0gPT0gTlVMTAoKCSogb2JqZWN0cy9nZGlvYmouYyAoU2V0T2JqZWN0T3duZXIpOiAKCVJlbW92ZWQgc3R1Yi4gIFJlcGxhY2VkIHdpdGggc2ltcGxlIHJldHVybiBpbiBnZGkuc3BlYy4gIFRoaXMKCWZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgcmV0YWlsIHZlcnNpb24gb2YgV2luZG93cy4KCgkqIG1lbW9yeS9oZWFwLmMgKFdJTjE2X0xvY2FsSGFuZGxlRGVsdGEpOiAKCU5ldyBmdW5jdGlvbi4gIFRoaXMgaXMgcmVhbGx5IGEgZHVtbXkgdGhhdCBpbWl0YXRlcyB0aGUgcHJvcGVyCglyZXR1cm4gdmFsdWVzLgoKCSogbG9hZGVyL2xpYnJhcnkuYyAoR2V0UHJvY0FkZHJlc3MpOiAKCUZpeGVkIGRlZmluaXRpb24gb2YgSVNfQlVJTFRJTl9ETEwoKSBtYWNyby4KCk1vbiBKdW4gIDYgMTg6MTU6NDAgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIG1pc2NlbXUvaW50MjEuYyAoU2Vla0ZpbGUpOiAKCU5lZWRlZCB0byByZXR1cm4gY3VycmVudCBwb3NpdGlvbiBpbiBEWDpBWC4KCgkqIHdpbmRvd3MvdXRpbGl0eS5jICh3aW5kb3dzX3dzcHJpbnRmKTogCglBZGRlZCBzdXBwb3J0IGZvciAnIycgaW4gZm9ybWF0LCBhbmQgZml4ZWQgYnVnIHdpdGggInB0ciIgYmVpbmcKCWluY3JlbWVudGVkIHRvbyBtYW55IHRpbWVzLgoKCSogbWlzY2VtdS9pbnQyMS5jIChPcGVuRXhpc3RpbmdGaWxlKTogCglBZGQgY29kZSB0byBoYW5kbGUgb3BlbmluZyBmaWxlcyByZWFkLW9ubHkgYW5kIHdyaXRlLW9ubHkuCgoJKiBsb2FkZXIvd2luZS5jOgoJU2VnbWVudCBmaXh1cHMgbm93IGRvbmUgaW4gTG9hZEltYWdlIGluc3RlYWQgb2YgX1dpbk1haW4uICBUaGlzCglpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydCBMb2FkTGlicmFyeSgpLgoKU3VuIEp1biAgNSAxNzozNDoyNCAxOTk0ICBFcmlrIEJvcyAoZXJpa0BoYWNrdGljLm5sKQoKCSogW2xvYWRlci8qXQoJCS0gZml4ZWQ6IEdldE1vZHVsZUhhbmRsZSgpIHNvbWV0aW1lcyByZXR1cm5lZAoJCSAgYSB3cm9uZyBoYW5kbGUuCgkJLSBkb24ndCBpbml0IGRsbHMgd2hlbiBjcyA9PSAwIChsemV4cGFuZCwgZG9lc24ndAoJCSAgc2VlbSB0byBoYXZlIGEgaW5pdCBmdW5jdGlvbikKCQktIExvYWRMaWJyYXJ5ICYgTG9hZEltYWdlIG5vdyByZXR1cm4gZXJyb3IgaW5zdGVhZAoJCSAgb2Ygc3RvcHBpbmcgd2luZS4KCQktIG1vdmVkIG1vc3Qgb2YgTkUtZnVuY3Rpb25zIGludG8gb25lIGZpbGUuCgkJLSBMb2FkTGlicmFyeSgpIHVzZXMgd19maWxlcyBsaXN0IGluc3RlYWQgb2YgaXRzCgkJICBvd24gbGlzdC4KCQktIE5FIGV4ZWN0YWJsZXMgYXJlIG5vdyBmaXhlZC11cCBhbmQgaW5pdGlhbGlzZWQgd2hlbgoJCSAgbG9hZGVkIGluc3RlYWQgb2Ygb25seSBvbmNlIGJlZm9yZSBjYWxsaW5nIEluaXRUYXNrLgoKCSogW21pc2NlbXUvaW50MTUuY10gW21pc2NlbXUvaW50MzEuY10KCUFkZGVkLgkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVN0dWJzIGFkZGVkIGZvciB7R2V0fFNldH1TZWxlY3RvckxpbWl0KCksIHtHZXR8U2V0fVNlbGVjdG9yQmFzZSgpLgoKCSogW21pc2MvbWFpbi5jXQoJU3R1YiBhZGRlZCBmb3IgSXNSb21Nb2R1bGUoKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglTb21lIGNsZWFudXAsIGFkZGVkIGhlYXAgZm9yIHJldHVybmluZyBkYXRhLgoKSnVuIDYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlIE1BWF9PUkRJTkFMUwlkZWZpbmUgdG8gaGlnaGVyIHZhbHVlLCAxMjk5IGVudHJpZXMuCgkoTU1TWVNURU0gZG9lc24ndCBoYXZlIHN1Y2Nlc2l2ZSBudW1iZXJzLCBzb21lIGFyZSBhcm91bmQgMTIwMCkuCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglCdWcgZml4IGluIHdpbmRvd3Nfd3NwcmludGYoKSwgKHR3aWNlIGluY3JlbWVudHMgLi4uKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgcmVkcmF3IHdhcyBkb25lIGlmIGZsYWcKCQl3YXMgc2V0IHRvIFNXUF9OT1JFRFJBVyB3aGlsZSBTV1BfU0hPV1dJTkRPVykuCgoJKiBbbWlzYy9tZXNzYWdlLmNdIFtjb250cm9scy9jb21iby5jXQoJQWRkIGFuIEludmFsaWRhdGVSZWN0KCkgaW4gV01fU0hPV1dJTkRPVyB0byBzdGF0aXNmeSB0aGUgbmV3ICdzYXZldW5kZXInLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBkbyBTZXRNZW51KCkgY2FsbHMgYWZ0ZXIgd2luZG93IGNyZWF0aW9uLAoJCWp1c3QgYmVmb3JlIHNlbmRpbmcgdG8gV01fTkNDQUxDU0laRS4KCgkqIFtjb250cm9scy9tZW51LmNdCglJbiBmdW5jdGlvbiBTZXRNZW51KCksIG5vdyB1c2UgU2V0V2luZG93UG9zKCkgd2l0aCAKCQlmbGFncyBTV1BfRlJBTUVDSEFOR0VEIHRvIHJlYWRqdXN0IG1lbnUgYXJlYS4KCUZ1bmN0aW9uIE1lbnVCYXJDYWxjU2l6ZSgpIHJlZG9uZS4KClN1biBNYXkgMjkgMTE6MDg6MjQgMTk5NCAgRGF2aWQgQi4gVGhvbWFzICAoZHRAeWVudGEuYWJxLm5tLnVzKQoKICAgICAgICAqIFtvYmplY3RzL3RleHQuY10KICAgICAgICBGaXhlZCBwcm9ibGVtcyBhc3NvY2lhdGVkIHdpdGggRFRfV09SREJSRUFLIGZsYWcuICBTdHJpbmcgbGVuZ3RoCiAgICAgICAgd2FzIG5vdCBiZWluZyBwcm9wZXJseSBkZWNyZW1lbnRlZCB3aGVuIGxpbmVzIHdlcmUgZm9sZGVkLCBhbmQKICAgICAgICB3cmFwcGluZyB3YXMgbm90IHBlcmZvcm1lZCB3aGVuIERUX05PQ0xJUCBhbmQgRFRfTk9QUkVGSVggd2VyZQogICAgICAgIGJvdGggb24gaW4gYWRkaXRpb24gdG8gRFRfV09SREJSRUFLLiAgV2luZG93cyBkb2VzIHdyYXBwaW5nIGluCiAgICAgICAgdGhpcyBjYXNlLCBhbmQgbm93IHNvIGRvZXMgd2luZS4KClN1biBKdW4gIDUgMTk6MTc6NDkgMTk5NCAgT2xhZiBGbGViYmUgIChvbGFmQGRyYWdvbikKCiAgICAgICAgKiBbZWRpdC5jXQogICAgICAgIGNwMSB3YXMgdW5pbml0aWFsaXplZCBpZmYgbGluZW5vID09IDAKCiAgICAgICAgKiAgRmluZEZpbGUgdGVzdHMgZm9yIGV4aXN0YW5jZSBvZiBmaWxlIGV2ZW4gaWYgYSBmdWxsCiAgICAgICAgICAgZmlsZW5hbWUgd2FzIHN1cHBsaWVkLiBXaGF0IGFib3V0IHVuaXggZmlsZSBuYW1lcz8KCiAgICAgICAgKiBbY29udHJvbHMvbGlzdGJveCBdCiAgICAgICAgd25kUHRyIHdhcyB1bmluaXRpYWxpemVkIGZvciBMQl9TRVRUT1BJTkRFWAoKICAgICAgICAqIFttaXNjL3Byb3BlcnR5LmNdICAgICAKICAgICAgICBEbyBub3QgZnJlZSBscFByb3AuIElzIGl0IHJlYWxseSBhbGxvY2F0ZWQgYnkgbWFsbG9jPwoJe2VkaXRlZCBieSBCb2IgQW1zdGFkdDogY2hhbmdlZCBmcmVlKCkgdG8gR2xvYmFsRnJlZSgpfQoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTWF5IDI4IDEyOjAzOjIzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBtaXNjZW11L2ludDIxLmMgKE9wZW5FeGlzdGluZ0ZpbGUpOiAKCU9wZW5FeGlzdGluZ0ZpbGUgbmVlZGVkIHRvIHJldHVybiBoYW5kbGUgaW4gQVggcmVnaXN0ZXIgaW5zdGVhZAoJb2YgdGhlIEJYIHJlZ2lzdGVyLgoKCSogbWlzY2VtdS9pbnQyMS5jIChpb2N0bEdldERldmljZUluZm8pOiAKCUFkZGVkIGEgbGl0dGxlIGNvZGUgdG8gZ2l2ZSBhIGZha2UgcmVzdWx0IGZvciBub3JtYWwgZmlsZXMuCgpXZWQgTWF5IDI1IDIxOjU1OjM4IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJcmV0dXJuIHZhbHVlIGZyb20gR2xvYmFsU2l6ZSB3YXMgY29tcGxldGVseSB3cm9uZy4KCgkqIFttaXNjZW11L2ludDIxLmhdCglmaXhlZCBidWcgaW4gRmluZEZpcnN0LiAgRGlyZWN0b3J5IHBvaW50ZXIgKGRwKSB3YXMgbm90IHBsYWNlZCBpbgoJZHRhIGNvcnJlY3RseS4KCgkqIFt0b29scy9idWlsZC5jXQoJZml4ZWQgY3JlYXRpb24gb2YgcG9wLmggdG8gZ3VhcmFudGVlIHRoYXQgZmxhZ3MgYXJlIHJlc3RvcmVkIGNvcnJlY3RseS4KCgkqIFttaXNjL2NvbW0uY10KCWNoYW5nZWQgYWxsIG9jY3VyYW5jZSBvZiBzdHJuY21wKCkgdG8gc3RybmNhc2VjbXAoKS4KCUJ1aWxkQ29tbURDQigpIHNob3VsZCBub3QgcmVxdWlyZSB0aGF0IE9wZW5Db21tKCkgYmUgY2FsbGVkIGZpcnN0LgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJSGVhcCBpbml0aWFsaXplZCB0byBzaXplIG9mIGZ1bGwgc2VnbWVudCBsZXNzIHN0YWNrIHNpemUgYW5kIAoJYXV0b21hdGljIGRhdGEgc2l6ZS4KClNhdCBNYXkgMjggMDk6MTQ6MzMgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJQ29ycmVjdCB0eXBvcyBpbiBMaXN0Qm94UmVzZXRDb250ZW50IHdoZXJlIGxwbHMgdmFyaWFibGUgaXMKCXVzZWQgd2hlcmUgbHNsczIgdmFyaWFibGUgaXMgbWVhbnQuICBEb24ndCBjYWxsIFVTRVJfSEVBUF9GUkVFCgl0d2ljZSBvbiB0aGUgc2FtZSBoYW5kbGUgaWYgaERhdGEgYW5kIGhNZW0gYXJlIHRoZSBzYW1lLgoKCSogW2RlYnVnZ2VyL29wY29kZXMvaTM4Ni1kaXMuY10KCUFkZCBuZXcgbmFtZSBhcnJheSBuYW1lc19ybXcgZm9yIHRhYmxlIGRyaXZlbiBkZWNvZGluZyBvZiB0aGUKCTE2LWJpdCBtb2Qvcm0gZmllbGQuICBPbWl0IGxhcmdlIGNhc2Ugc3RhdGVtZW50IGluIE9QX0UgYW5kCglyZXBsYWNlIHdpdGggYXJyYXkgcmVmZXJlbmNlIHRvIG1hdGNoIGV4aXN0aW5nIGNvZGluZyBzdHlsZS4KCUFkZCBuZXcgc3RhdGljIHZhcmlhYmxlIG1hY2hpbmUgd2l0aCB2YWx1ZSAyODYgb3IgMzg2IHRvCgljb3JyZWN0bHkgZGVjb2RlIG1vZC9ybSBmaWVsZCBpbiBlaXRoZXIgMTYgb3IgMzIgYml0IG1vZGVzLgoJU2V0IGl0IGluIHByaW50X2luc25faXsyLDN9ODYuICBJbiBPUF9FIHVzZSBpdCB0byBkZWNpZGUgaG93Cgl0byBkZWNvZGUgbW9kL3JtLiAgV2hpbGUgdGhlIGNvZGUgd2FzIGNvcnJlY3QgZm9yIDE2IGJpdCBjb2RlLAoJaXQgd2FzIGltcHJvcGVybHkgZGVjb2RpbmcgbW9kL3JtIGZpZWxkcyBvbiB3b3JkIHByZWZpeGVkCgkzMiBiaXQgaW5zdHJ1Y3Rpb25zLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglSZWNvZ25pemUgbmV3IHRva2VuIEFCT1JULiAgIFJlY29nbml6ZSBzaW5nbGUgbGV0dGVycyAncCcKCWFuZCAncScgYXMgdG9rZW5zLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJQWRkIG5ldyB0b2tlbiBBQk9SVC4gIEFsbG93IHByaW50IGNvbW1hbmQgdG8gYmUgaW52b2tlZCBieQoJJ3AnIGFuZCBxdWl0IGNvbW1hbmQgYnkgJ3EnLCBhbGEgR0RCLiAgQ2hhbmdlIGxvdHMgb2YgJ307JwoJdG8ganVzdCAnfScuICBBZGQgc3RhdGljIGR1bW15X3JlZ3MgdG8gd2luZV9kZWJ1ZyBzbyB0aGF0Cgl3aW5lX2RlYnVnKDAsIE5VTEwpIGRvZXNuJ3QgY29yZSBkdW1wIHdpdGggcW1hZ2ljLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUNvcnJlY3Qgc3ludGF4IG9mIGJyZWFrIGNvbW1hbmQgaW4gaGVscHRleHQgYW5kIG9taXQgZm9ybWVyCgljb21tZW50IGFib3V0IHByb2JhYmxlIGJ1Z2dpbmVzcyBvZiB0aGUgZGlzYXNzZW1ibHkgc2luY2UgaXQKCWlzIG5vdyBjb3JyZWN0LiAgQ2hhbmdlIGZwcmludGYgb2YgZmlyc3QgYmFja3RyYWNlIHN0YWNrCglmcmFtZSB0byBtYXRjaCB0aGF0IG9mIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgZnJhbWVzLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJQ2hhbmdlIGNvbnN0cnVjdGlvbiBvZiBjb21tYW5kIGxpbmUgaW4gQ3JlYXRlUFNQIGZyb20gY3JlYXRpbmcKCWEgc3RyaW5nIHRoYXQgbG9va3MgbGlrZSAiYXJnMSBhcmcyIFxyIiB0byAiYXJnMSBhcmcyIi4gIEEgRE9TCglQU1AgY29tbWFuZCBsaW5lIGxvb2tzIGxpa2UgIiBhcmcxIGFyZzJcciIgd2l0aCB0aGUgbGVuZ3RoIG5vdAoJaW5jbHVkaW5nIHRoZSB0cmFpbGluZyAiXHIiIGJ1dCB0aGF0IGlzIG5vdCBob3cgV2luZG93cyBkb2VzIGl0LgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglDaGFuZ2UgdXNlcyBvZiAlcyB0byBwcmludCBzdHJpbmdzIGluIEdldE1vZHVsZUhhbmRsZSB0byAleCBzbwoJdGhhdCBzdHJpbmcgSURzIGRvbid0IGNhdXNlIGEgY29yZSBkdW1wIHdpdGggcW1hZ2ljLiAgSGFuZGxlCgljb252ZXJ0aW5nIGEgc3RyaW5nIGlkIHRvIGEgbGl0ZXJhbCBtb2R1bGUgaGFuZGxlLiAgRm9yCglleGFtcGxlLCBHZXRNb2R1bGVIYW5kbGUoKExQU1RSKSAweDU3KSBub3cgcmV0dXJucyAweDU3IGlmCglpdCBpcyBhIHJlYWwgbW9kdWxlIGhhbmRsZS4KCgkqIFttaXNjL21lc3NhZ2UuY10KCUluIE1lc3NhZ2VCb3gsIHRyYW5zbGF0ZSBhIE5VTEwgdGl0bGUgYXJndW1lbnQgdG8gdGhlIHN0cmluZyAiRXJyb3IiLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJSW4gR2V0U2V0UHJvZmlsZSB0cmFuc2xhdGUgYSBOVUxMIERlZmF1bHQgYXJndW1lbnQgdG8gIiIuICBBbnkKCWNhbGxlciB3aG9zZSBEZWZhdWx0IGFyZ3VtZW50IGlzIE5VTEwgaXMgYnVnZ3ksIGJ1dCBDSEFSTUFQIGRvZXMgaXQKCWFueXdheS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUFkZCBOVUxMIHBvaW50ZXIgY2hlY2tzIGluIEVudW1Gb250RmFtaWxpZXMgdG8gcHJldmVudCBjb3JlIGR1bXBzLgoKU2F0IE1heSAyOCAyMDowMTo1MSAxOTk0IEpvbiBUb21icyAoam9uQGd0ZXgwMi51cy5lcykgCgoJKiBOZXcgb3B0aW9ucy9yZXNvdXJzZXMgbm9zYXZldW5kZXJzIGFuZCBub2JhY2tpbmdzdG9yZS4gIEJ5IAoJZGVmYXVsdCBiYWNraW5nc3RvcmUgYW5kIHNhdmV1bmRlcnMgYXJlIG5vdyBlbmFibGVkLCB0aGVzZSB1c2UgCgltb3JlIG1lbW9yeSBidXQgYXZvaWRzIHRob3NlIHNsb3cgKHNvbWV0aW1lcyBtdWx0aXBsZSkgcmVkcmF3cyAKCWNhdXNlZCBiZSBleHBvc3VyZSBldmVudHMuCgpNYXkgMzAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL2RyaXZlci5jXSBOZXcgZmlsZQoJU2tlbGV0b24gZm9yICdJbnN0YWxsYWJsZSBXaW5lIERyaXZlcnMnIGZ1bmN0aW9ucy4gOi0pCgkqIFttaXNjL2F1ZGlvLmNdIE5ldyBmaWxlCglTa2VsZXRvbiBmb3IgYmFzaWMgJ0F1ZGlvIERyaXZlcicgZnVuY3Rpb25zLgoJKiBbbWlzYy9uZXR3b3JrLmNdIE5ldyBmaWxlCglTdHVicyBmb3IgZmV3IG5ldHdvcmtpbmcgZnVuY3Rpb25zLgoKCSogW21pc2MvbW1zeXN0ZW0uY10KCU1vcmUgY29kaW5nIC4uLiBhIGR1c3QgaW4gYSBnYWxheHkgLi4uCgkqIFttaXNjL3NoZWxsLmNdCglTb21lIGNvZGluZyBmb3IgJ1JlZ1hYWCcgZnVuY3Rpb25zIC4uLiBhIGR1c3QgaW4gdGhlIHdpbmQgLi4uCgoJKiBbbWlzYy9wcm9maWxlLmNdCglCdWcgZml4IGluIEdldFNldFByb2ZpbGUoKSwgYmFkIGVudW1lcmF0aW9uIGlmIEtleU5hbWUgPT0gTlVMTC4KCgkqIFtvYmplY3RzL2dkaS5jXQoJTmV3IGZ1bmN0aW9uIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwKCksIGl0IGp1c3QgY2FsbGluZyAKCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoKSBmb3Igbm93LiBJdCdzIGdldCAnY2xvY2suZXhlJyBydW5uaW5nICEgOi0pCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJKiBbY29udHJvbHMvY29tYm8uY10KCU5ldyBmb250IG1lbWJlciBhc3NpZ25lZCB0byBTWVNURU1fRk9OVCBhcyBkZWZhdWx0LgoJQWRkZWQgcHJvY2Vzc2luZyBmb3IgV01fU0VURk9OVCBtZXNzYWdlOwoKClR1ZSBNYXkgMzEgMjA6MzQ6MjUgRURUIDE5OTQgIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAY3MudW1sLmVkdT4KCiAgICAgICAgKiBbd2luZG93cy9ldmVudC5jXQogICAgICAgIEFkZGVkIEFzeW5jTW91c2VCdXR0b25zU3RhdGVzIGFycmF5IGZvciBHZXRBc3luY0tleVN0YXRlLgoKICAgICAgICAqIFt3aW5kb3dzL2tleWJvYXJkLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgYmVnaW5uaW5nIG9mIEdldEFzeW5jS2V5U3RhdGUuCgpXZWQgTWF5IDI1IDIzOjM1OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbaW5jbHVkZS9tZXRhZmlsZS5oXQogICAgICAgICAgW3dpbmRvd3MvbWFwcGluZy5jXSBbb2JqZWN0cy9jbGlwcGluZy5jXSBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdCiAgICAgICAgRnVydGhlciBtZXRhZmlsZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWF5IDIzIDE1OjA3OjM2IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglBbGxvY2F0ZSBoZWFwIGFuZCBzdGFjayBzZWdtZW50cyBhcyA2NGsuCgpTYXQgTWF5IDIxIDAxOjE1OjQ5IDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFtsb2FkZXIvc2VsZWN0b3IuY10KICAgICAgICBDb3JyZWN0IHR5cG9zIHdoZXJlIG1lbWNweSBpcyB1c2VkIGluc3RlYWQgb2YgbWVtc2V0LgoKICAgICAgICAqIFtsb2FkZXIvcmVzb3VyY2UuY10KICAgICAgICBBbGxvdyBmb3IgbGVnaXRpbWF0ZSBjYXNlcyB3aGVyZSBiaVNpemVJbWFnZSBpcyAwIGluIExvYWRJY29uCiAgICAgICAgYnkgY2FsY3VsYXRpbmcgdGhlIHZhbHVlIHdoZW4gdGhlIGJpdG1hcCBpcyBub3QgY29tcHJlc3NlZC4KCiAgICAgICAgKiBbbWlzY2VtdS9pbnQyMS5jXQogICAgICAgIEZpeCBOVUxMIGRlcmVmZXJlbmNlIGNhdXNlZCBieSBzdXBlcmZsdW91cyBET1NfY2xvc2VkaXIgaW4gRmluZE5leHQuCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIE5ldyBmdW5jdGlvbiB0eXBlX21hdGNoIHRvIGhhbmRsZSBzdHJpbmcgcmVzb3VyY2UgdHlwZXMgYXMKICAgICAgICB3ZWxsIGFzIElEcy4gIEluIGFkZGl0aW9uLCBjb21wYXJlIG9ubHkgbG93IDQgYml0cyBvZiB0eXBlX2lkCiAgICAgICAgd2hlbiBib3RoIG51bWJlcnMgYXJlIElEcyBzbyB0aGF0IDB4MDAwMiBtYXRjaGVzIDB4ODAwMi4KICAgICAgICBJbiBGaW5kUmVzb3VyY2VCeU51bWJlciBhbmQgRmluZFJlc291cmNlQnlOYW1lIHVzZSB0eXBlX21hdGNoCiAgICAgICAgaW5zdGVhZCBvZiBjb21wYXJpbmcgbnVtYmVycy4gIEluIEZpbmRSZXNvdXJjZSBoYW5kbGUgdGhlCiAgICAgICAgIiNudW1iZXIiIHN5bnRheCBhbmQgZW1wdHkgc3RyaW5ncyBpbiBib3RoIHRoZSByZXNvdXJjZSBhbmQKICAgICAgICB0eXBlIG5hbWVzLgoKTW9uIE1heSAyMyAwMDo0ODoyNSAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbd2luZG93cy9kaWFsb2cuY10KICAgICAgICBGaXggaW5hZHZlcnRlbnQgcHJpbnRpbmcgb2Ygc3RyaW5nIElEcyBhcyBzdHJpbmdzLgoKTWF5IDIzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9ucyBHZXRNZW51SXRlbUNvdW50KCksIEdldE1lbnVJdGVtSUQoKS4KCQlHZXRNZW51U3RyaW5nKCkgJiBIaWxpdGVNZW51SXRlbSgpLgoJQnVnIGZpeCBpbiBDaGVja01lbnVJdGVtKCkuCglGdW5jdGlvbiBTZXRNZW51KCkgbm93IG1ha2UgY2xpZW50IGFyZWEgcmVjYWxjIGlmIG1lbnUgcmVtb3ZlZC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeCBpbiBTZXRXaW5kb3dQb3MoKSwgbm8gbW9yZSBYTWFwcGluZyBvciBYQ29uZmlndXJpbmcJb2YKCQl3aW5kb3dzIHdpdGggaW5pdGlhbCB3aWR0aCBvciBoZWlnaHQgZXF1YWwgemVyby4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJTmV3IGZ1bmN0aW9uIEVudW1PYmplY3RzKCksIHVzaW5nIG5ldyBscFBlbkJydXNoTGlzdCBidWlsZHVwCgkJZnJvbSBjYWxscyB0byBuZXcgZnVuY3Rpb24gR0RJX0FwcGVuZFRvUGVuQnJ1c2hMaXN0KCkuCgkJKCdwYnJ1c2guZXhlJyBkb24ndCBzaG93IGl0cyBmYWNlIHlldCAhIC4uLiA6LSggKQoJTmV3IEVNUFRZIFNUVUIgZm9yIGZ1bmN0aW9uIFNldE9iamVjdE93bmVyKCksCgkJKCdtcGxheWVyLmV4ZScgY2FsbCBpdCB2aWEgR2V0UHJvY0FkZHJlc3MoKSAuLi4pCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgaW50ZXJuYWwgZnVuY3Rpb25zIFBhcnNlRm9udFBhcm1zKCkgJiBJbml0Rm9udHNMaXN0KCkuCglFbnVtRm9udHMoKSAmIEVudW1Gb250RmFtaWxpZXMoKSBlbnVtZXJhdGVzIGZvbnRzIChubyBtb3JlIGR1bW1pZXMpLgoJRk9OVF9NYXRjaEZvbnQgbm93IG1ha2UgcmV0cmllcyB0byBmaW5kIGNsb3Nlc3Qtc21hbGxlc3QgZm9udC4KCQkoJ2NoYXJtYXAuZXhlJyBjYW4gbm93IHNob3cgdGhlIGRpZmZlcmVudHMgZm9udHMgYXZhaWxhYmxlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2Ugc21hbGwgZG9zIE9CTV9PTERfQ0xPU0UgYnV0dG9uIGZvciBNREkgd2luZG93cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJU3RhcnQgdG8gcmVtb3ZlIG9ic29sZXRlIGdsb2JhbHMgc3VjaCBYVF9zY3JlZW4gLi4uCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCU1ha2UgZnVuY3Rpb24gR2V0UHJvY0FkZHJlc3MoKSB3b3JraW5nIGFsc28gd2l0aCBidWlsdGluIERMTHMuCgpUdWUgTWF5IDI0IDIwOjE4OjAyIDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW2lmMTYzMi9zeXN0ZW0uc3BlY10gW2lmMTYzMi90b29saGVscC5zcGVjXQogICAgICAgIHN5c3RlbS5kbGwgJiB0b29saGVscC5kbGwgYWRkZWQuCgogICAgICAgICogW2xvYWRlci9saWJyYXJ5LmNdCiAgICAgICAgTW9kaWZpZWQgR2V0TW9kdWxlRmlsZU5hbWUoKSB0byByZXR1cm4gdGhlIGZ1bGwKICAgICAgICBmaWxlbmFtZS4KICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIExvYWRMaWJyYXJ5KCkgdG8gcHJldmVudCBsb2FkaW5nCiAgICAgICAgYnVpbHQgaW4gZGxscy4gKGVnLiB1c2VyLmV4ZSkKICAgICAgICBBZGRlZCBhIGNoZWNrIHRvIEZyZWVMaWJyYXJ5KCkgdG8gcHJldmVudCBidWlsdC1pbgogICAgICAgIGRsbHMgZnJvbSBiZWluZyBmcmVlZC4KICAgICAgICBNb2RpZmllZCBHZXRQcm9jQWRkcmVzcygpIHRvIHN1cHBvcnQgYnVpbHRpbiBkbGxzLgoKICAgICAgICAqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjZW11L2ludDJmLmNdCiAgICAgICAgQWRkZWQgPT4gcGlmZWRpdCBydW5zLgoKICAgICAgICAqIFttaXNjL2Rvc19mcy5jXQogICAgICAgIEFkZGVkIGEgTlVMTC1wdHIgY2hlY2sgdG8gRE9TX2Nsb3NlZGlyKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgMTcgMjM6MDM6MTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL2RjZS5jXQoJRml4ZWQgYnVnIHdpdGggZGNlIGluaXRpYWxpemF0aW9uIHRoYXQgd2FzIGNhdXNpbmcgZGlhbG9nIGJveGVzIHRvIG5vdAoJYmUgZGlzcGxheWVkLgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQmV0dGVyIGZpeCBmb3IgYnVnIGZvdW5kIGJ5IE1hcnRpbi4KClNhdCBNYXkgMTQgMTk6NDg6MzkgMTk5NCAgUmljayBTbGFka2V5ICAoanJzQHdvcmxkLnN0ZC5jb20pCgogICAgICAgICogWyBtZW1vcnkvaGVhcC5jIF0KICAgICAgICBSZWRpcmVjdCBIRUFQX1JlQWxsb2MgY2FsbHMgd2l0aCBOVUxMIGFyZ3VtZW50IHRvIEhFQVBfQWxsb2MuCgpNYXkgMTYsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCU1ha2UgRW51bUZvbnRzKCkgY2FsbGluZyBhIGNhbGxiYWNrIHdpdGggZHVtbXkgZm9udHMgLi4uIDotKQoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkIEVtcHR5IFN0dWIgZm9yIEV4dFRleHRPdXQoKSwgd2hpY2ggdGVtcG9yYXJlbHkgY2FsbCBUZXh0b3V0KCkuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglUZW1wb3JhcmVseSBnbyBhcm91bmQgYnVnIGluIENhbGxXaW5kb3dQcm9jKCksIHlvdSB3aWxsIHNlZSBwcmludGZzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCU1ha2UgRURJVCBjb250cm9scyBmb2N1c2VkIGJ5IGEgbW91c2UgY2xpY2suCgoJKiBbbWlzYy9wcm9wZXJ0eS5jXQoJQnVnIEZpeCBpbiBmdW5jdGlvbiBFbnVtUHJvcHMoKSwgYmV0dGVyIHVzZSBvZiBDYWxsQmFjazE2KCkuCgoJKiBbbWlzYy9tbXN5c3RlbS5jXQoJQmFzaWMgU2tlbHRvbidzIGZvciBNQ0kgbWVzc2FnZXMgZGlzcGF0Y2hpbmcgZnVuY3Rpb24uCgpTdW4gTWF5IDE1IDE2OjE1OjE3IDE5OTQgIEVyaWsgQm9zIChlcmlrQGhhY2t0aWMubmwpCgogICAgICAgICogW3dpbmRvd3MvdXRpbGl0eS5jXQogICAgICAgIEFkZGVkIHdpbmRvd3Nfd3NwcmludGYoKSBmb3IgdGhlIGVtdWxhdG9yLCB3c3ByaW50ZigpIGlzCiAgICAgICAgZm9yIGxpYndpbmUuCgpTYXQgTWF5IDE0IDIyOjE2OjQwIDE5OTQgIFJpY2sgU2xhZGtleSAgKGpyc0B3b3JsZC5zdGQuY29tKQoKICAgICAgICAqIFttaXNjL2N1cnNvci5jXQogICAgICAgIEZpeCBwb2ludGVyIHByb2JsZW1zIGluIExvYWRDdXJzb3IgbGVhZGluZyB0byBoZWFwIGNvcnJ1cHRpb24uCgogICAgICAgICogIFsgY29udHJvbHMvbWVudS5jIF0KICAgICAgICBGaXggdHdvIE5VTEwgZGVyZWZlcmVuY2luZyBidWdzLgoKU3VuIE1heSAxNSAyMDowNzo0OCAxOTk0ICBSaWNrIFNsYWRrZXkgIChqcnNAd29ybGQuc3RkLmNvbSkKCiAgICAgICAgKiBbb2JqZWN0cy9mb250LmNdCiAgICAgICAgRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jaW5nIGJ1ZyBpbiBHZXRDaGFyV2lkdGguCgogICAgICAgICogW2xvYWRlci9yZXNvdXJjZS5jXQogICAgICAgIEZpeCB1bmRlci1hbGxvY2F0aW9uIG9mIG1lbW9yeSBpbiBMb2FkQWNjZWxlcmF0b3JzLgoKICAgICAgICAqIFt3aW5kb3dzL2NsYXNzLmNdCiAgICAgICAgSWdub3JlIG5lZ2F0aXZlIHNpemVzIGZvciBleHRyYSBmaWVsZHMgaW4gUmVnaXN0ZXJDbGFzcy4KClN1biBNYXkgMTUgMDY6MzU6MDMgMTk5NCAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKICAgICAgICAqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KICAgICAgICAgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9wZW4uY10KICAgICAgICAgIFtvYmplY3RzL3RleHQuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICAgIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL21hcHBpbmcuY10KICAgICAgICBCZWdpbm5pbmdzIG9mIG1ldGFmaWxlIHN1cHBvcnQuCgogICAgICAgICogW21pc2MvZmlsZS5jXQogICAgICAgIENvcnJlY3RlZCBzcGVsbGluZyBvZiBfbGNyZWF0LgoKICAgICAgICAqIFtjb250cm9scy9lZGl0LmNdCiAgICAgICAgTWlub3IgYnVnIGZpeGVzLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1heSA5LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglNYWtlIHRodW1idHJhY2sgYnV0dG9uIGRpc2FwcGVhciBpZiBzY3JvbGwgYm94IHJhdGlvIDwgMzoxLgoJTWFrZSBhcnJvdyBidXR0b25zIHJlY3Rhbmd1bGFyIGlmIHNjcm9sbCBib3ggcmF0aW8gPCAyOjEuCglBZGQgY29kZSBmb3IgU0JTX1RPUEFMSUdOLCBTQlNfQk9UVE9NQUxJR04sIAoJCQkJU0JTX0xFRlRBTElHTiAmIFNCU19SSUdIVEFMSUdOLgoJQnVnIGZpeCBpbiBOQ19DcmVhdGVTY3JvbGxCYXJzKCksIG5vIG1vcmUgYmlnYnV0dCBpbiBjYWxlbmRhci5leGUuLi4gOi0pCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gW2xvYWRlci90YXNrLmNdIFttaXNjL2V4ZWMuY10KCUNvbnRpbnVlIHBsYXlpbmcgYXJvdW5kIHRyeWluZyB0byBnZXQgYSBzZWNvbmQgdGFzayBydW5uaW5nLgoKCSogW3dpbmRvd3MvbWRpLmNdCglDaGFuZ2UgT0JNX0NMT1NFIGZvciBPQk1fT0xEX0NMT1NFLCBhIHNtYWxsZXIgZG90IGJ1dHRvbiB3aGVuIG1heGltaXplZC4KCgkqIFtldmVyeXdoZXJlXQoJQWRkaW5nIHByZXZpb3VzIHdvcmtzIG9mIHRoZSBBcHIgMjUsIDk0LgoKVHVlIE1heSAxMCAxODowOToxNCAxOTk0IEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbaWYxNjMyL21tc3lzdGVtLnNwZWNdIFttaXNjL21tc3lzdGVtLmNdIFtpbmNsdWRlL21tc3lzdGVtLmhdCglBZGRlZCBNYXJ0aW4ncyBtbXN5c3RlbS5kbGwgc3R1YnMuCgoJKiBbbWlzYy9zb3VuZC5jXQoJQWRkZWQgcmVtYWluaW5nIHN0dWJzIGZvciBzb3VuZC5kbGwuCgoJKiBbaWYxNjMyL3NoZWxsLnNwZWNdIFttaXNjL3NoZWxsLmNdCglGaXhlZCBwcm90b3R5cGVzIChJIGZvdW5kIHRoZW0gaW4gQkMgNCkgYW5kIGFkZGVkIFNoZWxsQWJvdXQoKQoJYW5kIEFib3V0RGxnUHJvYygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNYXkgMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZCBYVW5ncmFiUG9pbnRlcigpICYgWFVuZ3JhYlNlcnZlcigpIGluIHdpbmVfZmF1bHQoKS4KCkZyaSBBcHIgMjIgMTk6MzA6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJY29sb3Jfc3RyZXRjaCgpIHJld3JpdHRlbiB0byB1c2UgaW50cyBvbmx5LiAqZmFzdCEqCglCTEFDS09OV0hJVEUgJiBXSElURU9OQkxBQ0sgc3RyZXRjaG1vZGVzIHJlZGlyZWN0ZWQgdG8KCXVzZSBjb2xvcl9zdHJldGNoKCkuCgpNb24gTWF5ICAyIDIxOjM5OjQzIDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbY29udHJvbHMvbWVudS5jXQoJU2V0U3lzTWVudSgpIGFkZGVkLgoKCSogW21pc2MvY3Vyc29yLmNdCglHZXRDdXJzb3IoKSBhZGRlZC4KCgkqIFttaXNjL21haW4uY10KCVN3YXBNb3VzZUJ1dHRvbigpIGFkZGVkLCAoTk9QKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJR2V0RGVza3RvcEh3bmQoKSBhZGRlZC4KCgkqIFtpZjE2MzIvKnNwZWNdCglBZGRlZCBub3QgaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGRlZnMgYXMgY29tbWVudC4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJQ2hhbmdlIFdTQUdldFhieVkoKSBmdW5jdGlvbnMgdG8gbm9uLWJsb2NraW5nIG9uZXMsCglBZGRlZCBXU0FBc3luY1NlbGVjdCgpLiAKCShXU0EgZnVuY3Rpb25zIGNhbid0IGJlIGNhbmNlbGVkIHlldCkuCgpXZWQgQXByIDIwIDIzOjU4OjU4IDE5OTQgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBtaXNjL3Byb2ZpbGUuYzogRml4ZWQgYnVnIHdpdGggR2V0SW5pRmlsZU5hbWUgcmV0dXJuaW5nIHdyb25nCglwYXRoIHdoZW4gZ2l2ZW4gYSBzaW1wbGUgZmlsZSBuYW1lLiAgRml4ZWQgR2V0U2V0UHJvZmlsZSB0byBhbGxvdwoJZW51bWVyYXRpbmcgYWxsIGtleSBuYW1lcyB3aGVuIEtleU5hbWUgaXMgbnVsbC4KCkFwciAyNSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW29iamVjdHMvYml0Ymx0LmNdCglBZGQgcHJvdGVjdGlvbiB0byBCaXRCbHQoKSAmIFN0cmV0Y2hCbHQoKSBmb3Igd2lkdGggb3IgaGVpZ2h0ID0gMC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQXZvaWQgcGFpbnRpbmcgaW4gTkNfRG9OQ1BhaW50KCkgaWYgSXNXaW5kb3dWaXNpYmxlKCkuCglTaW1wbGlmeSBOQ19UcmFja01vdXNlTWVudUJhcigpIGJlY2F1c2UgY29kZSBtb3ZlZCB0byBNZW51Rm9jdXNMb29wKCkuCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvd0V4KCkgJiBEZXN0cm95V2luZG93KCkgbm93IGNhbGwgcmVzcGVjdGl2ZWx5CgkJQWRkV2luZG93VG9UYXNrKCkgJiBSZW1vdmVXaW5kb3dGcm9tVGFzaygpLgoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEFueVBvcHVwKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCUJ1ZyBGaXggOiBHZXRNb2R1bGVGaWxlTmFtZSgpIG5vdyByZXR1cm4gZnVsbCBwYXRoIGZpbGVuYW1lLgoKCSogW2luY2x1ZGUvbWVudS5oXSBbY29udHJvbHMvbWVudS5jXQoJQWRkIGhUZXh0IGhhbmRsZSBhbmQgcmVtb3ZlIG9ic29sZXRlIE1FTlVJVEVNIHN0cnVjdCBtZW1iZXJzLgoJQWRkIGEgUmVsZWFzZUNhcHR1cmUoKSBpbiBTZXRNZW51KCkgd2hlbiBtZW51YmFyIGNoYW5nZWQgd2hpbGUgY2FwdHVyZWQuCglBZGQgTWVudU1vdXNlTW92ZSgpIE1lbnVCdXR0b25VcCgpIGluIGZ1bmN0aW9uIE1lbnVGb2N1c0xvb3AoKS4KCgkqIFttaXNjL2ZpbGUuY10KCUdldFRlbXBGaWxlbmFtZSgpIG5vdyBjcmVhdGUgYSBmaWxlLgoJX2xjcmVhdGUoKSB1c2UgdW5peCBvcGVuIChuYW1lLCBtb2RlLCBwZXJtKSwgd2l0aCBwZXJtPU82NjYuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglSZW1vdmUgdGVtcG9yYXJseSBidWlsdGluIFNIRUxMLkRMTCwgQWRkIE1NU1lTVEVNLkRMTCBpbiBidWlsdGluIGxpc3QuCgoJKiBOZXcgZmlsZSBbbWlzYy9tbXN5c3RlbS5jXQoJKiBOZXcgZmlsZSBbaW5jbHVkZS9tbXN5c3RlbS5oXQoJKiBOZXcgZmlsZSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglNYW55LCBtYW55IGVtcHR5IHN0dWJzIC4uLiA6LSkKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldlZCBBcHIgMjAgMTQ6NTM6MzUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2lmMTYzMi9JbWFrZWZpbGVdCglGaXhlZCBidWcgZm9yIG5vbi1MaW51eCBzeXN0ZW1zLgoKQXByIDE4LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXhlZCBpbiBDcmVhdGVXaW5kb3dFeCgpIDogTm93IHVzZSBTZXRNZW51KCkgZm9yIG1lbnViYXIgc2V0dXAuCglOZXcgZW1wdHkgc3R1YiBmb3IgZnVuY3Rpb24gU2V0U3lzTW9kYWxXaW5kb3coKS4KCgkqIFttaXNjL2V4ZWMuY10KCU5ldyBlbXB0eSBzdHViIGZvciBmdW5jdGlvbiBFeGl0V2luZG93cygpLgoKCSogW29iamVjdHMvZm9udC5jXQoJTmV3IGVtcHR5IHN0dWIgZm9yIGZ1bmN0aW9uIEVudW1Gb250cygpLgoKCSogTmV3IGZpbGUgW21pc2MvcHJvcGVydHkuY10KCU5ldyBmdW5jdGlvbnMgUmVtb3ZlUHJvcCgpLCBHZXRQcm9wKCksIFNldFByb3AoKSAmIEVudW1Qcm9wcygpLgoKCSogTmV3IGZpbGUgW21pc2Mvc2hlbGwuY10KCU5ldyBlbXB0eSBzdHVicyBmb3IgZnVuY3Rpb24gUmVnaXN0ZXJTaGVsbFByb2MoKSwgCgkJCVNoZWxsRXhlY3V0ZSgpICYgU2hlbGxQcm9jKCkuCgoJKiBOZXcgZmlsZXMgW2xvYWRlci90YXNrLmNdICYgW2luY2x1ZGUvdGFzay5oXQoJTW92ZSBmdW5jdGlvbnMgR2V0V2luZG93VGFzaygpLCBHZXROdW1UYXNrKCksIEVudW1UYXNrV2luZG93cygpCgkJZnJvbSAnbG9hZGVyL2xpYnJhcnkuYycuCgoJKiBbaWYxNjMyL3VzZXIuY10gW2lmMTYzMi9rZXJuZWwuY10KCVB1dCBBdG9tcyBmdW5jdGlvbnMgZW50cmllcy4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3RDb21ib0JveCgpICYgRGlyRGxnTGlzdENvbWJvQm94KCkuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTmV3IGZ1bmN0aW9ucyBEaXJEbGdTZWxlY3QoKSAmIERpckRsZ0xpc3QoKS4KClN1biBBcHIgMTcgMjA6NTc6NTkgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtvYmplY3RzL3Rlc3QuY10KCUdyYXlTdHJpbmcoKSBhZGRlZC4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNhbGxHcmF5U3RyaW5nUHJvYygpIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglBZGRlZC4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvdXNlci5zcGVjXQoJQWRkZWQgZm9yZ290dGVuIHNwZWNzIGZvciBhdG9tIGZ1bmN0aW9ucy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAxMiAwMDowNTozMSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogbWlzYy9zcHkuYyAoU3B5SW5pdCk6IEFkZGVkIG1vcmUgbWVzc2FnZSB0eXBlcwoKCSogW3dpbmRvd3MvbWRpLmNdIFtpbmNsdWRlL21kaS5oXQoJTWF4aW1pemluZyBhbmQgcmVzdG9yaW5nIGNoaWxkIHdpbmRvd3MuCglUaWxpbmcgb2YgY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgMTEgMjA6NDg6MjggMTk5NCAgQWxleGFuZHJlIEp1bGxpYXJkICAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXZlcnQgZm9jdXMgYW5kIGFjdGl2YXRpb24gdG8gcHJldmlvdXMgd2luZG93IHdoZW4gaGlkaW5nIGEgd2luZG93LgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCUltcGxlbWVudGVkIHN5c3RlbSBjb2xvciBvYmplY3RzIChicnVzaGVzIGFuZCBwZW5zIGNyZWF0ZWQgYXQKCVNldFN5c0NvbG9yKCkgdGltZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbY29udHJvbHMvYnV0dG9uLmNdCglDaGFuZ2VkIHBhaW50aW5nIGNvZGUgdG8gdXNlIHN5c3RlbSBjb2xvciBvYmplY3RzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJTmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBmb3IgaW50ZXJuYWwgbWVzc2FnZXMKCWxvb3BzIChlLmcuIGZvciBkaWFsb2dzIG9yIG1lbnVzKS4KCgkqIFt3aW5kb3dzL2hvb2suY10gW2luY2x1ZGUvaG9vay5oXSAgKE5ldyBmaWxlcykKCUJlZ2lubmluZyBvZiB0aGUgd2luZG93IGhvb2tzIGltcGxlbWVudGF0aW9uLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglVc2UgbmV3IGZ1bmN0aW9uIE1TR19JbnRlcm5hbEdldE1lc3NhZ2UoKSBpbiBEaWFsb2dCb3goKS4KCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUFkZGVkIGZ1bmN0aW9uIENhbGxIb29rUHJvYygpLgoKQXByIDExLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQnVnIGZpeCA6IFdNX0NIQVJzIGFyZSBzZW50IHRvIGZvY3VzZWQgd2luZG93IGxpa2UgV01fS0VZPz8/LgoKCSogW21pc2MvZXhlYy5jXQoJTm90aGluZyBtdWNoIG1vcmUgdGhhbiBhIHN0dWIgZm9yIExvYWRNb2R1bGUoKSwgSSBzYXcgdGhlcmUgYSBsb3QKCQl0byBiZSBkb25lIGluIHRoYXQgY29ybmVyLCBJIHdpbGwgY29tZSBiYWNrIGxhdGVyIC4uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgZnVuY3Rpb25zIEdldFdpbmRvd1Rhc2soKSwgR2V0TnVtVGFzaygpLCBFbnVtVGFza1dpbmRvd3MoKSAKCQkJYW5kIGFzc29jaWF0ZWQgbW9kdWxlcyAmIHRhc2tzIGxpbmtlZC1saXN0cy4KCShpdCdzIG9ubHkgYW4gJ2VtZXJnaW5nIGJ1ZCcsIG1vcmUgdG8gY29tZSBuZXh0IHdlZWtzKS4KCgkqIFtsb2FkZXIvd2luZS5jXQoJVXNlIExvYWRMaWJyYXJ5KCkgaW5zdGVhZCBvZiBMb2FkSW1hZ2UoKSBmb3IgJ3N5c3Jlcy5kbGwnLgoKCSogW2NvbnRyb2wvbWVudS5jXQoJWW91IGNhbiBub3cgY2xpY2sgb3V0c2lkZSBtZW51IHJlZ2lvbiB3aXRob3V0IHByb2JsZW0uCglLZXlib2FyZCBuYXZpZyBtb3JlIHNtb290bHksIGV2ZW4gaWYgYSBjaGlsZCBoYXMgdGhlIGZvY3VzLgoJQnVnIGZpeCBpbiBJbnNlcnRJdGVtKCksIChiYWQgbGlua2xpc3Qgd2hlbiBpbnNlcnQgcG9pbnQgbm90IGZvdW5kKS4KCWNoYW5nZSBSZWFsbG9jIGZvciBGcmVlICYgQWxsb2MgaW4gTW9kaWZ5SXRlbSgpLgoJTUZfU1RSSU5HIG5vdyBzZXQgQkxBQ0tfUEVOIHRvIGZpeCBidWcgb2YgYmFkIGNvbG9yIG9mIHRoZSB1bmRlcnNjb3JlcyAKCQlkb25lIGJ5IERyYXdUZXh0KCksIChtYXliZSBpdCBzaG91bGQgZG9uZSBpbiBEcmF3VGV4dCgpIGl0c2VsZiA/KS4KClN1biBBcHIgMTAgMTQ6MDY6MDggMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL3Byb2ZpbGUuY10KCS5JTkkgZmlsZXMgd2lsbCBub3cgYmUgc3RvcmVkIGluIC8gbG9hZGVkIGZyb20gdGhlIHdpbmRvd3MgZGlyCglpZiBubyBwYXRoIGlzIHN1cHBsaWVkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUZpeGVkIEdldERyaXZlVHlwZSdzIHByb3RvdHlwZS4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbaW5jbHVkZS93aW5zb2NrLmhdIFttaXNjL3dpbnNvY2tldC5jXQoJRml4ZWQgcHJvdG90eXBlczogd2luc29jayB1c2VzIGEgd29yZCBhcyBzb2NrZXQgaGFuZGxlIG5vdCBhbiBpbnQuCgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIGhlYXAgYWxsb2NhdGlvbiBmb3IgcmV0dXJuZWQgc3RydWN0dXJlcy4KCUFkZGVkIG5vbi1ibG9ja2luZyBXU0FBc3luY0dldFhieVkoKSBmdW5jdGlvbnMgYXMgYmxvY2tpbmcgb25lcy4KCgkqIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgSXNETExMb2FkZWQoKSwgdXNlZCBpbiBMb2FkSW1hZ2UoKSB0byBwcmV2ZW50IGxvYWRpbmcKCWEgZGxsIG11bHRpcGxlIHRpbWVzLgoJRGlyZWN0b3J5IGlzIGFkZGVkIHRvIHdpbmUncyBwYXRoIHdoZW4gYSBmdWxscGF0aCBpcyBzdXBwbGllZCB3aGVuCglzdGFydGluZyB3aW5lLgoJTG9hZEltYWdlKCk6IERMTCBmaWxlbmFtZSB1c2VkIGluc3RlYWQgRExMJ3Mgb3duIGludGVybmFsIG5hbWUsCglmaXhlcyAnQmFkIERMTCBuYW1lJyBlcnJvcnMuCgpTYXQgQXByICA5IDA4OjI2OjAzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy93aWRnZXRzLmNdCglGaXJzdCByZWxlYXNlIG9mIGVkaXQgY29udHJvbC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEFwciAgNSAxNDozNjo1OSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2luY2x1ZGUvbWRpLmhdIFt3aW5kb3dzL21kaS5jXQoJVXNlIFdNX1BBUkVOVE5PVElGWSBtZXNzYWdlcyB0byBhY3RpdmF0ZSBjaGlsZHJlbi4KCUdlbmVyYXRlIFdNX0NISUxEQUNUSVZBVEUgbWVzc2FnZXMuCglCZWdpbm5pbmdzIGhhbmRsZXIgZm9yIG1heG1pemVkIGNoaWxkIHdpbmRvdy4KCUNsZWFuIHVwIHdoZW4gY2hpbGRyZW4gYXJlIGRlc3Ryb3llZC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJUmVtb3ZlZCBjb2RlIGFkZCA5NC8wMy8yNi4KCkFwciA0LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCglNYWtlIG1vdXNlIG1lbnUgbmF2aWdhdGlvbiB3b3JraW5nIGFnYWluLiA6LSkpCgkoYmUgY2FyZWZ1bGwsIGNsaWNraW5nIG91dHNpZGUgbWVudXMgKGllLjogY2xpZW50cmVjdCkgCglub3QgcmVzb2x2ZWQgeWV0KQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdICBbY29udHJvbHMvc2Nyb2xsLmNdCglCdWdzIGZpeCBpbiBOQ1RyYWNrU2Nyb2xsQmFycygpLgoKCSogW21pc2MvZG9zX2ZzLmNdCglCdWcgZml4IGluICdUb0RvcygpJyBpbiBjb252ZXJzaW9uIGZvciAnLycsCgkJKGV4YW1wbGU6ICcvd2luZG93Lycgd2FzIHRyYW5zbGF0ZWQgdG8gJ1dJTkRPV3MnKS4KCgkqIFttaXNjZW11L2ludDIxLmNdCglGdW5jdGlvbiBDaGFuZ2VEaXIoKSBleHRyYWN0IHBvc3NpYmxlIGRyaXZlIGJlZm9yZSBET1NfQ2hhbmdlRGlyKCkuCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10gIFtsb2FkZXIvd2luZS5jXQoJUGxheWluZyBhcm91bmQgbW92aW5nIGZ1bmN0aW9uIEdldFByb2NBZGRyZXNzKCkgYW5kIHB1dCBzb21lIGNvZGUgaW4uCgpNb24gQXByICA0IDIxOjM5OjA3IDE5OTQgIEFsZXhhbmRyZSBKdWxsaWFyZCAoanVsbGlhcmRAbGFtaXN1bi5lcGZsLmNoKQoKCSogW21pc2MvbWFpbi5jXQoJQmV0dGVyIGV4cGxhbmF0aW9uIG9mIGNvbW1hbmQtbGluZSBvcHRpb25zLgoKCSogW29iamVjdHMvZGliLmNdCglJbXBsZW1lbnRlZCBTZXRESUJpdHNUb0RldmljZSgpLgoKCSogW3dpbmRvd3MvZGMuY10KCUJ1ZyBmaXggaW4gU2V0RENTdGF0ZSgpLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVJlbW92ZWQgV1NfRElTQUJMRUQgaGFuZGxpbmcgKG5vdyBkb25lIGluIG1lc3NhZ2UuYykuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBzZW5kaW5nIGEgV01fUEFSRU5UTk9USUZZIG1lc3NhZ2UgaW4gTVNHX1RyYW5zbGF0ZU1vdXNlTXNnKCkuCglVc2UgV2luZG93RnJvbVBvaW50KCkgdG8gZmluZCB0aGUgd2luZG93IGZvciBtb3VzZSBldmVudHMsIHRha2luZwoJaW50byBhY2NvdW50IGRpc2FibGVkIHdpbmRvd3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJQnVnIGZpeCBpbiBCZWdpblBhaW50KCkgdG8gYWxsb3cgY2FsbGluZyBpdCBhdCBvdGhlciB0aW1lcyB0aGFuCglvbiBXTV9QQUlOVCAoU29saXRhaXJlIG5lZWRzIGl0Li4uKQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBGaW5kV2luZG93KCkuCglSZXdyaXR0ZW4gRW5hYmxlV2luZG93KCkgdG8gYmVoYXZlIG1vcmUgbGlrZSBXaW5kb3dzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglSZXdyaXR0ZW4gV2luZG93RnJvbVBvaW50KCkgdG8gYWxzbyBzZWFyY2ggY2hpbGQgd2luZG93cy4KCk1vbiBBcHIgIDQgMTc6MzY6MzIgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtpbmNsdWRlL2ludDIxLmhdIC0+IFttc2Rvcy5oXQoJcmVuYW1lZC4KCgkqIFttaXNjZW11L2ludDEwLmhdIFttaXNjZW11L2ludDI1LmhdIFttaXNjZW11L2ludDI2LmhdIAoJbmV3LCBhZGRlZCBmb3IgaW50IDEwLCAyNSBhbmQgMjYuCgoJKiBbbWlzY2VtdS9pb3BvcnRzLmNdCgluZXcsIGFkZGVkIHRvIGFsbG93IHdpbiBhcHBzIHRvIHVzZSBpb3BvcnRzLgoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGluLCBpbmIsIG91dCwgb3V0YiBpbnN0cnVjdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMjcgMTM6NDA6MjUgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIGNvbnRyb2xzL21lbnUuYyAoSW5zZXJ0TWVudSk6IENoYW5nZWQgdG8gdXNlIEZpbmRNZW51SXRlbSgpLgoKU2F0IE1hciAyNiAyMToyMzo1NSAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW3dpbmRvd3MvbWRpLmNdCglXaW5kb3cgbGlzdCBwcm9wZXJseSB1cGRhdGVkLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQ2FsbCBXSU5QT1NfQ2hpbGRBY3RpdmF0ZSgpIHdoZW4gbW91c2UgcHJlc3NlZC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIFdJTlBPU19Jc0FuQWN0aXZlV2luZG93KCkgaW5zdGVhZCBvZiBHZXRBY3RpdmVXaW5kb3coKSBpbgoJTkNfSGFuZGxlTkNQYWludCgpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglDcmVhdGVkIGZ1bmN0aW9ucyBXSU5QT1NfSXNBbkFjdGl2ZVdpbmRvdygpIGFuZCBXSU5QT1NfQWN0aXZhdGVDaGlsZCgpCgpUaHUgTWFyIDI0IDE0OjQ5OjE3IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKERlbGV0ZU1lbnUpOiBDaGFuZ2VkIHRvIHVzZSBGaW5kTWVudUl0ZW0KCShEZWxldGVNZW51KTogTWFueSBidWcgZml4ZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ3JlYXRlZCBmdW5jdGlvbiBGaW5kTWVudUl0ZW0oKS4KClRodSBNYXIgMjQgMTQ6MTc6MjQgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlZCBpbmNvcnJlY3QgTURJIGhhbmRsaW5nIGNvZGUgZnJvbSBDcmVhdGVXaW5kb3dFeCgpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1GX1NUUklORyBpdGVtcyBuZWVkZWQgdG8gYWxsb2NhdGUgYSBwcml2YXRlIGNvcHkgb2Ygc3RyaW5nLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUZpeGVkIGJ1Z2d5IGNhbGxzIHRvIEdsb2JhbEZyZWUoKS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglFbGltaW5hdGVkIHNvbWUgcmVkdW5kYW50IGNvZGUgd2l0aCBmdW5jdGlvbiBjYWxsLgoKV2VkIE1hciAyMyAxOTk0IFBlbnR0aSBNb2lsYW5lbiAocGVudHRpLm1vaWxhbmVuQG50Yy5ub2tpYS5jb20pCgoJKiBbd2luZG93cy90aW1lci5jXQoJdGltZXIgbGlzdCBwb2ludGVycyBsb29wZWQgaW4gSW5zZXJ0VGltZXIKClR1ZSBNYXIgMjkgMTM6MzI6MDggTUVUIERTVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbbWlzYy9jdXJzb3IuY10KCUEgZmV3IGNoYW5nZXMgZm9yIGRlc2t0b3Agd2luZG93IHN1cHBvcnQuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVwdGggb3B0aW9uLgoKCSogW21pc2MvcmVjdC5jXQoJWWV0IGFub3RoZXIgYnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJQ2hhbmdlcyB0byB1c2Ugb25seSBvbmUgZGVwdGggKHNwZWNpZmllZCB3aXRoIC1kZXB0aCkKCWZvciBjb2xvciBiaXRtYXBzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRpdGhlcmVkIHNvbGlkIGJydXNoZXMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVXNlIHRoZSBzYW1lIDIwIHN5c3RlbSBjb2xvcnMgYXMgaW4gV2luZG93cy4KCVN5c3RlbSBwYWxldHRlIGluaXRpYWxpc2F0aW9uIG5vdyBkb25lIGluIENPTE9SX0luaXRQYWxldHRlKCkuCglBZGRlZCBzdXBwb3J0IGZvciBhIGNvbG9yIG1hcHBpbmcgdGFibGUgdG8gbWFwIGxvZ2ljYWwgY29sb3IKCWluZGV4ZXMgdG8gWCBjb2xvcm1hcCBlbnRyaWVzLgoJSW1wbGVtZW50ZWQgR2V0TmVhcmVzdENvbG9yKCkgYW5kIFJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpLgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBzdXBwb3J0IGZvciBjb2xvciBtYXBwaW5nIHRhYmxlLgoKCSogW29iamVjdHMvZGl0aGVyLmNdICAoTmV3IGZpbGUpCglJbXBsZW1lbnRlZCBzb2xpZCBjb2xvciBkaXRoZXJpbmcuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglJbXBsZW1lbnRlZCBHZXRTeXN0ZW1QYWxldHRlRW50cmllcygpIGFuZCBTZWxlY3RQYWxldHRlKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTWFrZSBhIGNvcHkgb2YgdGhlIG1lbnUgbmFtZSBpbiBSZWdpc3RlckNsYXNzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJRml4ZWQgZGV2aWNlIGNhcHMgd2hlbiB1c2luZyBhIGRlc2t0b3Agd2luZG93LgoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbG9yIG1hcHBpbmcgdGFibGUgaW4gRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIENvbmZpZ3VyZU5vdGlmeSBoYW5kbGVyIG9uIGRlc2t0b3Agd2luZG93LgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxsIHRvIFhUcmFuc2xhdGVDb29yZGluYXRlcygpIG9uIGV2ZXJ5IG1vdXNlIG1vdGlvbgoJTmV3IGZ1bmN0aW9uIE1TR19TeW5jaHJvbml6ZSgpIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIFggc2VydmVyLgoKCSogW3dpbmRvd3Mvc3lzY29sb3IuY10KCVJld3JpdHRlbiBTWVNDT0xPUl9Jbml0KCkgdG8gcmVhZCB0aGUgc3lzdGVtIGNvbG9ycyBmcm9tIFdJTi5JTkkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHN5bmNocm9uaXphdGlvbiBvbiB3aW5kb3cgbWFwcGluZy4gU29sdmVzIHRoZSBkb3VibGUgcmVkcmF3Cglwcm9ibGVtIHdoZW4gc3RhcnRpbmcgU29saXRhaXJlLgoKTWFyIDI3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbY29udHJvbC9tZW51LmNdCSogW3dpbmRvd3MvZGVmd25kLmNdCglNYWtlIGtleWJvYXJkIG5hdmlnYXRpb24gd29ya2luZyB3aXRoIG1lbnViYXIsCglidXQgdGVtcG9yYXJlbHkgaW5zZXJ0ZWQgYSBidWcgaW4gbWVudWJhciBtb3VzZSBoYW5kbGluZyAuLi4gOi0oKAoJKGl0IHdpbGwgYmUgZml4IG5leHQgd2VlayAhKQoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglDb25uZWN0IFZLX01FTlUgdG8gbWVudWJhciBuYXZpZ2F0aW9uLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglHZXRNb2R1bGVIYW5kbGUoKSByZXR1cm4gJ2ZpY3RpdmUgMHhGMDAwKyBoYW5kbGVzJyBmb3IgYnVpbHQtaW4gRExMcy4KClN1biBNYXIgMjAgMjI6MzI6MTMgMTk5NCBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2MvbWFpbi5jXQoJQWRkZWQgQ29weSgpLiBBZGRlZCBhIGNoZWNrIGZvciBgLWgnIHRvIHNob3cgdXNhZ2UuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIGJ1ZyBpbiBGaW5kRmlsZSgpLCB0byBsb2FkIGRpcmVjdG9yaWVzIGFzIGRsbHMuCgoJKiBbbWlzYy9kb3NfZnMuY10KCUZpeGVkIFRvVW5peCgpIGFuZCBUb0RvcygpIGFnYWluLCBhcyBteSBwcmV2aW91cyBwYXRjaAoJZGlkbid0IG1ha2UgaXQuCgoJKiBbbWlzYy9kb3NfZnMuY10gW21pc2NlbXUvaW50MjEuY10KCUJ1ZyBmaXhlcywgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGFsbCB3aW5maWxlIGFuZCBwcm9nbWFuIGludDIxCglyZXF1ZXN0cyBub3cgZXhjZXB0IGZvciBhIGZldyBzbWFsbCB0aGluZ3MuCgpUdWUgTWFyIDI5IDA2OjI1OjU0IDE5OTQgIGNyd0BoYXJyaXMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKCgkqIFttZW1vcnkvaGVhcC5jXQoJSW1wbGVtZW50ZWQgR2V0RnJlZVN5c3RlbVJlc291cmNlcygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gTWFyIDIxIDE3OjMyOjI1IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBjb250cm9scy9tZW51LmMgKEdldFN1Yk1lbnUpOiBGdW5jdGlvbiBkaWQgbm90IHJldHVybiBjb3JyZWN0IHZhbHVlCgoJKiBbd2luZG93cy9tZGkuY10KCUJlZ2lubmluZ3Mgb2YgbWVudSBoYW5kbGluZy4KClRodSBNYXIgMTAgMTE6MzI6MDYgMTk5NCAgU3RlZmFuIChTQU0pIE11ZW56ZWwgIChtdWVuemVsQHRhdC5waHlzaWsudW5pLXR1ZWJpbmdlbi5kZSkKCgkqIFtvYmplY3RzL2ZvbnQuY10KCWlmIGZvbnQud2lkdGggZXF1YWxzIHplcm8gdXNlIGFzdGVyaXggaW5zdGVhZC4KCk1vbiBNYXIgMjEgMTc6MjM6MzcgTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJUmV3cml0dGVuIGJpdG1hcCBjb2RlIHRvIHVzZSBleGNsdXNpdmVseSBYIHBpeG1hcHM7ICptdWNoKiBmYXN0ZXIuCgoJKiBbb2JqZWN0cy9icnVzaC5jXQoJU29tZSBjaGFuZ2VzIHdpdGggcGF0dGVybiBicnVzaGVzIGJlY2F1c2Ugb2YgdGhlIG5ldyBiaXRtYXAgY29kZS4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglBZGRlZCBmdW5jdGlvbiBDT0xPUl9Ub1BoeXNpY2FsIGZvciBiZXR0ZXIgY29sb3IgbWFwcGluZy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJSGVhdmlseSBvcHRpbWl6ZWQgU2V0RElCaXRzKCkuCgoJKiBbd2luZG93cy9kYy5jXQoJT3BpbWl6ZWQgU2V0RENTdGF0ZSgpIGFuZCBEQ19TZXR1cEdDKigpIGZ1bmN0aW9ucy4KCUFkZGVkIHN0dWIgZm9yIENyZWF0ZUlDKCkuCgpNYXIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttaXNjL21lc3NhZ2UuY10KCUNhbGwgU2V0Rm9jdXMoKSBhZnRlciBjbG9zaW5nIGJveCB0byBnaXZlIGJhY2sgZm9jdXMgdG8gcHJldmlvdXMgb3duZXIuCgoJKiBbbWlzYy9maWxlcy5jXQoJU21hbGwgYnVnIGZpeCBpbiBHZXRUZW1wRmlsZW5hbWUoKSA6IHJlcGxhY2UgYSAnXCcgdG8gJ1xcJy4KCgkqIFtjb250cm9sL3Njcm9sbC5jXQoJQ2FsbHMgdG8gQml0Qmx0KCkgcmVwbGFjZSBieSBTdHJldGNoQmx0KCkuCgoJKiBbY29udHJvbC9tZW51LmNdCglDYWxsIFNldEZvY3VzKCkgdG8gcHJldmlvdXMgb3duZXIgYWZ0ZXIgY2xvc2luZyBQb3B1cHMuCQoJRmlsbCBzdHViIERlbGV0ZU1lbnUoKS4KCgkqIFtjb250cm9sL2xpc3Rib3guY10KCSogW2NvbnRyb2wvY29tYm8uY10KCVVzZSBTZXRGb2N1cygpIGluIFdNX0xCVVRUT05ET1dOLgoJQ2xvc2UgQ29tYm9Cb3ggTGlzdCB1cG9uIFdNX0tJTExGT0NVUy4KCUVhcmx5IGRldmVsb3BtZW50IG9mIFdNX01FQVNVUkVJVEVNIG1lY2FuaXNtLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglFYXJseSBkZXZlbG9wbWVudCBvZiBXTV9NRUFTVVJFSVRFTSBtZWNhbmlzbS4KClR1ZSBNYXIgMjIgMTA6NDQ6NTcgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwpCgoJKiBbbWlzYy9hdG9tLmNdCglGaXhlZCBzaW50YXhpcyBwcm9ibGVtIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgMTUgMTM6MTE6NTYgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIG1lc3NhZ2UgdHlwZXMgYW5kIHN0cnVjdHVyZXMgZm9yIE1ESQoKCSogW2luY2x1ZGUvbWRpLmhdCglDcmVhdGVkIGludGVybmFsIHN0cnVjdHVyZXMgZm9yIGhhbmRsaW5nIE1ESQoKCSogW3dpbmRvd3MvbWRpLmNdCglCZWdhbiBjcmVhdGluZyBNREkgc3VwcG9ydAoKVGh1IE1hciAxMCAxNjo1MTo0NiAxOTk0ICBCb2IgQW1zdGFkdCAgKGJvYkBwb29oKQoKCSogW2xvYWRlci93aW5lLmNdIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIG5ldyBmaWVsZCB0byAic3RydWN0IHdfZmlsZXMiIHRvIGhvbGQgdGhlICJuYW1lIHRhYmxlIgoJcmVzb3VyY2UgZm9yIFdpbmRvd3MgMy4wIHByb2dyYW1zCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBjb2RlIHRvIGhhbmRsZSBwcm9ncmFtcyB3aXRoIGEgIm5hbWUgdGFibGUiIHJlc291cmNlLgoJTG9hZFJlc291cmNlQnlOYW1lKCkgbW9kaWZpZWQgdG8gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YKCXRoaXMgcmVzb3VyY2UuCgpNb24gTWFyIDE0IDIyOjMxOjQyIE1FVCAxOTk0ICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQWRkZWQgaW5zdGFsbGluZyB0aGUgcHJpdmF0ZSBjb2xvcm1hcCBvbiB0aGUgZGVza3RvcCB3aW5kb3cuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ2xlYW5lZCB1cCBmb2N1cyBldmVudCBoYW5kbGluZyAoc2VlIGZvY3VzLmMpLgoJVXNlIEdldEZvY3VzKCkgdG8gZGlyZWN0IGtleSBldmVudHMgdG8gdGhlIGNvcnJlY3Qgd2luZG93LgoKCSogW3dpbmRvd3MvZm9jdXMuY10KCVJld3JpdHRlbiBTZXRGb2N1cygpIHRvOgoJLSBvbmx5IHNldCBYIGZvY3VzIG9uIHRvcC1sZXZlbCB3aW5kb3dzCgktIHNlbmQgV01fU0VURk9DVVMgYW5kIFdNX0tJTExGT0NVUyBtZXNzYWdlcyAod2FzIGRvbmUgaW4gZXZlbnQuYykKCS0gcHJldmVudCBzZXR0aW5nIGZvY3VzIHRvIGRpc2FibGVkIHdpbmRvd3MKCS0gaW5zdGFsbCBwcml2YXRlIGNvbG9ybWFwIHNvIC1wcml2YXRlbWFwIG9wdGlvbiB3b3JrcyBhZ2FpbgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy90aW1lci5jXQoJQ2hhbmdlZCB0aW1lciBtYW5hZ2VtZW50IHRvIG5vIGxvbmdlciB1c2UgUG9zdE1lc3NhZ2UoKSwgYnV0Cgl0byBnZW5lcmF0ZSB0aW1lciBtZXNzYWdlcyBvbiB0aGUgZmx5LiBBbHNvIGZpeGVkIGEgcmVsYXRlZCBidWcKCWluIEdldE1lc3NhZ2UoKSB3aGljaCBjb3VsZCBjYXVzZSBidXN5LXdhaXRpbmcuCgoJKiBbd2luZG93cy93aW4uY10KCU9ubHkgc2VsZWN0IGZvY3VzIGV2ZW50cyBvbiB0b3AtbGV2ZWwgd2luZG93cy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc29tZSBzYW5pdHkgY2hlY2tzIGZvciBkZXNrdG9wIHdpbmRvdy4KCkZyaSBNYXIgIDQgMjA6NDI6MDEgMTk5NCAgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFttaXNjL2Rvc19mcy5jXQoJYnVnIGZpeGVzIGluIFRvVW5peCgpLCBXaW5JbmlGaWxlTmFtZSgpLCBHZXRVbml4RmlsZU5hbWUoKS4gCglTdXBwb3J0IGZvciB0aWxkZSBzeW1ib2wgYWRkZWQgZm9yIHJvb3RkaXJlY3RvcmllcyBpbiBbZHJpdmVzXQoJc2VjdGlvbiBvZiB3aW5lJ3MgY29uZmlnZmlsZS4KCgkqIFttaXNjL2ZpbGUuY10KCWhyZWFkKCksIGh3cml0ZSgpIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXQoJaG1lbWNweSgpIGFkZGVkLgoKCSogW2lmMTYzMi9zdHJlc3Muc3BlY10gW2luY2x1ZGUvc3RyZXNzLmhdIFttaXNjL3N0cmVzcy5jXQoJQWRkZWQgU1RSRVNTLkRMTCwgYW4gdXNlbGVzcyBkbGwgdXNlZCB0byBzdHJlc3MgYSB3aW5kb3dzIHN5c3RlbS4KCgkqIFsqLypdCglBZGRlZCBtaXNzaW5nICNpbmNsdWRlcywgZml4ZWQgcHJvdG90eXBlcyBmb3IgcHJvdG90eXBlIGNoZWNraW5nLgoKCSogW2luY2x1ZGUvcHJvdG90eXBlcy5oXQoKCUFkZGVkIHByb3RvdHlwZXMgZm9yIGxvYWRlci8qYywgaWYxNjMyLypjLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWFyICA4IDA5OjU0OjM0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbQ29uZmlndXJlXQoJQWRkZWQgcmVtaW5kZXIgdG8gc2V0IFdJTkVQQVRILCBpZiBpdCBpcyBub3Qgc2V0LgoKCSogW0ltYWtlZmlsZV0KCVJlbW92ZWQgI2VsaWYncwoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQWRkZWQgQk5fQ0xJQ0tFRCBub3RpZmljYXRpb24gZm9yIG93bmVyLWRyYXcgYnV0dG9ucy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFttZW1vcnkvaGVhcC5jXQoJQ2hhbmdlZCBMb2NhbCogZnVuY3Rpb25zIHRvIFdJTjE2X0xvY2FsKiB0byBwcmV2ZW50IHVuY29uY2lvdXMgdXNlCglvZiB0aGVzZSBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglQdXNoIG9sZCBTdGFjazE2RnJhbWUgb24gc3RhY2sgYmVmb3JlIHNldHRpbmcuCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttaXNjL2F0b20uY10gW2luY2x1ZGUvaGVhcC5oXSBbbWVtb3J5L2xvY2FsLmNdCglBZGRlZCBtdWx0aXBsZSBsb2NhbCBoZWFwIGhhbmRsaW5nIGluIEF0b20qIGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3JlZ2Z1bmMuaF0gW21pc2NlbXUvaW50MjEuY10KCVJld3JvdGUgRE9TM0NhbGwoKSB1c2UgY29udGV4dCBmcmFtZSB0aGF0IGlzIGFscmVhZHkgb24gdGhlIHN0YWNrLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJRml4ZWQgdG8gYWxsb3cgbGVhZGluZyAiOyIgdG8gbWFyayBjb21tZW50cy4KCgkqIFttaXNjL3NweS5jXQoJRml4ZWQgYnVncyBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgImluY2x1ZGUiIGFuZCAiZXhjbHVkZSIgZmlsdGVycy4KCgkqIFttaXNjL3VzZXIuY10KCVJlYXJyYW5nZWQgY2FsbHMgaW4gSW5pdEFwcCgpLgoKCSogW21pc2MvZm9udC5jXQoJRml4ZWQgZm9udCBoYW5kbGluZyB0byBjcmVhdGUgc3lzdGVtIGZvbnRzLCBpZiB0aGV5IGFyZSB1c2VkLgoKCSogW3dpbmRvd3MvZGMuY10KCUlmIHRleHQgZHJhd24gb24gd2luZG93IHdpdGggbm8gZm9udCBzcGVjaWZpZWQsIHRoZW4gZGVmYXVsdCB0aGUKCWZvbnQgdG8gdGhlIHN5c3RlbSBmb250LgoKTW9uIE1hciAgNyAyMDozMjowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX05DQ1JFQVRFIGFuZCBXTV9FUkFTRUJLR05EIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldERlc2tQYXR0ZXJuKCkuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCAtZGVza3RvcCBvcHRpb24gdG8gZ2V0IGEgbGFyZ2UgZGVza3RvcCB3aW5kb3cgd2l0aAoJZXZlcnl0aGluZyBpbnNpZGUgaXQuCglBZGRlZCAtbmFtZSBvcHRpb24uCgoJKiBbbWlzYy9yZWN0LmNdCglCdWcgZml4IGluIFN1YnRyYWN0UmVjdCgpLgoKCSogW29iamVjdHMvKi5jXQoJUmVwbGFjZWQgdGhlIERlZmF1bHRSb290V2luZG93KCkgbWFjcm8gYnkgdGhlIHJvb3RXaW5kb3cgdmFyaWFibGUuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10KCUEgZmV3IGNoYW5nZXMgdG8gYWNjb21vZGF0ZSB0aGUgbmV3IGRlc2t0b3Agd2luZG93LgoKIFR1ZSBNYXIgIDggMTE6MTM6MDMgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQogCiAJKiBbdG9vbGtpdC9hcmNoLmNdIC0tTmV3IGZpbGUtLSAKIAlSb3V0aW5lcyBmb3IgY29udmVydGluZyBsaXR0bGUgZW5kaWFuIGRhdGEgc3RydWN0dXJlcyB0bwogCWJpZy1lbmRpYW4gZGF0YSBzdHJ1Y3R1cmVzLCBjdXJyZW50bHkgb25seSBCSVRNQVAgc3RydWN0dXJlcyBhcmUgCiAJY29udmVydGVkLgogCiAJKiBbbWlzYy9hdG9tLmNdCiAJV2hlbiB1c2VkIGFzIHBhcnQgb2YgdGhlIFdpbmVMaWIsIHRoZSBjb2RlIGlzIG11Y2ggc2ltcGxlci4KIAlEb2Vzbid0IGRlcGVuZCBvbiBhbGlnbmVtZW50LgogCiAJKiBbbG9hZGVyL3dpbmUuY10KIAlJZmRlZmVkIEVtdWxhdG9yIGRlcGVuZGVudCBjb2RlIGlmIGNvbXBpbGluZyBXaW5lTGliLgogCiAJKiBbbG9hZGVyL3Jlc291cmNlLmNdCiAJTW92ZWQgbWlzYy9yZXNvdXJjZS5jIHRvIGxvYWRlci9yZXNvdXJjZS5jLgogCiAJKiBbbG9hZGVyL2R1bXAuYyxsZHQuYyxsZHRsaWIuYyxsaWJyYXJ5LGMsc2VsZWN0b3IuYyxzaWduYWwuY10KIAlJZmRlZmVkIHdob2xlIGNvZGUgaWYgY29tcGlsaW5nIFdJTkVMSUIuCiAKIAkqIFtpbmNsdWRlL3dpbnNvY2suaF0KIAlBZGRlZCBjb21waWxhdGlvbiBkZWZpbmUgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gU3VuT1MuCiAKIAkqIFtpbmNsdWRlL3dpbmUuaF0KIAlSZW1vdmVkIGxvYWRfdHlwZWluZm8gYW5kIGxvYWRfbmFtZWluZm8gcHJvdG90eXBlcywgdGhleSBiZWxvbmcKIAl0byBuZWV4ZS5oCiAKIAkqIFtpbmNsdWRlL25lZXhlLmhdCiAJQWRkZWQgbG9hZF90eXBlaW5mbyBhbmQgbG9hZF9uYW1laW5mbyBwcm90b3R5cGVzLgogCiAJKiBbaW5jbHVkZS9hcmNoLmhdCiAJRml4ZWQgc29tZSBidWdzIGluIHRoZSBjb252ZXJzaW9uIHJvdXRpbmVzLgogCUFkZGVkIG1hY3JvcyBmb3IgQml0bWFwIGxvYWRpbmcuCgpUdWUgTWFyICA4IDEyOjUyOjA1IDE5OTQgIGNyd0BtYW5pYWMubWxiLnNlbWkuaGFycmlzLmNvbSAoQ2FybCBXaWxsaWFtcykKIAkKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdldEZyZWVTcGFjZSgpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2xvYWRlci9yZXNvdXJjZS5jXQoJSW1wbGVtZW50ZWQgQ3JlYXRlSWNvbigpCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXIgIDEgMTE6MzA6MjEgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtDb25maWd1cmVdIFsqL0ltYWtlZmlsZV0KCUNyZWF0ZWQgY29uZmlndXJlIHNjcmlwdCB0byBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIFdpbmUgYnVpbGRzLgoKCSogW0NvbmZpZ3VyZV0gW3Rvb2xzL2J1aWxkLmNdIFtpZjE2MzIvSW1ha2VmaWxlXSBbV2luZS50bXBsXQoJQWRkZWQgYWJpbGl0eSB0byBjb21waWxlIFdpbmUgb24gc3lzdGVtcyB3aXRoIDE0LWNoYXIgZmlsZW5hbWUgbGltaXQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2MvbWFpbi5jXQoJQWRkZWQgLXJlbGF5ZGJnIG9wdGlvbiB0byBjb21tYW5kIGxpbmUgaWYgREVCVUdfUkVMQVkgaXMgZGVmaW5lZC4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUZpeGVkIGJ1ZyBpbiBHZXRFbnRyeURMTE5hbWUoKSB0aGF0IGNhdXNlZCBXaW5lIHRvIHNlZyBmYXVsdC4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgTG9jYWxJbml0KCkgdG8gd29yayBjb3JyZWN0bHkuCgoJKiBbbWlzYy91c2VyLmNdCglBZGRlZCBjb2RlIHRvIGNhbGwgbG9hZGVkIERMTHMnIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgoKVHVlIE1hciAgMSAwMTowMToxNyBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvZGNlLmNdCglBZGRlZCBjbGlwcGluZyBvZiBjaGlsZCB3aW5kb3dzIGJ5IHRoZWlyIHBhcmVudCdzIGNsaWVudCBhcmVhLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4IGluIE5DX0RvTkNQYWludCgpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCgpGZWIgMjcsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW0vYXRvbS5jXQoJQnVnIGZpeCBhZ2FpbiBpbiBBVE9NX0RlbGV0ZUF0b20oKSA6IAoJCWNoYW5nZSBMb2NhbEZyZWUoKSBieSBVU0VSX0hFQVBfRlJFRSgpLgoJKFByZXZpb3VzIHBhdGNoIGRvbmUgRmViIDEzdGggaGFkIGJlZW4gbG9zdCkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCU1vdmUgYml0bWFwcyBsb2FkaW5nIGluIEFsbG9jU2Nyb2xsQmFyKCkgaW5zdGVhZCBvZiBpbiBXTV9DUkVBVEUuCgoJKiBbd2luZG93cy9jbGFzcy5jXSAoc29ycnkgQWxleCAuLi4pCglUaGVyZSB3YXMgbm8gYnVnIHRoZXJlICJpbiBSZWdpc3RlckNsYXNzKCkgOiAKICAgICAgICAgICAgICAgIFdORENMQVNTLT5scHN6Q2xhc3NOYW1lIHdhcyByZXNldCB0byBOVUxMLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl4KCgkqIFttaXNjL2NsaXBib2FyZC5jXQktLS0gTmV3IEZpbGUgLS0tCglOZXcgZnVuY3Rpb24gRW51bUNsaXBib2FyZEZvcm1hdHMoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gQ2xvc2VDbGlwYm9hcmQoKS4KCU5ldyBmdW5jdGlvbiBFbXB0eUNsaXBib2FyZCgpLgoJTmV3IGZ1bmN0aW9uIEdldENsaXBib2FyZE93bmVyKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkVmlld2VyKCkuCglOZXcgZnVuY3Rpb24gQ291bnRDbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gSXNDbGlwYm9hcmRGb3JtYXRBdmFpbGFibGUoKS4KCU5ldyBmdW5jdGlvbiBPcGVuQ2xpcGJvYXJkKCkuCglOZXcgZnVuY3Rpb24gR2V0Q2xpcGJvYXJkRGF0YSgpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZFZpZXdlcigpLgoJTmV3IGZ1bmN0aW9uIEVudW1DbGlwYm9hcmRGb3JtYXRzKCkuCglOZXcgZnVuY3Rpb24gUmVnaXN0ZXJDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBDaGFuZ2VDbGlwYm9hcmRDaGFpbigpLgoJTmV3IGZ1bmN0aW9uIFNldENsaXBib2FyZERhdGEoKS4KCU5ldyBmdW5jdGlvbiBHZXRPcGVuQ2xpcGJvYXJkV2luZG93KCkuCglOZXcgZnVuY3Rpb24gR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQoKS4KCU5ldyBmdW5jdGlvbiBHZXRDbGlwYm9hcmRGb3JtYXROYW1lKCkuCgpUdWUgTWFyICAxIDIwOjE1OjQ1IDE5OTQgIEVyaWsgQm9zIDxlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmw+CgoJKiBbbWlzYy9jb21tLmNdCglidWdmaXggaW4gT3BlbkNvbW0oKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEZlYiAyMiAxODowNDowMiAxOTk0ICBKZWZmcmV5IEhzdSA8aHN1QGZyZWVmYWxsLmNkcm9tLmNvbT4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCVRoZSBzb2NrcHJvdG8gc3RydWN0IGlzIGFscmVhZHkgZGVmaW5lZCBpbiA8c3lzL3NvY2tldC5oPgoKCSogW21pc2Mvd2luc29jay5jXQoJTmVlZCB0byBpbmNsdWRlIDxuZXRpbmV0L2luLmg+IGZvciBzdHJ1Y3QgaW4tYWRkci4KCVVzZSBzeXNfZXJybGlzdFtdIGluc3RlYWQgb2Ygc3RyZXJyb3JbXS4KCgkqW3Rvb2xraXQvaGVhcC5jXQoJQU5TSSBDIHNwZWNpZmllcyB0aGF0IHRoZSBtYWxsb2MgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHN0ZGxpYi5oLAoJICBzbyB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgbWFsbG9jLmguCgoJKltsb2FkZXIvbGR0bGliLmNdCglQcmludCBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlIGFib3V0IHByb2JhYmxlIGNhdXNlIG9mIGkzODZfc2V0X2xkdCgpCgkgIGZhaWx1cmUgYW5kIHRoZW4gZXhpdC4KCgkqW0ltYWtlZmlsZV0KCUZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgdXNlIGdtYWtlIGJ5IGRlZmF1bHQsIHNldCB0aGUgTUFLRSB2YXJpYWJsZQoJICB0byBnbWFrZSBhbmQgcHJvcGFnYXRlIGl0IG9uIHJlY3Vyc2l2ZSBtYWtlcy4KCVRha2Ugb3V0IC1saTM4NiBmb3IgRnJlZUJTRCBzeXN0ZW1zIGFuZCBkZWZpbmUgX19GcmVlQlNEX18gc28gV2luZQoJICBjYW4gYmUgYnVpbHQgd2l0aCB0aGUgRnJlZUJTRCAxLjAuMiBjb21waWxlci4KClR1ZSBGZWIgMjIgMDI6NTI6MTkgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFtvYmplY3RzL2JpdGJsdC5jXQogICAgICAgIEFkZGVkIGluIHRocmVlIGZ1bmN0aW9ucyB0byBkbyBzdHJldGNoaW5nIGFuZCBjb21wcmVzc2lvbgogICAgICAgIGZvciBXSElURU9OQkxBQ0ssIEJMQUNLT05XSElURSwgYW5kIGNvbG9yIGNvcGllcy4KClR1ZSBGZWIgMjIgMTU6MDE6MzEgRVNUIDE5OTQgICAganJpY2hhcmRAY3MudW1sLmVkdSAoSm9obiBSaWNoYXJkc29uKQoKICAgICAgICAqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgQWRkZWQgRmxvb2RGaWxsIGFuZCBGbG9vZEZpbGxfcmVjLiAgRmxvb2RGaWxsX3JlYyBpcyBwcmV0dHkKICAgICAgICBpbmVmZmljZW50LCBidXQgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KCiAgICAgICAgKiBbaW5jbHVkZS93aW5kb3dzLmhdCiAgICAgICAgQ2hhbmdlZCB0aGUgeCx5IHBhcmFtYXRlcnMgZm9yIHRoZSBGbG9vZEZpbGwgcHJvdG90eXBlIAogICAgICAgIGZyb20gaW50cyB0byBzaG9ydHMKClR1ZSBGZWIgMjIgMDA6NTg6MjggTUVUIDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL3dpZGdldHMuY10KCUFkZGVkIGRlc2t0b3Agd2luZG93IGNsYXNzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gUmVkcmF3V2luZG93KCkuCglJbXBsZW1lbnRlZCBFeGNsdWRlVXBkYXRlUmduKCkuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBkZXNrdG9wIHdpbmRvdy4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglQcmVsaW1pbmFyeSBkZXNrdG9wIHdpbmRvdyBwcm9jZWR1cmUuCgpGZWIgMjAsIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgZnVuY3Rpb24gTG9hZE1lbnVJbmRpcmVjdCgpLgoJTmV3IGZ1bmN0aW9uIEdldE1lbnVDaGVja01hcmtEaW1lbnNpb25zKCkuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUVudHJ5IGZvciBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJRml4IGJ1ZyBpbiBSZWdpc3RlckNsYXNzKCkgOiAKCQlXTkRDTEFTUy0+bHBzek1lbnVOYW1lIHdhcyByZXNldCB0byBOVUxMLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbiBDcmVhdGVXaW5kb3dFeCgpLCBpZiBoTWVudSA9PSAwIHRoZW4gdXNlIAoJCXduZGNsYXNzLT5scHN6TWVudU5hbWUgdG8gbG9hZCBNZW51IGZyb20gcmVzb3VyY2U7CgpNb24gRmViIDIxIDIyOjM4OjI4IDE5OTQgRXJpayBCb3MgKGVyaWtAdHJhc2hjYW4uaGFja3RpYy5ubCkKCgkqIFtsb2FkZXIvbGlicmFyeS5jXSBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIHJ1bmluZyBETEwncyBhcyBtYWluIGV4ZWN1dGFibGUgcHJvYmxlbS4KCgkqIFttaXNjL2Rvc19mcy5jXQoJQWRkZWQgd2lsZGNhcmQgc3VwcG9ydCBpbiBET1NfcmVhZGRpcigpLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgb2YgQlNEIHdpbnNvY2tldCBmdW5jdGlvbnMuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJS0VSTkVMX0RPUzNDYWxsIHJlbmFtZWQgdG8gRE9TM0NhbGwgYW5kIG1vZGlmaWVkIHRvIHVzZSBkb19pbnQyMSgpLgoKCSogW21haW4vbWFpbi5jXQoJQWRkZWQgZnVuY3Rpb25zIGZvciBHZXRWZXJzaW9uLCBHZXRXaW5GbGFncyBhbmQgR2V0VGltZXJSZXNvbHV0aW9uCglmb3IgbGlid2luZS5hLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpIHBhcnRseSBpbXBsZW1lbnRlZC4KClR1ZSBGZWIgMjIgMTk6MDA6MDIgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHhvY2hpdGwubnVjbGVjdS51bmFtLm14KQoKCSogW3Rvb2xraXQvd2lubWFpbi5jXQoJQWRkZWQgX1dpbk1haW4gZnVuY3Rpb24uIFNldHVwcyB0aGUgbGlicmFyeSAoY2FsbHMgVVNFUl9Jbml0QXBwKS4KCgkqIFt0b29sa2l0L3N1cC5jXQoJQWRkZWQgbG9hZF9tel9oZWFkZXIsIGxvYWRfbmVfaGVhZGVyLCBsb2FkX3R5cGVfaW5mbyBhbmQKCWxvYWRfbmFtZV9pbmZvIGZ1bmN0aW9ucy4KCgkqIFt0b29sa2l0L2hlYXAuY10gCglDb2RlIGNsZWFudXAuIAoKCSogW21pc2MvdXNlci5jXQoJTW92ZWQgZnJvbSBsb2FkZXIvbWlzYy5jLiBJIGhvcGUgdG8gcHV0IGJhY2sgYWxsIHRoZSBsb2FkZXIKCWZ1bmN0aW9ucyBpbiB0aGUgfmxvYWRlciBzdWJkaXJlY3RvcnkgaW4gdGhlIGZ1dHVyZS4gQ1VycmVudGx5IGlzCgluZWVkZWQgc2luY2UgaXQgaGFzIFVTRVJfSW5pdEFwcC4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglTaW5jZSBXaW5lTGliIHdpbGwgcHJvYmFibHkgbmVlZCBETExzIChjdXJyZW50bHkgaXQgbmVlZHMKCVN5c3Jlcy5kbGwpLiBXaW5lTGliIHdpbGwgYmUgdXNpbmcgbXVjaCBjb2RlIG9mIHRoZSBsb2FkZXIgYWdhaW4uCglTbyBJIHJlbW92ZWQgc29tZSBpZmRlZnMgdGhhdCB3ZXJlIHVzZWQgYnkgV2luZUxpYi4KCglBZGRlZCBsb2FkX3R5cGVpbmZvIGFuZCBsb2FkX25hbWVpbmZvIChhbmQgdGhlIGNvcnJlc3BvbmRpbmcKCWZ1bmN0aW9ucyBpbiBbdG9vbGtpdC9zdXAuY10KCglBZGRlZCBpbnRlZ2VyIGNvbnZlcnRpb24gZnVuY3Rpb25zIGluIHRoZSBuZWVkZWQgcGxhY2VzLgoKCUFkZGVkIHZlcnkgdWdseSBwYXRjaCAoaW5jbHVkZXMgd2luZS5jKS4gSW4gdGhlIG5leHQgcmVsZWFzZSBJCglwbGFuIHRvIG1vdmUgYmFjayBhbGwgdGhlIGxvYWRlciByb3V0aW5lcyB0byB+L2xvYWRlci4gSW4gdGhlCgltZWFudGltZSBJIG5lZWRlZCB0aGlzIHBhdGNoLiBJdCBkb2Vzbid0IGFmZmVjdCBhbnkgb2YgdGhlCgllbXVsYXRvciBjb2RlIChpdHMgaWZkZWZlZCBmb3IgV2luZUxpYikuCgoJKiBbbWlzYy9tYWluLmNdCglDbGVhbmVkIHVwIGNhbGwgdG8gV2luTWFpbiAobm93IHVzZXMgW3Rvb2xraXQvd2lubWFpbi5jXQoJSWZkZWZlZCBhcmd1bWVudCBudW1iZXIgY2hlY2tpbmcgd2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCU1vZGlmaWVkIHRvIHVzZSBsb2FkXyhtenxuZSlfaGVhZGVyIGluc3RlYWQgb2YgZG9pbmcgYSBkaXJlY3QKCXJlYWQuICBXaGVuIGNvbXBpbGluZyB0aGUgZW11bGF0b3IgaXQgc3RpbGwgdXNlcyB0aGUgZGlyZWN0IHJlYWQKCWZvciBwZXJmb3JtYW5jZS4gCgoJKiBbaW5jbHVkZS93aW5lLmhdCglQcm90b3R5cGVzIGZvciBsb2FkaW5nIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvY2xhc3MuaF0KCUFkZGVkIFdJTkVfUEFDS0VEIG1hY3JvIGluc3RlYWQgb2YgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCgoJKiBbaW5jbHVkZS9hcmNoLmhdCglNYWNyb3MgZm9yIGNvbnZlcnRpbmcgaW50ZWdlcnMgKExpdHRsZSBlbmRpYW4gdG8gYmlnLWVuZGlhbikuCglOZWVkZWQgaW4gdGhlIFN1biB0byBhbGxvdyBsb2FkaW5nIG9mIERMTCBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KTW9uIEZlYiAxNCAyMzo0ODowOSBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW3dpbmRvd3MvY2xpcHBpbmcuY10KCU1vdmVkIGV2ZXJ5dGhpbmcgaW50byB3aW5kb3dzL3BhaW50aW5nLmMgYW5kIHJlbW92ZWQgdGhpcyBmaWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUmVtb3ZlZCBjYWxscyB0byBtZW1tb3ZlKCkgaW4gTVNHX1JlbW92ZU1zZygpLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBXTV9HRVRNSU5NQVhJTkZPIHN1cHBvcnQgZm9yIHdpbmRvdyByZXNpemluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJbXBsZW1lbnRlZCBSZWRyYXdXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJQnVnIGZpeCBpbiBTY3JvbGxXaW5kb3dFeCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBVcGRhdGVXaW5kb3coKSB0byB3aW5kb3dzL3BhaW50aW5nLmMuCgpGcmkgRmViIDExIDEyOjQxOjI4IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgkKCSogW2xvYWRlci93aW5lLmNdIFttaXNjL2Rvc19mcy5jXQoJZ2V0ZW52KCkgZXEgTlVMTCBidWdmaXhlcy4KCgkqIFttaXNjL2NvbW0uY10KCWNmbWFrZXJhdyBjaGFuZ2VkIGZvciBTdW5PUy4KCkZlYiAxMywgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW21lbS9hdG9tLmNdCglCdWcgZml4IGluIEFUT01fRGVsZXRlQXRvbSgpIDogCgkJY2hhbmdlIExvY2FsRnJlZSgpIGJ5IFVTRVJfSEVBUF9GUkVFKCkuCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gRmF0YWxBcHBFeGl0KCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglOZXcgZW1wdHkgc3R1YiBTZXRNYXBwZXJGbGFncygpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUJldHRlciBDaGVja01hcmsgJiBvdGhlciBiaXRtYXBzIHBsYWNlbWVudC4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglOZXcgZnVuY3Rpb24gUm91bmRSZWN0KCkgOiBjYWxjLmV4ZSBub3cgd29ya2luZy4uLgoKVHVlIEZlYiAxNSAxNDoyOTozNyAxOTk0ICBKb2huIFJpY2hhcmRzb24KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRibHQuY10KICAgICAgICBGaXhlZCBTdHJldGNoQmx0IHNvIGl0IHdvcmtzIHF1aWNrZXIgYW5kIGZhc3Rlci4gIEl0IHN0aWxsIGRvZXNuJ3QKICAgICAgICB1c2UgdGhlIFN0cmV0Y2hNb2RlIGJpdHMgZm9yIGJpdG1hcCBjb21wcmVzc2lvbiwgYnV0IHRoYXQgd2lsbAogICAgICAgIGNvbWUgc29vbi4KCk1vbiBGZWIgMTQgMTM6MjE6MDQgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14KQoKCSogW2luY2x1ZGUvd2luZG93cy5oLGRpYWxvZy5oLGdkaS5oXQoJQ2hhbmdlZCBfX2F0cmlidXRlX18gKChwYWNrZWQpKSBmb3IgV0lORV9QQUNLRUQuIAoJV2hlbiBjb21waWxpbmcgdGhlIGxpYnJhcnkgdGhpcyBpcyBkZWZpbmVkIGFzIG5vdGhpbmcuIFRoaXMgZ2V0cwoJcmlkIHdpdGggYWxsIHRoZSBwcm9ibGVtcyBjb21waWxpbmcgdW5kZXIgU3VuT1MuIEFsc28gCgoJKiBbd2luZG93cy91dGlsaXR5LmNdCglBZGRlZCBEZWJ1Z1ByaW50U3RyaW5nLgoKCSogW3Rvb2xraXQvc3VwLmNdCglBZGRlZCBoU3lzUmVzID0gMSBkZWZpbml0aW9uIHRvIHJlc29sdmUgZXh0ZXJuYWxzLgoJQWRkZWQgQ2FsbExpbmVEREFQcm9jIGZ1bmN0aW9uICh0b29sa2l0IHZlcnNpb24pLgoJQWRkZWQgdG95LCBhbmQgaGkgaW5lZmljaWVudCBtZW1tb3ZlIHVudGlsIGNvZGUgaW4gbWVzc2FnZS5jIGdldAoJcmV3cml0dGVuLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglJZmRlZmVkIGxpbnV4L2VtdWxhdG9yLWRlcGVuZGVudCBjb2RlIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9mCglXaW5lTGliLgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglBZGRlZCBpZmRlZiB0byBhbGxvdyBjb21waWxhdGlvbiB1bmRlciBTdW5PUy4KCgkqIFttaXNjL3Jlc291cmNlLmNdCglXaGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSwgdGhlIHJlc291cmNlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gYmUgaW4KCWEgZmlsZSBjYWxsZWQgJGFyZ3ZbMF0uUmVzLiBBbHNvIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgcmVzb3VyY2UKCWlzIGV4cGVjdGVkIHRvIGJlIGF0IG9mZnNldCAwIG9mIHRoZSAuUmVzIGZpbGUuCgoJKiBbbWlzYy9tYWluLmNdCglDYWxsIFdpbk1haW4gd2l0aCBhcmd1bWVudHMgaWYgY29tcGlsaW5nIFdpbmVMaWIuCglDYWxsIHNodXRkb3duIGZ1bmN0aW9ucyAoQ29tbV9EZUluaXQsIERPU19EZUluaXRGUykuCglDYWxsIHN5bmNfcHJvZmlsZXMgdG8gcHJlc2VydmUgY2hhbmdlcyB0byAuSU5JIGZpbGVzLgoKCSogW21pc2MvY29tbS5jLGRvc19mcy5jXQoJcmVtb3ZlZCBjYWxsIHRvIGF0ZXhpdChDb21tX0RlSW5pdCkKCXJlbW92ZWQgY2FsbCB0byBhdGV4aXQoRE9TX0RlSW5pdEZTKQoJU2h1dGRvd24gZnVuY3Rpb25zIGFyZSBub3cgY2FsbGVkIGZyb20gdGhlIHJldHVybiBvZiBXaW5NYWluCgoJKiByZW1vdmVkIG1lbW9yeWxpYiBzdWJkaXJlY3RvcnkKCgkqIG1vdmVkIG1lbW9yeS9hdG9tLmMgICAgdG8gbWlzYy9hdG9tLmMKCSAgbW92ZWQgbWVtb3J5bGliL2hlYXAuYyB0byB0b29sa2l0L2hlYXAuYwoKCSogW2xvYWRlci93aW5lLmNdCglNb3ZlZCBEZWJ1Z1ByaW50U3RyaW5nIHRvIHdpbmRvd3MvdXRpbGl0eS5jCgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdCglEZWZpbmUgU09fRE9OVExJTkdFUiBvbmx5IGlmIGl0IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGRlZmluZWQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglhZGRlZCBkZWZpbml0aW9uIGZvciBETEdQUk9DLgoJYWRkZWQgZGVmaW5pdGlvbiBmb3IgTE1FTV9XSU5FX0FMSUdOIGFuZCBvdGhlciBMTUVNXyogY29uc3RhbnRzLgoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBXTkRQUk9DIGlzIGRlZmluZWQgd2l0aCBhbGwgdGhlIHBhcmFtZXRlcnMKCXRvIGF2b2lkIGNvbXBpbGF0aW9uIHByb2JsZW1zLgoKCSogW2luY2x1ZGUvdXNlci5oXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiBVU0VSX0hFQVBfKEFMTE9DfFJFQUxMT0N8QUREUnxGUkVFKSB0aGUKCWNhbGxzIGFyZSB0cmFuc2xhdGVkIHRvIHRoZSBsaWJyYXJ5IGFsbG9jYXRpb24gcm91dGluZXMuCgoJKiBbaW5jbHVkZS9nZGkuaCx1c2VyLmhdCglXaGVuIGNvbXBpbGluZyBXaW5lTGliIEdESV9IRUFQXyhBTExPQ3xBRERSfEZSRUUpIHRoZSBjYWxscyBhcmUKCXRyYW5zbGF0ZWQgdG8gdGhlIGxpYnJhcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KCgkqIFtpbmNsdWRlL2F0b20uaF0KCURlZmluZWQgTG9jYWxBbGlnbi4gV2hlbiBjb21waWxpbmcgdGhlIGVtdWxhdG9yIGl0J3MgdHJhbnNsYXRlZCBhcwoJYSBjYWxsIHRvIExvY2FsQWxsb2MgKHRoZSBvcmlnaW5hbCBjb2RlKSwgd2hlbiBjb21waWxpbmcgV2luZUxpYgoJYXMgYSBjYWxsIHRvIExvY2FsQWxsb2Mgd2l0aCBhIFdJTkUtZmxhZyBjYWxsZWQgTE1FTV9XSU5FX0FMSUdOCgkoYXRvbS5jIG5lZWRzIGFsaWduZWQgZGF0YSBvbiBhIDQgYnl0ZSBib3VuZGFyeSkuCgoJKiBbbWlzYy9maWxlLmNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBhbmQgZml4ZWQgcHJvdG90eXBlcy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglSZW5hbWVkIEtFUk5FTF8qIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucwoJdXNpbmcgV2luZSBhcyBhIGxpYnJhcnkgKE9wZUZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xjcmVhdGUsCglfbGxzZWVrLCBfbG9wZW4sIF9sd3JpdGUpLgoKCSogW01ha2VmaWxlXQoJQ3JlYXRlIGxpYnJhcnkgaW5zdGVhZCBvZiBleGVjdXRhYmxlIHdoZW4gYnVpbGRpbmcgdGFyZ2V0CglsaWJ3aW5lLmEgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDggMTM6NTI6MTEgMTk5NCAgTWlndWVsIGRlIEljYXphICAobWlndWVsQHJveGFubmUpCgoJKiBbTWFrZWZpbGVzXQoJVXNlICQoQ0MpIGluc3RlYWQgb2YgY2MuCglBZGRlZCBsaWJ3aW5lIHRhcmdldC4KCgkqIFtpbmNsdWRlL3Byb3RvdHlwZXNdCgkjaWZkZWZlZCBzZWN0aW9uIGZvciBXaW5lTGliCgoJKiBtb3ZlZCBsb2FkZXIvY3Vyc29yLmMgICB0byBtaXNjL2N1cnNvci5jCgkgIG1vdmVkIGxvYWRlci9yZXNvdXJjZS5jIHRvIG1pc2MvcmVzb3VyY2UuYwoJICBtb3ZlZCBtaXNjL2VtdWxhdGUuYyAgICB0byBtaXNjZW11L2VtdWxhdGUuYwoJICBtb3ZlZCBtaXNjL2ludDFhLmMgICAgICB0byBtaXNjZW11L2ludDFhLmMKCSAgbW92ZWQgbWlzYy9pbnQyMS5jCSAgdG8gbWlzY2VtdS9pbnQyMS5jCgkgIG1vdmVkCW1pc2Mva2VybmVsLmMJICB0byBtaXNjZW11L2tlcm5lbC5jCgkgIG1vdmVkIG1pc2MvdXNlci5jICAgICAgIHRvIG1pc2NlbXUvdXNlci5jCgoJKiBbbWVtb3J5bGliL2hlYXAuY10KCUhlYXAgbWFuYWdlbWVudCBmb3IgV2luZUxpYgoKCSogW21pc2MvY29tbS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGVycm5vLCBTdW5PUwoJZG9lc24ndCBoYXZlIGF0ZXhpdCAoKSkuCgoJKiBbbWlzYy9kb3NfZnMuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TICgjaW5jbHVkZSB2ZnMuaCkKCgkqIFttaXNjL2ZpbGUuY10KCU1vZGlmaWVkIHRvIGFsbG93IGNvbXBpbGF0aW9uIHVuZGVyIFN1bk9TIChPUEVOX01BWCBjb25zdGFudCwKCSNpbmNsdWRlIHVuaXN0ZC5oKQoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJTW9kaWZpZWQgdG8gYWxsb3cgY29tcGlsYXRpb24gdW5kZXIgU3VuT1MgKCNpbmNsdWRlIGxpbWl0cykKCgkqIFt0b29sa2l0L3N1cC5jXQoJV2luZUxpYiB2ZXJzaW9uIG9mIENhbGxXaW5kb3dQcm9jLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVR5cGVkZWYgWFBvaW50ZXIgdW5kZXIgWDExUjQgKE9wZW5XaW5kb3dzKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2hlbiBjb21waWxpbmcgV2luZUxpYiwgdXNlIGRpcmVjdCBjYWxsYmFja3MgaW5zdGVhZCBvZiB0aGUKCXdpbmRvd3Mgc3VwcGxpZWQgY2FsbGJhY2tzLgoKTW9uIEZlYiAgNyAyMjozNzozNCBNRVQgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCU5ldyBmdW5jdGlvbiBDVVJTT1JfU2V0V2luQ3Vyc29yKCksIGZvciBpbnRlcm5hbCB1c2UsIHRvIHNldAoJdGhlIGN1cnNvciBvZiBhIHNwZWNpZmljIHdpbmRvdyBtb3JlIHJlbGlhYmx5IHRoYW4gd2l0aCBTZXRDdXJzb3IoKS4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQmV0dGVyIHdpbmRvdyBtYW5hZ2VtZW50LiBNb3ZpbmcgYW5kIHJlc2l6aW5nIGZyb20gdGhlIHN5c3RlbQoJbWVudSBzaG91bGQgd29yayBub3cuCglBZGRlZCBzY3JvbGwtYmFyIG1vdXNlIHRyYWNraW5nLgoKCSogW3dpbmRvd3Mvd2luLmNdCglNb3ZlZCBzY3JvbGwtYmFyIGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiB0byBkZWZ3bmQuYy4KCkZlYiA1LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUNhbGwgdG8gU3RkRHJhd01lbnVCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJTmV3IE5DX1RyYWNrTW91c2VNZW51QmFyKCkgZnVuY3Rpb24gd2hpY2ggY2FsbCAKCQlNZW51QnV0dG9uRG93bigpLCBNZW51QnV0dG9uVXAoKSAmIE1lbnVNb3VzZU1vdmUoKS4KCgkqIFtjb250cm9scy9tZW51LmNdCglOZXcgQ2hhbmdlTWVudSgpIGZ1bmN0aW9uLgoJUmVtb3ZlIHBlcm1hbmVudGx5IG9sZCBYdCBtZW51IGNvZGUuCglNYWtlIGNvbW1vbiBmdW5jdGlvbnMgTWVudUJ1dHRvbkRvd24oKSwgTWVudUJ1dHRvblVwKCkKCQkmIE1lbnVNb3VzZU1vdmUoKSBmb3IgYm90aCBwb3B1cHMgJiBtZW51YmFyLgoJCgkqIFtjb250cm9scy9jb21iby5jXQoJUGFpbnQgT0JNX0NPTUJPIGRpcmVjdGx5IGluIGNvbWJvIGNsaWVudC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglGaXggYnVnIGluIG11bHRpY29sdW1ucyBjYWxjdWxhdGlvbnMuCgoJKiBbY29udHJvbHMvTWFrZWZpbGVdCglSZW1vdmUgcnVsZXMgZm9yIG9sZCBmaWxlICdjYXB0aW9uLmMnLgoKCSogW21pc2Mva2VybmVsLmNdCglSZW1vdmUgZW1wdHkgc3R1YiBHZXRNb2R1bGVGaWxlTmFtZSgpLgoKCSogW2xvYWRlci9saWJyYXJ5LmNdCglOZXcgR2V0TW9kdWxlSGFuZGxlKCkgZnVuY3Rpb24uCglOZXcgR2V0TW9kdWxlVXNhZ2UoKSBmdW5jdGlvbi4KCU5ldyBHZXRNb2R1bGVGaWxlTmFtZSgpIGZ1bmN0aW9uLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJVHJ5IHRvIGZpbmQgdGhlIGJ1ZyBhIG1pc3NpbmcgbWVudSBsb2FkaW5nIC4uLiBOb3QgZm91bmQgeWV0ICEKCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVtb3ZlIG9sZCBtZW51YmFyIGNyZWF0aW9uLgoKVGh1IEZlYiAgMyAyMjozMDoxMSAxOTk0ICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW21pc2Mvd2luc29ja2V0LmNdCglNb3JlIGZ1bmN0aW9ucyBhZGRlZC4KCgkqIFtpZjE2MzIvd2luc29jay5zcGVjXSBbbWlzYy93aW5zb2NrZXQuY10KCUFkZGVkIEpvaG4gQnJlemFrJ3Mgd2luc29jay5kbGwgc3R1ZmYuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBGZWIgIDEgMjE6MTQ6NDcgMTk5NCAgQm9iIEFtc3RhZHQgIChib2JAcG9vaCkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGZ1bmN0aW9uIENyZWF0ZU5ld1NlZ21lbnRzKCkuICBNb2RpZmllZCBJUENDb3B5U2VsZWN0b3IKCXRvIGFsbG93IGFsaWFzaW5nIHRvIGFueSBhcmJpdHJhcnkgbWVtb3J5IHNwYWNlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUZpeGVkIHBvdGVudGlhbCBidWcgaW4gR2xvYmFsR2V0RnJlZVNlZ21lbnRzKCkuCgoJKiBbbWVtb3J5L2xpbmVhci5jXQoJQ3JlYXRlZCBmdW5jdGlvbnMgR2xvYmFsTGluZWFyTG9jaygpIGFuZCBHbG9iYWxMaW5lYXJVbmxvY2soKS4KClR1ZSBGZWIgIDEgMDU6NTE6NDMgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVJlbW92ZWQgQ0FQVElPTiB3aW5kb3cgY2xhc3MuCgoJKiBbbG9hZGVyL2N1cnNvci5jXQoJQnVnIGZpeCBpbiBMb2FkQ3Vyc29yKCk6IGRvbid0IGFsbG9jYXRlIG1lbW9yeSBldmVyeSB0aW1lIGZvcgoJYnVpbHQtaW4gY3Vyc29ycy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbnZhbGlkYXRlIGNoaWxkIHdpbmRvd3MgaW4gSW52YWxpZGF0ZVJnbigpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCByZXBhaW50IG9mIHRoZSBjYXB0aW9uIHdoZW4gY2hhbmdpbmcgd2luZG93IHRleHQuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgU2V0Q2FwdHVyZSgpIHRvIGFsbG93IGtleWJvYXJkIGV2ZW50cyB3aGlsZSBjYXB0dXJpbmcuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglOZXcgZnVuY3Rpb24gTVNHX0dldEhhcmR3YXJlTWVzc2FnZSgpLCB0byBkbyBtb3VzZSB0cmFja2luZwoJd2l0aG91dCByZXR1cm5pbmcgY29udHJvbCB0byB0aGUgV2luZG93cyBwcm9ncmFtLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBIGNvdXBsZSBvZiBjaGFuZ2VzIGluIGZyYW1lIGRyYXdpbmcgZm9yIERMR01PREFMRlJBTUUgd2luZG93cy4KCVJld3JpdHRlbiB3aW5kb3cgbW92aW5nIGNvZGUsIHRvIHVzZSBNU0dfR2V0SGFyZHdhcmVNZXNzYWdlKCkKCWluc3RlYWQgb2Ygbm9uLWNsaWVudCBtb3VzZSBldmVudHMgKHRoaXMgaXMgdGhlIHdheSBXaW5kb3dzCglkb2VzIGl0KSwgYW5kIHRvIHNlbmQgV01fRU5URVJTSVpFTU9WRSBtZXNzYWdlcy4KCVJlbW92ZWQgV01fTkNCVVRUT05VUCBhbmQgV01fTkNNT1VTRU1PVkUgaGFuZGxlcnMuCgoJKiBbd2luZG93cy93aW4uY10KCUFsbG9jYXRlIHRlbXBvcmFyeSBzdHJ1Y3R1cmVzIG9uIHRoZSBVU0VSIGhlYXAgaW5zdGVhZCBvZgoJdXNpbmcgR2xvYmFsQWxsb2MoKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgZnVuY3Rpb24gV0lOUE9TX0dldE1pbk1heEluZm8oKSB0byBnZXQgc2l6aW5nIGluZm9ybWF0aW9ucy4KCkphbiAzMSwgOTQgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglDYWxsIHRvIFN0ZERyYXdTY3JvbGxCYXIoKSBkdXJpbmcgTkMncyBkcmF3aW5nLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25Eb3duKCkgb24gTkMgbW91c2UgZXZlbnRzIFdNX0xCVVRUT05ET1dOLgoJQ2FsbCB0byBOQ19TY3JvbGxCYXJCdXR0b25VcCgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9MQlVUVE9OVVAuCglDYWxsIHRvIE5DX1Njcm9sbEJhck1vdXNlTW92ZSgpIG9uIE5DIG1vdXNlIGV2ZW50cyBXTV9NT1VTRU1PVkUuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IEdldFN1Yk1lbnUoKSBmdW5jdGlvbi4KCU1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucyBmcm9tICd3aW5kb3dzL3dpbi5jJy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglTdGFydCBjaGFuZ2VzIHRvIHNhdGlzZnkgcmVjZW50IGNoYW5nZXMgaW4gc2Nyb2xsYmFycy93aW5kb3dzLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJUHV0IHNvbWUgY29kZSBpbiBMb2FkQWNjZWxlcmF0b3JzKCkgc3R1Yi4KCU5ldyBUcmFuc2xhdGVBY2NlbGVyYXRvcigpIGZ1bmN0aW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdCglSZW1vdmUgR2V0TWVudSgpICYgU2V0TWVudSgpIGZ1bmN0aW9ucy4KCUNhbGwgdG8gTkNfQ3JlYXRlU2Nyb2xsQmFycygpIGlmIHJlcXVpcmVkIGJ5IENyZWF0ZVdpbmRvdygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gSmFuIDI0IDEwOjQwOjEwIEVTVCAxOTk0IEpvaG4gUmljaGFyZHNvbiAoanJpY2hhcmRAY3MudW1sLmVkdSkKCiAgICAgICAgKiBbd2luZG93L3dpbi5jXQogICAgICAgIEFkZGVkIGZ1bmN0aW9ucyBFbnVtV2luZG93cywgRW51bUNoaWxkV2luZG93cywgYW5kIGhlbHBlcgogICAgICAgIFdJTl9FbnVtQ2hpbGRXaW4uICBFbnVtV2luZG93cyB3b24ndCBsaXN0IGFsbCB3aW5lIHdpbmRvd3MKICAgICAgICBiZWNhdXNlIEdldERlc2t0b3BXaW5kb3cgaXNuJ3QgY29tcGxldGUuICBIb3dldmVyLCB0aGUgY29kZQogICAgICAgIGlzIGluIHBsYWNlIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseSBhbmQgb25seSBuZWVkcyAKICAgICAgICBHZXREZXNrdG9wV2luZG93IHRvIGRvIHNvLiAgCgpUdWUgSmFuIDI1IDA1OjUxOjQ3IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZCkKCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgYWN0aXZhdGlvbiBtZXNzYWdlcyAoV01fQUNUSVZBVEUsCglXTV9OQ0FDVElWQVRFLCBXTV9NT1VTRUFDVElWQVRFKQoKCSogW3dpbmRvd3MvZXZlbnQuY10KCURlLWFjdGl2YXRlIHRoZSB3aW5kb3cgd2hlbiBsb3NpbmcgaW5wdXQgZm9jdXMuCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeCBpbiBTZXRGb2N1cygpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgYWN0aXZhdGlvbiBvZiB0aGUgd2luZG93IG9uIG1vdXNlLWNsaWNrcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBub24tY2xpZW50IGFyZWEgcGFpbnRpbmcgdG8gdXNlIHRoZSBjb3JyZWN0IGNvbG9ycwoJZGVwZW5kaW5nIHVwb24gdGhlIGFjdGl2YXRpb24gc3RhdGUuCglBZGRlZCBXTV9OQ0FDVElWQVRFIG1lc3NhZ2UgaGFuZGxpbmcuCglGaXhlZCBhIGNvdXBsZSBvZiBidWdzIGluIHdpbmRvdyBtb3ZpbmcgYW5kIHJlc2l6aW5nLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBHZXQvU2V0QWN0aXZlV2luZG93KCkuCglJbXBsZW1lbnRlZCBTV1BfTk9BQ1RJVkFURSBmbGFnIGluIFNldFdpbmRvd1BvcygpLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglNZXNzYWdlQm94IGhhcyBhIENhcHRpb25CYXIgZm9yIGhpcyB0aXRsZSBleGNlcHQgZm9yCgkJTUJfU1lTVEVNTU9EQUwgd2l0aCBNQl9JQ09OSEFORC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2FsbCB0byBOQ19UcmFja1N5c01lbnUgb24gU3lzTWVudSBidXR0b24gbW91c2UgY2xpY2suCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUNhbGwgdG8gTkNfVHJhY2tTeXNNZW51IG9uIEFsdCBrZXkgKFZLX01FTlUpLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBHZXRTeXN0ZW1NZW51KCkgZnVuY3Rpb24uCglOZXcgQ29weVN5c3RlbU1lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCU5ldyBOQ19UcmFja1N5c01lbnUoKSBpbnRlcm5hbCBmdW5jdGlvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU5ldyBXTV9JTklUTUVOVSwgV01fSU5JVE1FTlVQT1BVUCwgV01fTUVOVVNFTEVDVCAmIFdNX01FTlVDSEFSIGRlZmluZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBKYW4gMTMgMTE6NDU6MTMgMTk5NCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW3dpbmRvdy93aW4uY10KCUFkZGVkIGZ1bmN0aW9ucyBFbmFibGVXaW5kb3csIElzV2luZG93RW5hYmxlZCwgYW5kIGhlbHBlciAKCVdJTl9TZXRTZW5zaXRpdmUuCgkKCSogW3dpbmRvdy9ldmVudC5jXQoJQWRkZWQgY2hlY2tzIGZvciBXU19ESVNBQkxFRCB3aW5kb3dzIGluIEVWRU5UX2tleSwgRVZFTlRfTW90aW9uTm90aWZ5LAoJRVZFTlRfQnV0dG9uUHJlc3MsIEVWRU5UX0J1dHRvblJlbGVhc2UsIEVWRU5UX0NvbmZpZ3VyZU5vdGlmeSwKCUVWRU5UX0ZvY3VzSW4sIEVWRU5UX0ZvY3VzT3V0LCBhbmQgRVZFTlRfRW50ZXJOb3RpZnkuICBLZXkgYW5kIAoJYnV0dG9uIHByZXNzZXMgYmVlcCBmb3IgYSBkaXNhYmxlZCB3aW5kb3cuICAKCUlmIGFueW9uZSBmaW5kcyBiZXR0ZXIgcGxhY2VzIGZvciB0aGVzZSBjaGVja3MsIHBsZWFzZSB0ZWxsIG1lLgoKSmFuIDE3LCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbbWlzYy9tZXNzYWdlLmNdCglDbGVhbnVwIG9uIGJ1dHRvbnMgYW5zd2VyIHZhbHVlIHJldHVybmVkLgoKCSogW2NvbnRyb2wvY29tYm8uY10KCU5vdyB1c2UgT0JNX0NPTUJPIGJpdG1hcCBkcm9wZG93biBidXR0b24uCgpNb24gSmFuIDE3IDIxOjU2OjQ1IDE5OTQgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tL2NdCglBIGZldyBidWdmaXhlcy4KClR1ZSBKYW4gMTggMDY6MzY6NDggMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci9jdXJzb3IuY10KCUFkZGVkIFggY3Vyc29yIGZvciBJRENfU0laRU5TIGFuZCBJRENfU0laRVdFLgoKCSogW2luY2x1ZGUvb3B0aW9ucy5oXSBbbWlzYy9tYWluLmNdICAoTmV3IGZpbGVzKQoJUmV3cm90ZSBtYWluKCkgZnVuY3Rpb24gdG8gZ2V0IHJpZCBvZiBYdCBhcHBsaWNhdGlvbiBjb250ZXh0LAoJYW5kIGFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZy4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglVc2Ugb2YgYSBwcml2YXRlIG1hcCBub3cgY29uZmlndXJhYmxlIHdpdGggY29tbWFuZC1saW5lIG9wdGlvbi4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgV01fU1lTQ09NTUFORCBoYW5kbGluZywgYW5kIGJldHRlciBXTV9TRVRDVVJTT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJUmVtb3ZlZCBDb25maWd1cmVOb3RpZnkgZXZlbnQgaGFuZGxlciAobm8gbG9uZ2VyIG5lZWRlZCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglTZW5kIFdNX1NFVENVUlNPUiBtZXNzYWdlIG9uIG1vdXNlIGV2ZW50cy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJVXNlIE9FTSBiaXRtYXBzIGZvciB0aGUgZHJhd2luZyBvZiB0aGUgbm9uLWNsaWVudCBhcmVhLgoJQWRkZWQgY2FwdGlvbiBiYXIgYnV0dG9ucyBoYW5kbGluZywgYW5kIG1vdmluZyBhbmQgcmVzaXppbmcgb2YKCXRoZSB3aW5kb3cgdmlhIHRoZSB3aW5kb3cgZnJhbWUgKGJ5cGFzc2luZyB0aGUgd2luZG93IG1hbmFnZXIpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUJ1ZyBmaXggaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXQgdGhlIG92ZXJyaWRlX3JlZGlyZWN0IGZsYWcgZm9yIHdpbmRvd3MgKHRvIGJ5cGFzcyB3aW5kb3cKCW1hbmFnZXIpLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXBsZW1lbnRlZCBXaW5kb3dGcm9tUG9pbnQoKSwgQ2hpbGRXaW5kb3dGcm9tUG9pbnQoKSwKCUJyaW5nV2luZG93VG9Ub3AoKSwgR2V0L1NldEludGVybmFsV2luZG93UG9zKCksCglHZXQvU2V0V2luZG93UGxhY2VtZW50KCkuCgpNb24gSmFuIDE3IDIwOjQ4OjI0IDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBbbWVtb3J5L2hlYXAuY10KCUFkZGVkIHN1cHBvcnQgZm9yIG11bHRpcGxlIGxvY2FsIGhlYXBzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgSmFuICA0IDEzOjAxOjMzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCiAgICAgICAgKiBbd2luZG93L2NhcmV0LmNdCiAgICAgICAgTW9kaWZpZWQgY29kZSB0byB1c2Ugc3lzdGVtIHRpbWVyLgoKSmFuIDksIDk0IG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFt3aW5kb3dzL3dpbi5jXQoJV2luZG93cyBjcmVhdGUgaWYgcmVxdWlyZWQgbmV3IFhMSUIgTWVudUJhciAmIENhcHRpb25CYXIuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCVdNX0NBTENTSVpFIE1vdmUgJiBSZXNpemUgY2FwdGlvbiwgbWVudWJhciAmIHNjcm9sbGJhcnMuCgkoSSdtIG5vdCBzdXJlIGl0J3MgdGhlIGdvb2QgcGxhY2UgZm9yIGl0LCBidXQgaXQgd29yay4uLikKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCW9wdGltaXplIGluIEZpbmRSZXNvdXJjZUJ5TnVtYmVyLCBtYWtlIGxzZWVrKCkgaWYgbmV4dCB0eXBlIC4uLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJc2Nyb2xsYmFyIGJ1dHRvbnMgYXJlIG5vdyB1c2luZyBzeXN0ZW0gcmVzb3VyY2VzIGJpdG1hcHMuCgoJKiBbY29udHJvbHMvY2FwdGlvbi5jXSAtIG5ldyBmaWxlIC4uLgoJY2FwdGlvbmJhciBzaG93aW5nIHRpdGxlLCBjbG9zZSBidXR0b24gd2l0aCBTeXNNZW51LAoJYW5kIG90aGVyIGJ1dHRvbnMgdXNpbmcgc3lzdGVtIHJlc291cmNlcyBiaXRtYXBzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU5ldyBmdW5jdGlvbnM6IFNldE1lbnVJdGVtQml0bWFwcygpIHdpdGggJ2dsdWVzJywKCU1ha2UgbmV3IHZlcnNpb24gb2YgTG9hZE1lbnUoKSAmIFBhcnNlTWVudSgpLAoJKCBwdXQgI2RlZmluZSBVU0VfUE9QVVBNRU5VICkuCglJbXBsZW1lbnRhdGlvbiBvZiBNZW51QmFyIGZ1bmN0aW9ucy4KCQoJKiBbc3lzcmVzLmRsbF0KCU5ldyBiaXRtYXBzIGZvciBzeXN0ZW0gc3VjaCBPQk1fQ0xPU0UsIE9CTV9NSU5JTUlaRSwgT0JNX1VQQVJST1dJLgoJTmV3IFNZU01FTlUgbWVudSwgaXQgZG9uJ3Qgd29yayB5ZXQgISA6LSgoCgpUdWUgSmFuIDExIDA1OjI3OjQ1IDE5OTQgIGp1bGxpYXJkQGRpLmVwZmwuY2ggKEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW21lbW9yeS9hdG9tLmNdCglGaXhlZCBhIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIGF0b21zIHRvIGJlIGNhc2Utc2Vuc2l0aXZlLgoKCSogW21pc2MvcmVjdC5jXQoJQnVnIGZpeCBpbiBTdWJ0cmFjdFJlY3QoKS4KCgkqIFtvYmplY3RzL2NsaXBwaW5nLmNdCglCdWcgZml4IHdoZW4gc2V0dGluZyB0aGUgY2xpcCBtYXNrIHRvIGFuIGVtcHR5IHJlZ2lvbi4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJQnVnIGZpeCBpbiBSZWxlYXNlREMoKS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJQ2FsbCBBZGp1c3RXaW5kb3dSZWN0RXgoKSBiZWZvcmUgY3JlYXRpbmcgdGhlIGRpYWxvZyB3aW5kb3cuCglBZGRlZCBzdXBwb3J0IGZvciBEU19NT0RBTEZSQU1FIHN0eWxlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNsZWFuZWQgdXAgZXZlbnQgaGFuZGxpbmcgYW5kIHJlbW92ZWQgb2xkIFh0IHN0dWZmLgoJTW92ZWQgZG91YmxlLWNsaWNrIGhhbmRsaW5nIHRvIHdpbmRvd3MvbWVzc2FnZS5jCgoJKiBbd2luZG93cy9mb2N1cy5jXQoJQnVnIGZpeDogb25seSBzZXQgdGhlIFggZm9jdXMgd2hlbiB0aGUgd2luZG93IGlzIHZpZXdhYmxlLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVJld3JpdHRlbiBEcmF3UmVsaWVmUmVjdCgpIHRvIHVzZSBicnVzaCBpbnN0ZWFkIG9mIHBlbiwgYW5kCgl0byB1c2UgdGhlIHN5c3RlbSBjb2xvcnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXTV9OQ0hJVFRFU1QgbWVzc2FnZSBzZW5kaW5nLCBhbmQgbm9uLWNsaWVudAoJbW91c2UgbWVzc2FnZXMuCglDbGVhbmVkIHVwIGRvdWJsZS1jbGljayBoYW5kbGluZywgYW5kIHJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gIChOZXcgZmlsZSkKCUltcGxlbWVudGVkIEFkanVzdFdpbmRvd1JlY3QoKS4KCUltcGxlbWVudGVkIFdNX05DQ0FMQ1NJWkUsIFdNX05DSElUVEVTVCBhbmQgV01fTkNQQUlOVCBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdCglBZGRlZCBzZW5kaW5nIG9mIHRoZSBXTV9OQ1BBSU5UIG1lc3NhZ2UgaW4gQmVnaW5QYWludCgpLgoKCSogW3dpbmRvd3Mvc3lzbWV0cmljcy5jXSBbaW5jbHVkZS9zeXNtZXRyaWNzLmhdICAoTmV3IGZpbGVzKQoJSW1wbGVtZW50ZWQgc3lzdGVtIG1ldHJpY3MuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXggaW4gc2V0dGluZyB0aGUgcGFyZW50IGFuZCBvd25lciBpbiBDcmVhdGVXaW5kb3coKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFkZGVkIHNlbmRpbmcgb2YgdGhlIFdNX05DUEFJTlQgbWVzc2FnZSBpbiBTZXRXaW5kb3dQb3MoKS4KCVJlbW92ZWQgdGhlIFh0IGNvZGUuCgpTdW4gSmFuICAyIDEyOjM4OjUzIDE5OTQgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglJbXBsZW1lbnRlZCBHZXRDbGFzc05hbWUgYW5kIEdldENsYXNzSW5mby4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglWYXJpb3VzIGltcHJvdmVtZW50cyB0byB0ZXh0IGNhcmV0IGNvZGUuCgpGcmkgRGVjIDMxIDE1OjIyOjIyIDE5OTMgIEpvaG4gQnJlemFrIDxicmV6YWtAYXBvbGxvLmhwLmNvbT4KCgkqIFttaXNjL2NvbW0uY10KCVBhdGNoZXMgdG8gd29yayB3aXRoIE5ldEJTRC4KClRodSBEZWMgMzAgMTI6MTE6NTUgMTk5MyAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEBjcy51bWwuZWR1PgoKCSogW29iamVjdHMvYml0Ymx0LmNdIEFkZGVkIFN0cmV0Y2hCbHQoKS4KClR1ZSBKYW4gIDQgMDU6MjI6MDcgMTk5NCAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW21pc2MvdXNlci5jXQoJQWRkZWQgY3JlYXRpb24gb2Ygc3lzdGVtIG1lc3NhZ2UgcXVldWUuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10gW29iamVjdHMvZGN2YWx1ZXMuY10gW3dpbmRvd3MvZGMuY10KCUFkZGVkIERDIHNpemUgZmllbGRzIGludG8gREMgc3RydWN0dXJlLgkJCgoJKiBbb2JqZWN0cy9jbGlwcGluZy5jXQoJQnVnIGZpeCBpbiBDTElQUElOR19JbnRlcnNlY3RSZWN0KCkuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQWxsb2NhdGUgYSBEQ0UgaW5zdGVhZCBvZiBhIERDIGZvciBDU19DTEFTU0RDIGNsYXNzZXMuCgoJKiBbd2luZG93cy9jbGlwcGluZy5jXQoJRml4ZWQgR2V0VXBkYXRlUmVjdCgpIGFuZCBHZXRVcGRhdGVSZ24oKSB0byBjbGlwIHRvIHRoZSBjbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgR2V0RENFeCgpIGFuZCBHZXRXaW5kb3dEQygpLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglJbXBsZW1lbnRlZCBXTV9XSU5ET1dQT1NDSEFOR0VEIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFhsaWIgZXZlbnQgaGFuZGxpbmcgaW5zdGVhZCBvZiBYdCBjYWxsYmFja3MuCglDaGFuZ2VkIE1TR19BZGRNc2coKSBjYWxscyB0byBoYXJkd2FyZV9ldmVudCgpIG9yIFBvc3RNZXNzYWdlKCkuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBtdWx0aXBsZSBtZXNzYWdlIHF1ZXVlcy4KCUltcGxlbWVudGVkIGhhcmR3YXJlX2V2ZW50KCkgdG8gc3RvcmUgbWVzc2FnZXMgaW50byB0aGUgc3lzdGVtIHF1ZXVlLgoJSW1wbGVtZW50ZWQgR2V0L1NldFRhc2tRdWV1ZSgpLgoJQmV0dGVyIFdNX1BBSU5UIGFuZCBXTV9USU1FUiBoYW5kbGluZy4KCUNoYW5nZXMgdG8gdXNlIFhsaWIgaW5zdGVhZCBvZiBYdCBmb3IgZXZlbnRzLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCVVzZSBHZXREQ0V4KCkgdG8gcmV0cmlldmUgdGhlIERDLCB0byBnZXQgYSBjb3JyZWN0IHZpc2libGUgcmVnaW9uLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCU1vdmVkIHRoZSB0aW1lciBwcm9jZWR1cmUgY2FsbGJhY2sgaW50byBEaXNwYXRjaE1lc3NhZ2UoKS4KCUNoYW5nZWQgaW1wbGVtZW50YXRpb24gdG8gZ2V0IHJpZCBvZiBYdCB0aW1lb3V0cy4gIFRpbWVyIGNoZWNraW5nCglpcyBub3cgZG9uZSBpbnNpZGUgR2V0TWVzc2FnZSgpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBbGxvY2F0ZSBhIERDRSBpbnN0ZWFkIG9mIGEgREMgZm9yIENTX09XTkRDIHdpbmRvd3MuCglSZXBsYWNlZCBYdCBjYWxscyB3aXRoIFhsaWIgY2FsbHMuCglNb3ZlZCB3aW5kb3cgcG9zaXRpb25pbmcgZnVuY3Rpb25zIGludG8gd2luZG93cy93aW5wb3MuYwoKCSogW3dpbmRvd3Mvd2lucG9zLmNdICAoTmV3IGZpbGUpCglSZXdyaXR0ZW4gbW9zdCBvZiB0aGUgd2luZG93IHBvc2l0aW9uaW5nIGZ1bmN0aW9ucy4KCUltcGxlbWVudGVkIFNldFdpbmRvd1BvcygpIGFuZCBNYXBXaW5kb3dQb2ludHMoKS4KCkphbiAzLCA5NCBtYXJ0aW4yQHRyZ2NvcnAuc29sdWNvcnAucWMuY2EgKE1hcnRpbiBBeW90dGUpCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUJhZCBhcmd1bWVudHMgZGVzY3JpcHRpb24gZm9yIGZ1bmN0aW9uIFNldERsZ0l0ZW1UZXh0LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRnVuY3Rpb24gRHJhd1RleHQgbm93IGhhbmRsZSBEVF9DQUxDUkVDVCByZXF1ZXN0LgoKCSogW21pc2MvbWVzc2FnZS5jXQoJTWVzc2FnZSBib3hlcyBub3cgdXNlIERyYXdUZXh0IHdpdGggRFRfQ0FMQ1JFQ1QuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJQnVnIGZpeCBpbiBmdW5jdGlvbiBGcmFtZVJlY3QsIChpdCB3YXMgdXNpbmcgUEVOIGluc3RlYWQgb2YgQlJVU0gpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4IGZvciBmbGFncyBpbiBmdW5jdGlvbiBTaG93V2luZG93LgoJTW9yZSBhY2N1cmF0ZSBXTV9TSVpFIGdlbmVyYXRlZCBieSBmdW5jdGlvbiBTaG93V2luZG93LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1vcmUgY29kZSBmb3IgTEJTX01VTFRJUExFU0VMLgoJTW9yZSBjb2RlIGZvciBMQlNfTVVMVElDT0xVTU4uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglCYWQgZGVmaW5lIGZvciBNRl9TRVBBUkFUT1IuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTmV3IGZ1bmN0aW9uczogUG9wTWVudVduZFByb2MoKSB3aXRoICdnbHVlcycsCglDcmVhdGVQb3B1cE1lbnUoKSwgQXBwZW5kTWVudSgpLCBJbnNlcnRNZW51KCksIFJlbW92ZU1lbnUoKSwgCglEZWxldGVNZW51KCksIE1vZGlmeU1lbnUoKSwgVHJhY2tQb3B1cE1lbnUoKS4KCUNvZGUgaW4gc3R1YnM6IENyZWF0ZU1lbnUoKSwgRGVzdHJveU1lbnUoKS4gCgpTYXQgSmFuICAxIDEwOjIyOjQzIDE5OTQgIEJvYiBBbXN0YWR0ICAoYm9iQHBvb2gpCgoJKiBsb2FkZXIvd2luZS5jOiBBZGRlZCBzdXBwb3J0IGZvciByZWxvY2F0aW9uIHR5cGVzIDUgYW5kIDYuCgpNb24gRGVjIDI3IDExOjA2OjAzIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbWlzYy9jb21tLmNdCgluZXcgZnVuY3Rpb25zOiBCdWlsZENvbW1EQ0IoKSwgT3BlbkNvbW0oKSwgQ2xvc2VDb21tKCksCglTZXRDb21tQnJlYWsoKSwgQ2xlYXJDb21tQnJlYWsoKSwgRXNjYXBlQ29tbUZ1bmN0aW9uKCksIEZsdXNoQ29tbSgpLAoJR2V0Q29tbUVycm9yKCksIFNldENvbW1FdmVudE1hc2soKSwgR2V0Q29tbUV2ZW50TWFzaygpLAoJU2V0Q29tbVN0YXRlKCksIEdldENvbW1TdGF0ZSgpLCBUcmFuc21pdENvbW1DaGFyKCksIFJlYWRDb21tKCksIAoJV3JpdGVDb21tKCkuCgpXZWQgRGVjIDIyIDEzOjAwOjE1IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglJbXBsZW1lbnRlZCB0ZXh0IGNhcmV0IGZ1bmN0aW9ucy4KClR1ZSBEZWMgMjEgMDY6MTM6NTggMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2xvYWRlci93aW5lLmNdCglCdWcgZml4IGluIExvYWRJbWFnZSgpLgoKCSogW29iamVjdHMvYml0Ymx0LmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFtvYmplY3RzL3RleHQuY10KCSAgW3dpbmRvd3MvZGMuY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglNb2RpZmllZCBncmFwaGljcyBjYWxscyB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgREMgb3JpZ2luLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBXTV9OQ0NBTENTSVpFIGhhbmRsaW5nLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVNlbmQgV01fTkNDQUxDU0laRSBtZXNzYWdlIG9uIHJlc2l6ZSBldmVudC4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2VuZCBXTV9OQ0NBTENTSVpFIG1lc3NhZ2UgaW4gQ3JlYXRlV2luZG93KCkuCglSZWFsaXplIHdpZGdldHMgYXQgY3JlYXRpb24gdGltZSAoc2hvdWxkIHByZXZlbnQgcHJvYmxlbXMgd2l0aAoJdW5yZWFsaXplZCB3aWRnZXRzKS4KCkRlYyAxOSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJU2VuZCBtb3VzZSAmIGtleWJvYXJkIG1lc3NhZ2UgcmVjZWl2ZWQgdG8gaXRzIHBhcmVudC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNlbmQga2V5Ym9hcmQgbWVzc2FnZSByZWNlaXZlZCB0byBpdHMgcGFyZW50LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUFkZCBOYXZpZ2F0aW9uIGtleXMgLgoJTGlzdEJveCBub3cgdXNlIFZTQ1JPTEwgJiBIU0NST0xMIGluc3RlYWQgb2YgY2hpbGRyZW4uCglBbHBoYSB2ZXJzaW9uIG9mIExCU19NVUxUSVBMRVNFTC4KCUFscGhhIHZlcnNpb24gb2YgTEJTX01VTFRJQ09MVU1OLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGQgTmF2aWdhdGlvbiBrZXlzIG9uIGNsb3NlZCBDb21ib0JveC4KCVJlbW92ZSB1c2VsZXNzICdDT01CT0JPWF9DcmVhdGVDb21ib0JveCcgZnVuY3Rpb24uCgpNb24gRGVjIDE5IDIwOjM5OjM0IDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgoJKiBbbG9hZGVyL3dpbmUuCglMb2FkSW1hZ2UoKSBtb2RpZmllZCB0byB1c2UgRmluZEZpbGUoKS4KCgkqIFttaXNjL2ZpbGUuY10KCVNldEVycm9yTW9kZSBhZGRlZAoKCSogW21pc2MvZG9zX2ZzLmNdCglidWcgZml4ZXMuCgpEZWMgMTMsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglidWcgZml4IGluIEdsb2JhbEdldEZyZWVTZWdtZW50IDogZ29vZCBwdHIgaW4gJ2dfcHJldicuCgoJKiBbc3lzcmVzLmRsbF0KCXByZWxpbWluYXJ5IHZlcnNpb24gb2YgYSAnZ2xhc3Mgb2Ygd2luZScgYml0bWFwCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uICdHZXRDYXB0dXJlJy4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVJlbW92ZSB1c2VsZXNzICdTQ1JPTExCQVJfQ3JlYXRlU2Nyb2xsQmFyJyBmdW5jdGlvbi4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglSZW1vdmUgdXNlbGVzcyAnTElTVEJPWF9DcmVhdGVMaXN0Qm94JyBmdW5jdGlvbi4KCk1vbiBEZWMgMTMgMTM6NTE6MDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW29iamVjdHMvZm9udC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gR2V0Q2hhcldpZHRoKCkuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJTW9kaWZpZWQgRVZFTlRfa2V5IHRvIHNlbmQgV2luZG93cyB2aXJ0dWFsIGtleSBjb2RlcyBmb3IKCVdNX0tFWURPV04gYW5kIFdNX0tFWVVQIG1lc3NhZ2VzLCBhbmQgYSBXTV9DSEFSIG1lc3NhZ2UKCWZvciBwcmludGFibGUgY2hhcmFjdGVycy4KCldlZCBEZWMgMDggMTk6MjA6MDAgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGhuMzI0d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBQb2x5bGluZSBhbmQgUG9seWdvbgoKTW9uIERlYyAxMyAxNDo1MTo1NCAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3RCb3hEaXJlY3RvcnkoKSBtb2RpZmllZCB0byB1c2UgZG9zX2ZzLmMncyBmdW5jdGlvbnMgdG8KCWFjY2VzcyBmaWxlcyZ8ZHJpdmVzLgoKU2F0IERlYyAwNCAxNzowNDoyMyAxOTkzICBFcmlrIEJvcyAoZXJpa0B0cmFzaGNhbi5oYWNrdGljLm5sKQoKICAgICAgIAkqIFttaXNjL2Rvc19mcy5jXQogICAgICAgCUFkZGVkIEZpbmRGaWxlKCkgdG8gc2VhcmNoIGEgZmlsZSBpbiBhIGRvcy91bml4IHN0eWxlIHBhdGguCgkKCSogW21pc2MvZmlsZS5jXQoJTmV3IFdpbjMxIGZ1bmN0aW9uczogT3BlbkZpbGUsIF9sY3JlYXRlLCBfbGxzZWVrLCBHZXRUZW1wRHJpdmUsCglHZXRUZW1wRmlsZU5hbWUsIEdldFdpbmRvd3NEaXJlY3RvcnksIEdldFN5c3RlbURpcmVjdG9yeSwKCUdldERyaXZlVHlwZS4JCQkgICAKCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKV2VkIERlYyAgMSAxNjoyMDo0NSAxOTkzICBNaWd1ZWwgZGUgSWNhemEgIChtaWd1ZWxAcm94YW5uZS5udWNsZWN1LnVuYW0ubXgpCgogICAgICAgICogW21pc2MvcHJvZmlsZS5jXQogICAgICAgIFRoZSBQcm9maWxlIGZ1bmN0aW9ucyBub3cgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlcy4gVGhleSBub3cKICAgICAgICBpbXBsZW1lbnQgYWxsIHRoZSBmZWF0dXJlcyBkZXNjcmliZWQgaW4gdGhlIFNESy4KClR1ZSBOb3YgMzAgMTM6NTU6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgYW1zY29ucykKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVJld3JvdGUgc2VsZWN0b3IgYWxpYXNpbmcgcm91dGluZXMgdG8gdXNlIFN5c3RlbSBWIElQQwoJcm91dGluZSB0byBhbGlhcyBtZW1vcnkgc2VnbWVudHMuCgpOb3YgMjgsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGNvbnNpc3RlbmN5IGluIGZ1bmN0aW9ucyB1c2luZyB3SW5kZXhlcwoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJTmV3IGZ1bmN0aW9uIDogU2hvd1Njcm9sbEJhcigpLgoKCSogW2xvYWRlci9jdXJzb3IuY10gLi4uIE5ldyBmaWxlCglNb3ZlIGN1cnNvciBmdW5jdGlvbnMgZnJvbSBbbG9hZGVyL3Jlc291cmNlLmNdLgoJTmV3IGZ1bmN0aW9uIDogQ2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogR2V0Q2xpcEN1cnNvcigpLgoJTmV3IGZ1bmN0aW9uIDogQ3JlYXRlQ3Vyc29yKCkuCglTZXRDdXJzb3IoKSBub3cgd29ya2luZyB1c2luZyBnbG9hYmFsIHZhcmlhYmxlICd3aW5IYXNDdXJzb3InLgoKCSpbb2JqZWN0L3BhbGV0dGUuY10KCU5ldyBzdHViIG9ubHkgOiBTZWxlY3RQYWxldHRlKCkuCglOZXcgc3R1YiBvbmx5IDogUmVhbGl6ZVBhbGV0dGUoKS4KCgkqW3dpbi9ldmVudC5jXQoJTmV3IGZ1bmN0aW9uIDogRVZFTlRfZW50ZXJfbm90aWZ5KCksCgkJdXBkYXRlICd3aW5IYXNDdXJzb3InIGFuZCBzZW5kIFdNX1NFVENVUlNPUi4KCgkqW3dpbi9kZWZ3bmQuY10KCUFkZCBwcm9jZXNzaW5nIG9mIFdNX1NFVENVUlNPUiBtZXNzYWdlLgoKCSpbd2luL3dpbi5jXQoJTmV3IG1lbWJlcnMgaW4gV05EIHN0cnVjdHVyZSA6IGhDdXJzb3IsIGhXbmRWU2Nyb2xsICYgaFduZEhTY3JvbGwuIAoJQ3JlYXRlV2luZG93RXgoKSBub3cgY3JlYXRlIGNoaWxkcmVuIGZvciBXTV9IU0NST0xMICYgV01fVlNDUk9MTC4KCU5ldyBmdW5jdGlvbiBDbGllbnRUb1NjcmVlbigpLgoJTmV3IGZ1bmN0aW9uIFNjcmVlblRvQ2xpZW50KCkuCgpNb24gTm92IDI1IDE4OjI1OjQwIDE5OTMgIEVyaWsgQm9zIChlcmlrQHRyYXNoY2FuLmhhY2t0aWMubmwpCgogICAgICAgCSogW2ZpbGVzLmggLyByZWdmdW5jLmggLyBtaXNjL2Rvcy5jXQogICAgICAgCVJlbW92ZWQuCgogICAgICAgCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAJQWRkZWQgc3VwcG9ydCBmb3IgbG9hZGluZyBkb3Nkcml2ZSBjZmcgZnJvbSB3aW5lLmluaS4KCiAgICAgICAJKiBbbWlzYy9pbnQyMS5jXQogICAgICAgCU1vZGlmaWVkLgoKCldlZCBOb3YgMjQgMTE6Mzc6MzMgMTk5MyAganVsbGlhcmRAZGlzdW5zMi5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9hdG9tLmhdIFttZW1vcnkvYXRvbS5jXQoJSW1wbGVtZW50ZWQgYXRvbXMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTW9kaWZpZWQgUmVnaXN0ZXJDbGFzcygpIHRvIHVzZSBhdG9tcy4KCUltcGxlbWVudGVkIENTX0dMT0JBTENMQVNTIHN0eWxlLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJSW1wbGVtZW50ZWQgUmVnaXN0ZXJXaW5kb3dNZXNzYWdlKCkuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglCdWcgZml4IGluIExvYWRSZXNvdXJjZSgpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCBDcmVhdGVEaWFsb2dQYXJhbSgpIHRvIHVzZSBGaW5kL0xvYWRSZXNvdXJjZSgpLgoKTW9uIE5vdiAyMiAxMzo1ODo1NiAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgogICAgICAgICogW3dpbmRvd3Mvc2Nyb2xsLmNdCglQcmVsaW1pbmFyeSBpbXBsZW1lbnRhdGlvbnMgb2YgU2Nyb2xsV2luZG93LCBTY3JvbGxEQyBhbmQKICAgICAgICBTY3JvbGxXaW5kb3dFeC4KCk5vdiAyMSwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU9wdGltaXphdGlvbiBvZiByZWRyYXcgZHVyaW5nICdBZGQnIG9yICdJbnNlcnQnLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJT3B0aW1pemF0aW9uIG9mIFdNX1BBSU5UIGR1cmluZyAndGh1bWJ0cmFja2luZycuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglBZGQgb2YgYmV0YSBpbXBsZW1lbnQgb2YgJ0JTX09XTkVSRFJBVycKCgkqIFtjb250cm9scy9zdGF0aWMuY10KCVN0eWxlICdTU19JQ09OJyBuZXcgc3VwcG9ydGVkLgoKCSogW21pc2MvbWVzc2FnZS5jXQoJQmVnaW4gb2YgaW1wbGVtYW50YXRpb24gb2YgTUJfWFhYIHN0eWxlcy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZ1bmN0aW9uIExvYWRJY29uKCkgOiBub3cgcHJlcGFyZSB0cmFuc3BhcmVuY3kgQml0bWFwIG1hc2suCglGdW5jdGlvbiBMb2FkQ3Vyc29yKCkgOiBub3cgcHJlcGFyZSBhICdYIHBpeG1hcGN1cnNvcicuCglOZXcgZnVuY3Rpb24gU2V0Q3Vyc29yKCkgOiBub3QgZmluaXNoZWQuCglOZXcgZnVuY3Rpb24gU2hvd0N1cnNvcigpIDogbm90IGZpbmlzaGVkLgoJTmV3IGZ1bmN0aW9uIEFjY2Vzc1Jlc291cmNlKCkgOiBzdHViLgoKCSogW29iai9kaWIuY10KCUZ1bmN0aW9uIERyYXdJY29uKCk6IGRldWdnaW5nIHBoYXNlIG9mIGljb24gdHJhbnNwYXJlbmN5IG1hc2suCgoJKiBbbG9hZGVyL2xpYnJhcnkuY10KCW5ldyBmaWxlIGZvciBuZXdzIGZ1bmN0aW9ucyBMb2FkTGlicmFyeSgpICYgRnJlZUxpYnJhcnkoKS4KCgkqIFtzeXNyZXMuZGxsXQoJUmVzb3VyY2VzIG9ubHkgMTZiaXRzIERMTCBmb3IgU3lzdGVtIFJlc291cmNlcywgaWNvbnMsIGV0Yy4uLgoKU3VuIE5vdiAxNCAxNDozOTowNiAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglTaW1wbGlmaWVkIGRpYWxvZyB0ZW1wbGF0ZSBwYXJzaW5nLgoJSW1wbGVtZW50ZWQgRGlhbG9nQm94SW5kaXJlY3QoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRml4ZWQgYnVnIGluIENyZWF0ZVdpbmRvdygpIHdoZW4gYWJvcnRpbmcgd2luZG93IGNyZWF0aW9uLgoJTW9kaWZpZWQgVXBkYXRlV2luZG93KCkgdG8gb25seSB1cGRhdGUgdmlzaWJsZSB3aW5kb3dzLgoJSW1wbGVtZW50ZWQgSXNXaW5kb3coKS4KCk5vdiAxNCwgOTMgbWFydGluMkB0cmdjb3JwLnNvbHVjb3JwLnFjLmNhIChNYXJ0aW4gQXlvdHRlKQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cgOiBuZXcgbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUNvbWJvIGJveCBjb250cm9sIHdpbmRvdyA6IG5ldyBtZXNzYWdlcy4KCgkqIFttaXNjL21lc3NhZ2UuY10KCU1vdmVkIHN0dWIgTWVzc2FnZUJveCgpIHRvIHRoaXMgbmV3IGZpbGUuCglJbXBsZW1lbnRlZCBvZiBhIGNhbGxiYWNrLCBub3cgTWVzc2FnZUJveCBzaG93IGEgd2luZG93LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTmV3IGZ1bmN0aW9uIERlc3Ryb3lJY29uKCkKCU5ldyBmdW5jdGlvbiBEZXN0cm95Q3Vyc29yKCkKCUZpbGxlZCBzdHViIExvYWRJY29uKCkKCUZpbGxlZCBzdHViIExvYWRDdXJzb3IoKQoJQnVnIGZpeGVkIGluIEZpbmRSZXNvdXJjZUJ5TmFtZSgpIDogbWlzc2luZyBsc2VlaygpLgoKCSogW29iai9kaWIuY10KCU5ldyBmdW5jdGlvbiBEcmF3SWNvbigpCgoJKiBbd2luZG93cy93aW4uY10KCU5ldyBmdW5jdGlvbiBDbG9zZVdpbmRvdygpCglOZXcgZnVuY3Rpb24gT3Blbkljb24oKQoJTmV3IGZ1bmN0aW9uIElzSWNvbmljKCkKCU5ldyBGdW5jdGlvbiBGaW5kV2luZG93KCkKClN1biBOb3YgMTQgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCVdyb3RlIEFsbG9jQ1N0b0RTQWxpYXMoKSBhbmQgQWxsb2NEU3RvQ1NBbGlhcygpCgpTdW4gTm92IDE0IDA4OjI3OjE5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglXcm90ZSBBbGxvY1NlbGVjdG9yKCkgYW5kIFByZXN0b0NoYW5nb1NlbGVjdG9yKCkuICBZVUshCgpTYXQgTm92IDEzIDEzOjU2OjQyIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IGFtc2NvbnMpCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglXcm90ZSBGaW5kUmVzb3VyY2UoKSwgTG9hZFJlc291cmNlKCksIExvY2tSZXNvdXJjZSgpLAoJYW5kIEZyZWVSZXNvdXJjZSgpCgoJKiBbaW5jbHVkZS9zZWdtZW0uaF0gW2xvYWRlci9zZWxlY3Rvci5jXSBbbG9hZGVyL3NpZ25hbC5oXQoJQ2hhbmdlZCBzZWxlY3RvciBhbGxvY2F0aW9uIG1ldGhvZC4KClN1biBOb3YgMTAgMDg6Mjc6MTkgMTk5MyAgS2FybCBHdWVudGVyIFd1ZW5zY2ggKGh6MjI1d3VAdW5pZHVpLnVuaS1kdWlzYnVyZy5kZSkKCgkqIFtpZjE2MzIvY2FsbGJhY2suYyBpZjE2MzIvY2FsbC5TIGlmMTYzMi91c2VyLnNwZWNdIAoJYWRkZWQgQ2F0Y2ggKEtFUk5FTC41NSkgYW5kIFRocm93IChLRVJORUwuNTYpCgkKTm92IDcsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlCdWcgcmVzb2x2ZWQgOiBQYWludGluZyBtZXNzYWdlIGJlZm9yZSBzY3JvbGwgdmlzaWJsZS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJRGVzdHJveSBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlEZXN0cm95IGNsZWFudXAuCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCgkJR2V0Q2hlY2sgTWVzc2FnZSBub3cgcmV0dXJuIGlzIHN0YXRlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglOZXcgZnVuY3Rpb24gSXNXaW5kb3dWaXNpYmxlKCkKCk1vbiBOb3YgIDEgMTQ6NDA6MjEgMTk5MyAganVsbGlhcmRAZGkuZXBmbC5jaCAoQWxleGFuZHJlIEp1bGxpYXJkKQoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglSZW1vdmVkIHNvbWUgZHVwbGljYXRlIGVudHJpZXMuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBkaWFsb2cgdW5pdHMgYW5kIGZvbnRzLgoJQWRkZWQgcHJlbGltaW5hcnkgbG9hZGluZyBvZiBkaWFsb2cgcmVzb3VyY2VzLgoJUHJlbGltaW5hcnkgaW1wbGVtZW50YXRpb24gb2YgRGlhbG9nQm94KCkuCglJbXBsZW1lbnRlZCBHZXQvU2V0RGxnSXRlbSogZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBXTV9QQVJFTlROT1RJRlkgbWVzc2FnZS4KCUltcGxlbWVudGVkIENyZWF0ZVdpbmRvd0V4KCkgYW5kIEdldFdpbmRvdygpLgoJQ29tcGxldGVkIERlc3Ryb3lXaW5kb3coKS4KCk1vbiBOb3YgIDEgMTg6MTk6MzQgMTk5MyAgRXJpayBCb3MKCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBzdXBwb3J0IGZvciBpbnQgMHgxMSAmIDB4MTIuCgogICAgICAgICogW2xvYWRlci9pbnQyMS5jXQoJSW1wcm92ZWQgZnVuY3Rpb24gaGFuZGxpbmcuCgpTdW4gT2N0IDMxIDEyOjM4OjA5IDE5OTMgIERhdmlkIE1ldGNhbGZlIDxkYXZpZEBwcmlzbS5kZW1vbi5jby51az4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUltcGxlbWVudGVkIEdldENoYXJXaWR0aCgpLgoKV2VkIE9jdCAyNyAwOTo1NjowNiAxOTkzICBKb2huIEJyZXphayA8YnJlemFrQGNoLmhwLmNvbT4KCgkqIFtNYWtlZmlsZV0KICAgICAgICBVc2UgR05VIG1hbGxvYy4KCgkqIFtpbmNsdWRlL2ludDIxLmggaW5jbHVkZS93aW5lLmhdCiAgICAgICAgQ2hhbmdlIHNjX2VmbGFncyB0byBzY19lZmwgLgoKCSogW2luY2x1ZGUvd2luZS5oXQogICAgICAgIEZpeCBtaXNwbGFjZWQgI2VuZGlmCiAgICAgICAgSW5jbHVkZSA8c2lnbmFsLmg+IGZvciBOZXRCU0QKCgkqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBEb24ndCBpbmNsdWRlIDxzeXMvdmZzLmg+IGluIE5ldEJTRAogICAgICAgIERvIGluY2x1ZGUgPHN5cy9tb3VudC5oPiBpbiBOZXRCU0QKICAgICAgICBDbGVhbnVwIHNvbWUgbGludC4KCk1vbiBPY3QgMjYgMTc6NTk6MDEgMTk5MyAgRXJpayBCb3MKCiAgICAgICAgKiBbaW5jbHVkZS9pbnQyMS5oXQogICAgICAgIEFkZGVkLgoKICAgICAgICAqIFtsb2FkZXIvaW50MjEuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtYW55IGRvcyBpbnRzLgoKICAgICAgICAqIFttaXNjL2ZpbGUuY10gW2luY2x1ZGUvZmlsZXMuaF0KICAgICAgICBNb3ZlZCBPUEVOX01BWCBhbmQgRG9zRHJpdmVTdHJ1Y3QgdG8gZmlsZXMuaC4KClN1biBPY3QgMjQgMTM6MzY6NTAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUgPGRhdmlkQHByaXNtLmRlbW9uLmNvLnVrPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJSW1wbGVtZW50ZWQgQ0hFQ0tCT1gsIEFVVE9DSEVDS0JPWCwgM1NUQVRFLCBBVVRPM1NUQVRFLAoJUkFESU9CVVRUT04sIEFVVE9SQURJT0JVVFRPTiwgR1JPVVBCT1ggY29udHJvbHMsIHRvZ2V0aGVyIHdpdGgKCWEgcHJlbGltaW5hcnkgVVNFUkJVVFRPTiBjb250cm9sLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQ29ycmVjdGVkIGJ1Z3MgaW4gVEVYVF9OZXh0TGluZSgpIGFuZCBhZGRlZCBoYW5kbGluZyBvZiBwcmVmaXgKCWNoYXJhY3Rlci4KCgkqIFtjb250cm9scy9idXR0b24uY10KCURpc2FibGVkIGZvY3VzIGhhbmRsaW5nIGJ5IGNvbW1lbnRpbmcgb3V0IFNldEZvY3VzKCkgY2FsbHMgdW50aWwKCXNlcmlvdXMgYnVnIGNhbiBiZSBmb3VuZC4KCk9jdCAgMjAsIDkzIG1hcnRpbjJAdHJnY29ycC5zb2x1Y29ycC5xYy5jYSAoTWFydGluIEF5b3R0ZSkKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglMaXN0Ym94IGNvbnRyb2wgd2luZG93CgkJUGFpbnRpbmcgY2xlYW51cCwgbmV3IG1lc3NhZ2VzIHByb2Nlc3NlZC4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb21ibyBib3ggY29udHJvbCB3aW5kb3cKCQlQYWludGluZyBjbGVhbnVwLgoKVHVlIE9jdCAxMiAxNzo1MDoxMSAxOTkzICBqdWxsaWFyZEBkaS5lcGZsLmNoIChBbGV4YW5kcmUgSnVsbGlhcmQpCgoJKiBbb2JqZWN0cy9jb2xvci5jXSBbb2JqZWN0cy9wYWxldHRlLmNdIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglCZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIHByaXZhdGUgY29sb3IgbWFwLgoJVXNpbmcgYSBwcml2YXRlIG1hcCBpcyBub3cgdGhlIGRlZmF1bHQuCgoJKiBbd2luZG93cy93aW4uY10KCUJ1ZyBmaXguCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBDcmVhdGVEaWFsb2cqKCkgYW5kIElzRGlhbG9nTWVzc2FnZSgpLgoKCSogW21pc2MveHQuY10gW3dpbmRvd3MvZGVmd25kLmNdCglNb3ZlZCBEZWZXaW5kb3dQcm9jKCkgdG8gZGVmd25kLmMuCglBZGRlZCBXTV9OQ0NSRUFURSwgV01fTkNERVNUUk9ZIGFuZCBXTV9DVExDT0xPUiBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL2RlZmRsZy5jXQoJU3RhcnRlZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgRGVmRGxnUHJvYygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBXTV9OQ0NSRUFURSBhbmQgV01fTkNERVNUUk9ZIG1lc3NhZ2VzLgoJSW1wbGVtZW50ZWQgSXNDaGlsZCgpLgoKVHVlIE9jdCAxMiAxNzo1MDoyMCAxOTkzICBEYXZpZCBNZXRjYWxmZSA8ZGF2aWRAcHJpc20uZGVtb24uY28udWs+CgoJKiBbd2luZG93cy9mb2N1cy5jXQoJSW1wbGVtZW50ZWQgR2V0Rm9jdXMoKSBhbmQgU2V0Rm9jdXMoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglBZGRlZCBwcm9jZXNzaW5nIG9mIEZvY3VzSW4gYW5kIEZvY3VzT3V0IGV2ZW50cy4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBEcmF3Rm9jdXNSZWN0KCkuCgpTYXQgT2N0ICA5IDE0OjM2OjU3IDE5OTMgIEVyaWsgQm9zCgoJKiBbbG9hZGVyL2ludDFhLmNdCglBZGRlZCBtb3JlIGZ1bmN0aW9uIGhhbmRsaW5nLgoKV2VkIE9jdCAgNiAxMjoyMToyMiAxOTkzICBFcmlrIEJvcwoKCSogW2xvYWRlci9zaWduYWwuY10KCVNwbGl0IHNpZ25hbC5jIGludG8gaW50MWEuYywgaW50MjEuYyBhbmQgc2lnbmFsLmMuCgpUdWUgT2N0ICA1IDIyOjEyOjQwIDE5OTMgIERhdmlkIE1ldGNhbGZlCgoJKiBbY29udHJvbHMvc3RhdGljLmNdIFtjb250cm9sL3dpZGdldHMuY10KCVN0YXRpYyBjb250cm9sIGNsYXNzLgoKCSogW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgcHJvY2Vzc2luZyBvZiBhZGRpdGlvbmFsIERUXyBmbGFncyB0byBEcmF3VGV4dCgpLgoKCSogW3dpbmRvd3Mvd2luLmNdIFttaXNjL3h0LmNdCglBZGRlZCBTZXRXaW5kb3dUZXh0KCkgYW5kIFdNX1NFVFRFWFQgcHJvY2Vzc2luZy4KClR1ZSBPY3QgIDUgMjI6MTI6NDAgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUxpc3Rib3ggY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVNjcm9sbCBiYXIgY29udHJvbCB3aW5kb3cKCgkqIFtjb250cm9scy9jb21iby5jXQoJQ29tYm8gYm94IGNvbnRyb2wgd2luZG93CgoJKiBbaW5jbHVkZS9jb21iby5oXQoJQ29tYm8gYm94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9saXN0Ym94LmhdCglMaXN0Ym94IGRlZmluaXRpb25zCgoJKiBbaW5jbHVkZS9zY3JvbGwuaF0KCVNjcm9sbCBiYXIgZGVmaW5pdGlvbnMKClNhdCBPY3QgIDIgMDk6MzU6NTQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUZpeGVkIGJ1ZyBpbiBNYWtlUHJvY0luc3RhbmNlKCkuCgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQ2hhbmdlZCB4L3cgYW5kIHgvYiB0byBkaXNwbGF5IGluIGhleC4KCgkqIFtkZWJ1Z2dlci9pMzg2LXBpbnNuLmNdCglBZGRlZCBjb2RlIHRvIHByb3Blcmx5IHVuYXNzZW1ibGUgMTYtYml0IGluZGV4aW5nLgoKRnJpIE9jdCAgMSAwODoyOTowNSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2xvYWRlci9maWxlcy5jXSBbbWlzYy9wcm9maWxlLmNdCglTeXN0ZW0gaW5pdGlhbGl6YXRpb24gZmlsZSBpcyBub3cgY2FsbGVkICJ3aW5lLmluaSIgYW5kIGNhbgoJYmUgbG9jYXRlZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksCglvciBhbnkgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZSBXSU5FUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL2NhbGwuU10gW2luY2x1ZGUvcmVnZnVuYy5oXQoJQ2hhbmdlZCByZWdpc3RlciBmdW5jdGlvbiBzdGFjayB0byBtYXRjaCBzaWdjb250ZXh0IHN0cnVjdHVyZS4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtsb2FkZXIvZmlsZXMuY10KCUNyZWF0ZWQgZnVuY3Rpb24gdG8gc2VhcmNoIGEgcGF0aCBmb3IgZmlsZXMgdG8gbG9hZC4KCgkqIFtsb2FkZXIvd2luZS5jXQoJTW9kaWZpZWQgZXhlIGFuZCBkbGwgZmlsZSBsb2FkaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHBhdGgKCXNwZWNpZmllZCBieSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgV0lORVBBVEguCgpUaHUgU2VwIDMwIDIyOjMwOjIxIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQoJQnVnIGZpeC4KClRodSBTZXAgMzAgMjI6MzA6MjEgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdIFtkZWJ1Z2dlci9kdGVzdC5jXSAKCSAgW2RlYnVnZ2VyL29ic3RhY2suaF0KCVVwZGF0ZXMgdG8gYWxsb3cgZGVidWdnZXIgdG8gZnVuY3Rpb24gdW5kZXIgTmV0QlNELgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW3dpbmRvd3Mvd2luLmNdCglJbXBsZW1lbnRlZCBzdXBwb3J0IGZvciB3aW5kb3dzIHdpdGggbm8gYm9yZGVycy4gIEFkZGVkCiAJR2V0UGFyZW50KCksIEdldERsZ0N0cmxJRCgpLCBHZXRXaW5kb3dUZXh0KCkgYW5kCglHZXRXaW5kb3dUZXh0TGVuZ3RoKCkgZnVuY3Rpb25zLgoKCSogW21pc2MveHQuY10KCUFkZGVkIHByb2Nlc3Npbmcgb2YgV01fR0VUVEVYVCBhbmQgV01fR0VUVEVYVExFTkdUSCBtZXNzYWdlcwoJdG8gRGVmV2luZG93UHJvYyBhbmQgSW1wbGVtZW50ZWQgTWVzc2FnZUJlZXAoKS4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBwcmVsaW1pbmFyeSBzeXN0ZW0gY29sb3Igc3VwcG9ydC4KCgkqIFtjb250cm9scy9idXR0b24xLmNdCglNb2RzIHRvIG5ldyBidXR0b24gY29udHJvbCBhbmQgaW50ZWdyYXRpb24gd2l0aCBXaW5lLgoKVHVlIFNlcCAyOCAxOTo1OToyMSAxOTkzICBKb2hhbm5lcyBSdXNjaGVpbnNraQoKCSogW2NvbnRyb2xzL2J1dHRvbjEuY10KCU5ldyBidXR0b24gY29udHJvbCB1c2luZyBHREkgZnVuY3Rpb25zLgoJClR1ZSBTZXAgMjggMTk6NTk6MjEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtkZWJ1Z2dlci8qXQoJQWRkZWQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyB0byBXaW5lCgpTYXQgU2VwIDI1IDEzOjIyOjUwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZCAgKGp1bGxpYXJkQGRpLmVwZmwuY2gpCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUJ1ZyBmaXgKCkZyaSBTZXAgMjQgMDc6MzU6MTEgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlZCB0aGUgZW50cnkgcG9pbnQgY29kZSB0byByZWR1Y2UgdGhlIHN0YW5kYXJkIGVudHJ5Cglwb2ludCBzaXplIGZyb20gMjIgYnl0ZXMgdG8gMTAgYnl0ZXMuICBUaGlzIGxlYXZlcyBhYm91dAoJNDAwMCBmcmVlIGVudHJ5IHBvaW50cyBpbnN0ZWFkIG9mIHRoZSA4MDAgaW4gdmVyc2lvbiAwLjQuMi4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJld3JvdGUgZnVuY3Rpb25zIHRvIGFsbG93IGxvYWRpbmcgb2YgcmVzb3VyY2VzIGZyb20gYW55CglETEwuCgoJKiBbbG9hZGVyL3dpbmUuY10gW2luY2x1ZGUvd2luZS5oXQoJQWRkZWQgZnVuY3Rpb25zIEdldEZpbGVuYW1lRnJvbUluc3RhbmNlKCkgYW5kIEdldEZpbGVJbmZvKCkKCXRvIHNlYXJjaCBmb3IgYSBsb2FkZWQgZmlsZSBiYXNlZCBvbiBpdHMgaW5zdGFuY2UgaGFuZGxlLgoJQWRkZWQgYSBmaWVsZCBpbiBzdHJ1Y3Qgd19maWxlcyB0byBtYWtlIHNlYXJjaGluZyBieSBhbiBpbnN0YW5jZQoJaGFuZGxlIGZhc3Rlci4KClR1ZSBTZXAgMjEgMDk6NTc6MDEgMTk5MyAgbWlndWVsQHJveGFubmUubnVjbGVjdS51bmFtLm14IChNaWd1ZWwgZGUgSWNhemEpCgoJKiBbbWlzYy9wcm9maWxlLmNdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFttaXNjL3Byb2ZpbGUuYy5vbGRdCglJbXBsZW1lbnRhdGlvbiBvZiAuSU5JIGZpbGUgaGFuZGxpbmcKCk1vbiBTZXAgMjAgMTA6NTQ6MzIgMTk5MyAgSm9obiBCcmV6YWsKCgkqIFtjb250cm9scy9XaW5CdXR0b24uY10KCUJ1ZyBmaXggd2l0aCBjYWxsIHRvIFh0VmFTZXRWYWx1ZXMuCgpNb24gU2VwIDIwIDEwOjU0OjMyIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW3dpbmRvd3Mvd2luLmNdCglRdWljayBwYXRjaCB0byBnZXQgY29sb3JtYXBzIHRvIHdvcmsgd2l0aCBidXR0b24gd2lkZ2V0LgoKTW9uIFNlcCAyMCAwMjo0Mjo1NCAxOTkzICAgICh5bmd2aUBoYWZyby5pcykKCgkqIG1pc2Mva2V5Ym9hcmQuYzogCglJZmRlZmVkIG91dCBzb21lIGJvZ3VzIEFuc2k8LT5PZW0gY29udmVyc2lvbiBmdW5jdGlvbnMKCgkqIG1pc2MvbHN0ci5jOiAKCU5ldyBmaWxlIHdpdGggc3RyaW5nIGZ1bmN0aW9ucyBsaWtlIGxzdHIqIElzQ2hhciogKkFuc2kqIAoKV2VkIFNlcCAxNSAyMDozNToxMCAxOTkzICBKb2huIEJyZXphawoKCSogW2xvYWRlci9zaWduYWwuY10KCUFkZGl0aW9uYWwgY2hhbmdlcyB0byBzdXBwb3J0IE5ldEJTRC4KCldlZCBTZXAgMTUgMjI6MTk6MjIgMTk5MyAgTWFydGluIEF5b3R0ZQoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUFkZGVkIEZyYW1lUmVjdCBmdW5jdGlvbgoKVHVlIFNlcCAxNCAxMzo1NDo0NSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10KCVByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIHByaXZhdGUgY29sb3IgbWFwLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUltcGxlbWVudGVkIENTX0NMQVNTREMgc3R5bGUuCgoJKiBbd2luZG93cy9kY2UuY10KCU1vdmVkIERDRXMgdG8gVVNFUiBoZWFwLgoJSW1wbGVtZW50ZWQgY2xhc3MgYW5kIHdpbmRvdyBEQ3MuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJSW1wbGVtZW50ZWQgQ1NfREJMQ0xLUyBzdHlsZS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglCdWcgZml4IGluIFNldFBpeGVsKCkuCgoJKiBbd2luZG93cy93aW4uY10JCglJbXBsZW1lbnRlZCBDU19PV05EQyBzdHlsZS4KCUltcGxlbWVudGVkIEdldC9TZXRXaW5kb3dMb25nKCkuCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwcGluZy5jXSAKCSAgW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3Mvd2luLmNdCQoJTW92ZWQgd2luZG93cyBmcm9tIGdsb2JhbCBoZWFwIHRvIFVTRVIgaGVhcC4KCk1vbiBTZXAgMTMgMDU6MDA6MTEgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtNYWtlZmlsZV0gW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9kbGxzLmhdIFtzZWxlY3Rvci5jXQoJICBbbG9hZGVyL3dpbmUuY10gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBhYmlsaXR5IHRvIGdlbmVyYXRlIG1pc3NpbmcgZnVuY3Rpb25zIHN0YXRpc3RpY3MuCgpNb24gU2VwIDEzIDEyOjA5OjQ3IDE5OTMgIFNjb3R0IEEuIExhaXJkICAoc2NvdHRAY3VybHkpCgoJKiBbV0lOMzEtQVBQTEVUU10KCUFkZGVkIG5ldyBmaWxlLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGRlZmluaXRpb25zIGZvciBHZXRQcm9maWxle0ludCxTdHJpbmd9IGFuZCBTZXRIYW5kbGVDb3VudC4KCgkqIFtpZjE2MzIva2V5Ym9hcmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIEtleWJvYXJkIGRyaXZlciBETEwuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglBZGRlZCBrZXlib2FyZC5kbGwgdG8gbGlzdCBvZiBpbmNsdWRlZCBETExzLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIGRlZmluaXRpb24uCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglBZGRlZCBMb2FkQWNjZWxlcmF0b3JzIHN0dWIuCgoJKiBbbWlzYy9maWxlLmNdCglDaGFuZ2VkIE9wZW5GaWxlLCBhbmQgYWRkZWQgU2V0SGFuZGxlQ291bnQgKGZvciB3aW5maWxlLmV4ZSkKCgkqIFttaXNjL2tleWJvYXJkLmNdCglBZGRlZCBrZXlib2FyZCBjb2RlLgoKCSogW21pc2MvcHJvZmlsZS5jXSBbbWlzYy94dC5jXQoJTW92ZWQgR2V0UHJpdmF0ZVByb2ZpbGUqIGNvbW1hbmRzIGhlcmUsIGFuZCBhZGRlZCBHZXRQcm9maWxlKgoJY29tbWFuZHMuCgpNb24gU2VwIDEzIDEwOjI0OjM3IDE5OTMgIEFuZHJldyBCdWxoYWsKCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUltcGxlbWVudGVkIE11bERpdigpLCBPdXRwdXREZWJ1Z1N0cmluZygpIGFuZCB3dnNwcmludGYoKQoKRnJpIFNlcCAxMCAwOToxMzozMCAxOTkzICBKb2huIEJyZXphawoKCSogWyovTWFrZWZpbGVdCglDcmVhdGVkIHBhdGNoIHRvIGFsbG93IEJTRCBtYWtlIHRvIGJ1aWxkIHdpbmUuCgoJKiBbd2luZG93cy93aW4uY10KCUZpeGVkIE5VTEwgcG9pbnRlciByZWZlcmVuY2UuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFttaXNjL3h0LmNdCglEZWZpbmVkIEhaIHRvIGhhbmRsZSBzeXN0ZW0gc3BlY2lmaWMgdGltaW5nLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVVzZSBNX1BJIGlzIFBJCgoJKiBbb2JqZWN0cy9wYWxsZXRlLmNdCglOZXRCU0QgZG9lcyBub3QgaGF2ZSAvdXNyL2luY2x1ZGUvdmFsdWVzLmggYW5kIE1BWElOVCBpcyBJTlRfTUFYLgoKCSogW2R1bXAuY10gW2xkdC5jXSBbd2luZS5jXQoJaWZkZWYnZWQgbGludXggaGVhZGVycyBmb3IgbGludXggY29tcGlsZS4KCgkqIFtsb2FkZXIvbGR0bGliLmNdCglBZGQgTmV0QlNEIHN5c3RlbSBjYWxscyB3aGVuIGNvbXBpbGVkIG9uIHRoYXQgc3lzdGVtLgoKCSogW2xvYWRlci9zZWxlY3Rvci5jXQoJVXNlIG1tYXAoTUFQX0FOT04sIC4uLikgZm9yIE5ldEJTRC4KCgkqIFtpZjE2MzIvY2FsbC5TXQoJRml4ZWQgc2VsZWN0b3IgYXNzdW1wdGlvbnMuCgpUaHUgU2VwIDkgMjA6MDE6MzcgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCgkqIFtjb250cm9scy9XaW5CdXR0b24qXSBbY29udHJvbHMvYnV0dG9uLmNdIFtjb250cm9scy93aWRnZXQuY10KICAJICBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIDNEIGJ1dHRvbiBjb250cm9sIGFuZCB0aWVkIGludG8gQ3JlYXRlV2luZG93KCkKClRodSBTZXAgIDkgMDc6MzU6MjQgMTk5MyAgU2NvdHQgTGFpcmQKCgkqIFtpZjE2MzIvc291bmQuc3BlY10KCUNyZWF0ZWQgaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIFNPVU5EIERMTC4KCgkqIFtpZjE2MzIvd2luODdlbS5zcGVjXQoJQWRkZWQgbW9yZSBmdW5jdGlvbnMgdG8gdGhlIFdJTjg3RU0gRExMIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uCgoJKiBbbWlzYy9lbXVsYXRlLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgbmV3IG1hdGggZW11bGF0aW9uIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3NvdW5kLmNdCglDcmVhdGVkIHN0dWJzIGZvciB0aGUgU09VTkQgRExMLgoKU3VuIFNlcCAgNSAyMTowMjoxMCAxOTkzICBKb2huIEJ1cnRvbgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIGludGVyZmFjZSBzcGVjaWZpY2F0aW9ucyBmb3IgT3BlbkZpbGUsIF9sY2xvc2UsIF9scmVhZCwgX2xvcGVuLAoJYW5kIF9sd3JpdGUuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBPRl8gbWFjcm9zCgoJKiBbbWlzYy9maWxlLmNdCglJbXBsZW1lbnRlZCBPcGVuRmlsZSwgX2xjbG9zZSwgX2xyZWFkLCBfbG9wZW4gYW5kIF9sd3JpdGUuCgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdCglCdWcgZml4CgoJKiBbb2JqZWN0cy90ZXh0LmNdCglCdWcgZml4CgpGcmkgU2VwICAzIDE4OjQ3OjAzIDE5OTMgIEJvYiBBbXN0YWR0CgogICAgICAgICogW29iamVjdHMvbGluZWRkYS5jXQogICAgICAgIEZpbmlzaGVkIExpbmVEREEoKS4KCkZyaSBTZXAgIDMgMTE6NTI6MTggMTk5MyAgQm9iIEFtc3RhZHQKCgkqIFt3aW5kb3dzL3RpbWVyLmNdCglDaGFuZ2VkIHRvIHVzZSBDYWxsV2luZG93UHJvYygpIHJhdGhlciBkaXJlY3RseSBjYWxsaW5nIGNhbGxiYWNrLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIFNldENhcHR1cmUoKSBhbmQgUmVsZWFzZUNhcHR1cmUoKQoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNyZWF0ZWQgc3R1YiBmb3IgR2V0S2V5U3RhdGUoKQoKCSogW29iamVjdHMvbGluZWRkYS5jXQoJQ3JlYXRlZCBzdHViIGZvciBMaW5lRERBKCkKCgkqIFtpZjE2MzIvY2FsbGJhY2suY10KCUNyZWF0ZWQgY2FsbGJhY2sgaGFuZGxlciBmb3IgTGluZUREQSBjYWxsYmFjayBwcm9jZWR1cmUuCgoJKiBbaWYxNjMyL2NhbGxiYWNrLmNdCglDcmVhdGVkIEZyZWVQcm9jSW5zdGFuY2UoKQoKRnJpIFNlcCAgMyAwODozNjo1MiAxOTkzICBEYXZpZCBNZXRjYWxmZQoKCSogW2xvYWRlci9zaWduYWwuY10KCVBhdGNoIHRvIGFuZCBjb2RlIGZvciBJTlQgMUEKClRodSBTZXAgIDIgMDA6MzE6NTQgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbb2JqZWN0cy9mb250LmNdIFtvYmplY3RzL3RleHQuY10KCU1vcmUgdGV4dCBzdXBwb3J0OiBpbXBsZW1lbnRlZCBqdXN0aWZpY2F0aW9uIGFuZCB1bmRlcmxpbmluZy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdCglNb3ZlZCBsb3ctbGV2ZWwgY2xpcHBpbmcgZnVuY3Rpb25zIHRvIG9iamVjdHMvY2xpcHBpbmcuYy4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudGVkIHdpbmRvdyB1cGRhdGUgcmVnaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFtvYmplY3RzL2RjdmFsdWVzLmNdCglNb3ZlZCBzb21lIGRldmljZS1pbmRlcGVuZGVudCBEQyBmdW5jdGlvbnMgdG8gb2JqZWN0cy9kY3ZhbHVlcy5jLgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCUltcGxlbWVudGVkIEludmVydFJlY3QoKSBhbmQgR2V0UGl4ZWwoKS4KClNhdCBBdWcgMjggMDg6NDA6MjMgMTk5MyAgRXJpYyBZb3VuZ2RhbGUKCgkqIFtpbmNsdWRlL25lZXhlLmhdIFtsb2FkZXIvd2luZS5jXQoJQWRkZWQgY29kZSB0byBoYW5kbGUgcmVsb2NhdGlvbiB0eXBlIDQuCgoJKiBbbG9hZGVyL3NpZ25hbC5oXSBbbG9hZGVyL3dpbmUuY10gW2xvYWRlci9zZWxlY3Rvci5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZG9zIGludGVycnVwdHMuCgpUaHUgMjYgQXVnIDE5OjE1OjAwIDE5OTMgIEVyaWMgWW91bmdkYWxlCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglGaXhlZCBidWcgZGVhbGluZyB3aXRoIGxvYWRpbmcgRExMcy4KClRodSBBdWcgMjYgMTk6MjI6NDAgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgogICAgICAgICogW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2ZvbnQuY10gW3dpbmRvd3MvZGMuY10KICAgICAgICBCZWdpbm5pbmcgb2YgcmVhbCBmb250IHN1cHBvcnQuCgogICAgICAgICogW3dpbmRvd3MvZ3JhcGhpY3MuY10KICAgICAgICBJbXBsZW1lbnRlZCBQYXRCbHQoKS4KCiAgICAgICAgKiBbbWVtb3J5L2dsb2JhbC5jXQogICAgICAgIENvcnJlY3RlZCBhIGJ1ZyB3aXRoIGxpbmtlZCBsaXN0IGhhbmRsaW5nIGluIEdsb2JhbEFsbG9jKCkuCgogICAgICAgICogW29iamVjdHMvYml0bWFwLmNdCiAgICAgICAgQ29ycmVjdGVkIGEgYnVnIGluIEJJVE1BUF9TZWxlY3RPYmplY3QoKS4KClR1ZSBBdWcgMjQgMTk6MjI6NDAgMTk5MyAgRGF2aWQgTWV0Y2FsZmUKCiAgICAgICAgKiBbY29udHJvbHMvQ29tbWFuZCpdIFtjb250cm9scy9MYWJlbCpdIFtjb250cm9sc1tNZW51QnV0dG8qXQoJICBbY29udHJvbHMvU21lTWVudUJ1dHQqXQoJQ2hhbmdlIGNvZGUgdG8gc3VwcG9ydCAmIGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgaW4gbWVudSBpdGVtIHRleHQuCgpUdWUgQXVnIDI0IDE5OjIyOjQwIDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2luY2x1ZGUvZ2RpLmhdIFt3aW5kb3dzL2RjLmNdCglIZWF2aWx5IG1vZGlmaWVkIHRoZSBEQyBzdHJ1Y3R1cmUgZm9yIGJldHRlciBkZXZpY2UtaW5kZXBlbmRlbmNlLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBiaXRtYXAgZGltZW5zaW9ucy4KCgkqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2RjZS5jXQoJSW1wbGVtZW50ZWQgREMgc3RhdGUgc2F2aW5nIGFuZCByZXN0b3JpbmcuCgoJKiBbd2luZG93cy9kYy5jXQoJSW1wbGVtZW50ZWQgUk9QIG1vZGUuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJSW1wbGVtZW50ZWQgRmlsbFJlY3QoKS4KCk1vbiBBdWcgMjMgMjI6MDg6MzQgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFttaXNjL3h0LmNdCglGaXhlZCBidWcgaW4gSW52YWxpZGF0ZVJlY3QoKS4gIFNvbGl0YWlyZSBhdHRlbXB0ZWQgdG8KCWNsZWFyIHdpbmRvdyBiZWZvcmUgaXQgd2FzIHJlYWxpemVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJQmVnYW4gcmV3cml0ZSBvZiBMb2FkQml0bWFwKCkuCgoJKiBbbG9hZGVyL3dpbmUuY10KCUZpeGVkIGNvZGUgd2hpY2ggc2V0IEFyZ3YgYW5kIEFyZ2MgZ2xvYmFsIHZhcmlhYmxlcy4KCgkqIFtsb2FkZXIvc2VsZWN0b3IuY10KCUFkZGVkIGNvZGUgdG8gc2V0IHVwIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCgoJKiBbaW5jbHVkZS9uZWV4ZS5oXQoJRml4ZWQgZXJyb3IgaW4gUFNQIHN0cnVjdHVyZS4KClR1ZSBBdWcgMTcgMjA6NDE6MTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbaW5jbHVkZS9nZGkuaF0gW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIGRldmljZSBjYXBhYmlsaXRpZXMuCgoJKiBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIEVxdWFsUmduKCkgYW5kIENvbWJpbmVSZ24oKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdCglJbXBsZW1lbnRlZCBTYXZlL1Jlc3RvcmVWaXNSZ24oKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglJbXBsZW1lbnRlZCBQYWludFJnbigpIGFuZCBGaWxsUmduKCkuCgoJKiBbd2luZG93cy9tYXBwaW5nLmNdCglJbXBsZW1lbnRlZCBtYXBwaW5nIG1vZGVzLgoKVHVlIEF1ZyAxMCAxNDowNzozOCAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbbWlzYy9yZWN0LmNdCglJbXBsZW1lbnRlZCByZWN0YW5nbGUgQVBJIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9yZWdpb24uY10KCUltcGxlbWVudGVkIHJlZ2lvbnMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJQ29ycmVjdGVkIGEgdHlwbyBpbiBVbnJlZ2lzdGVyQ2xhc3MoKS4KCgkqIFt3aW5kb3dzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2RjLmNdCglJbXBsZW1lbnRlZCBEQyBjbGlwcGluZyBhbmQgdmlzaWJsZSByZWdpb24uCgpUdWUgQXVnIDEwIDIwOjU3OjU2IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbY29udHJvbHMvbWVudS5jXSBbd2luZG93cy93aW4uY10KCVNldE1lbnUoKSwgR2V0TWVudSgpLCBDaGVja01lbnVJdGVtKCkgaW1wbGVtZW50ZWQKClRodSBBdWcgIDUgMjI6MzM6MjIgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXQoJTWFueSBpbXByb3ZlbWVudHMgbWVudXMuICBMb2FkTWVudSgpIHNob3VsZCB3b3JrLgoKV2VkIEF1ZyAgNCAxNDo1NTozNiAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbb2JqZWN0cy9kaWIuY10KICAgICAgICBTdGFydGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBkZXZpY2UtaW5kZXBlbmRlbnQgYml0bWFwcy4KCiAgICAgICAgKiBbb2JqZWN0cy9iaXRtYXAuY10KICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBiaXRtYXAgZGVwdGhzLgoKICAgICAgICAqIFtvYmplY3RzL2JydXNoLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgcGF0dGVybiBicnVzaGVzLgoKICAgICAgICAqIFt3aW5kb3dzL2RjLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCiAgICAgICAgSW1wbGVtZW50ZWQgc29tZSBHREkgZ3JhcGhpY3MgcHJpbWl0aXZlcy4KClR1ZSBBdWcgIDMgMjE6MTY6NDcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXSBbaW5jbHVkZS9tZW51LmhdCglDb2RlIHRvIGxvYWQgY2xhc3MgbWVudXMgZnJvbSBleGVjdXRhYmxlIGZpbGUuCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10KCUZpeGVkIHNwZWNpZmljYXRpb24gb2YgU2VuZE1lc3NhZ2UoKSBhbmQgUG9zdE1lc3NhZ2UuCgpNb24gSnVsIDI2IDIxOjUzOjI0IDE5OTMgIEFsZXhhbmRyZSBKdWxsaWFyZAoKCSogW2lmMTYzMi9jYWxsLlNdCglDb3JyZWN0ZWQgYSBidWcgaW4gS0VSTkVMX0luaXRUYXNrKCkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBhIGxvdCBvZiBjb25zdGFudHMuCgoJKiBbbG9hZGVyL3NlbGVjdG9yLmNdCglDb3JyZWN0ZWQgYSBidWcgaW4gc2VnbWVudCBhbGxvY2F0aW9uIGluIENyZWF0ZVNlbGVjdG9ycygpLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglJbXBsZW1lbnRlZCBTZWxlY3RPYmplY3QoKSBmb3IgYml0bWFwcy4KCgkqIFtvYmplY3RzL2JydXNoLmNdCglJbXBsZW1lbnRlZCBoYXRjaGVkIGJydXNoZXMgYW5kIFNlbGVjdE9iamVjdCgpLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZW1vdmVkIGxpbmtlZCBsaXN0IChub3QgbmVlZGVkKS4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUltcGxlbWVudGVkIHN5c3RlbSBwYWxldHRlIGNyZWF0aW9uIGFuZCBtaXNjLiBwYWxldHRlIEFQSSBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy90aW1lci5jXQoJSW1wbGVtZW50ZWQgdGltZXJzLgoKCSogW3dpbmRvd3MvZGMuY10KCUltcGxlbWVudGVkIG1lbW9yeSBkZXZpY2UgY29udGV4dHMuCgpUdWUgSnVsIDIwIDEwOjM4OjU5IDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgogICAgICAgICogW2Rvcy5jXQoJU3BsaXQgRE9TM0NhbGwoKSBvdXQgb2Yga2VybmVsLmMuICBBZGRlZCBzdXBwb3J0IGZvciBnZXQgZGF0ZQoJYW5kIHRpbWUgZnVuY3Rpb25zLgoKCSogW2NhbGwuU10KCUFkZGVkIGZ1bmN0aW9uIFJldHVybkZyb21SZWdpc3RlckZ1bmMoKSB0byBhbGxvdyBET1MgY2FsbHMKCXRvIHJldHVybiB2YWx1ZXMgaW4gcmVnaXN0ZXJzLgoKCSogW3JlZ2Z1bmMuaF0KCU1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzIHNhdmVkIG9uIHN0YWNrLgoKVHVlIEp1bCAyMCAxMDozODo1OSAxOTkzICBBbGV4YW5kcmUgSnVsbGlhcmQKCiAgICAgICAgKiBbd2luLmNdCiAgICAgICAgQ29ycmVjdGVkIGFsbG9jYXRpb24gb2YgdGhlIFdNX0NSRUFURSBkYXRhIHN0cnVjdHVyZS4KCiAgICAgICAgKiBbZGNlLmNdIFtkY2UuaF0KICAgICAgICBJbXBsZW1lbnRlZCBEQ0UgaGFuZGxpbmcuCgogICAgICAgICogW2JpdG1hcC5jXSBbYnJ1c2guY10gW2RjLmNdIFtmb250LmNdIFtnZGkuaF0gW2dkaS5zcGVjXSAKICAgICAgICAgIFtnZGlvYmouY10gW3BhbGV0dGUuY10gW3Blbi5jXQogICAgICAgIEltcGxlbWVudGVkIHRoZSBHREkgb2JqZWN0cyBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsbG9jYXRpb24uCgogICAgICAgICogW3dpbmRvd3MuaF0KICAgICAgICBBZGRlZCBzZXZlcmFsIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cyBmb3IgR0RJIG9iamVjdHMuCgpNb24gSnVsIDE5IDEyOjUxOjEwIDE5OTMgIEJvYiBBbXN0YWR0ICAoYm9iIGF0IHBvb2gpCgoJKiBbbGR0bGliLmNdCglNb2RpZmllZCBzeXN0ZW0gY2FsbHMgdG8gbWF0Y2ggTGludXMnIG5ldyBpbnRlcmZhY2UgZm9yCgl0aGUgTERUIG1vZGlmaWNhdGlvbi4KCgkqIFt3aW4uY10KCUZpeGVkIGJ1ZyB3aXRoIFdNX0NSRUFURSBtZXNzYWdlLgoKCSogW2hlYXAuY10gW2tlcm5lbC5zcGVjXQoJQ29tcGxldGVkIGxvY2FsIGhlYXAgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCgoJKiBbZ2xvYmFsLmNdCglDcmVhdGVkIGZ1bmN0aW9uIEdsb2JhbFF1aWNrQWxsb2MoKSBmb3IgZWFzeSBhbGxvY2F0aW9uIGZyb20gRExMcwoKVHVlIEp1bCAxMyAyMDozMTozMSAxOTkzICBCb2IgQW1zdGFkdCAgKGJvYiBhdCBwb29oKQoKCSogW2dsb2JhbC5jXQoJQ29tcGxldGVkIGdsb2JhbCBtZW1vcnkgcG9vbCBBUEkKClN1biBKdWwgMTEgMTY6NTk6NTIgMTk5MyAgQWxleGFuZHJlIEp1bGxpYXJkCgoJKiBbbWVzc2FnZS5jXSBbdXNlci5jXSBbdXNlci5zcGVjXSBbd2luZG93cy5oXQoJQWRkZWQgZW11bGF0aW9uIG9mIFdpbmRvd3MgbWVzc2FnZSBxdWV1ZS4KClRodSBKdWwgIDggMTk6Mjk6MjcgMTk5MyAgQm9iIEFtc3RhZHQgIChib2IgYXQgcG9vaCkKCgkqIFtidWlsZC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbY2FsbGJhY2suY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2R1bXAuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2dsb2JhbC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaGVhcC5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBba2VybmVsLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtsZHQuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2xkdGxpYi5jXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbcmVsYXkuY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW3Jlc291cmNlLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGlhcmQKCSogW3NlbGVjdG9yLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCgkqIFt1c2VyLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFt3aW5lLmNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlIGFuZAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFt3aW50Y2wuY10gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAoJdXBkYXRlcyBieSBQZXRlciBNYWNEb25hbGQgYW5kIEFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbY2FsbGJhY2suaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2RsbHMuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW2hlYXAuaF0gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW25lZXhlLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0CgkqIFtwcm90b3R5cGVzLmhdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJRXJpYyBZb3VuZ2RhbGUKCSogW3NlZ21lbS5oXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdGtJbnQuaF0gT3JpZ2luYWwgYnkgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCgkqIFt3aW5kb3dzLmhdIE9yaWdpbmFsIGJ5IFBldGVyIE1hY0RvbmFsZCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZCBhbmQgQm9iIEFtc3RhZHQKCSogW3dpbmUuaF0gT3JpZ2luYWwgYnkgRXJpYyBZb3VuZ2RhbGUKCSogW2tlcm5lbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSAKCUFsZXhhbmRyZSBKdWxsaWFyZAoJKiBbZ2RpLnNwZWNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IAoJQWxleGFuZHJlIEp1bGxpYXJkCgkqIFtzaGVsbC5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdW5peGxpYi5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbdXNlci5zcGVjXSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdCwgdXBkYXRlcyBieSBBbGV4YW5kcmUgSnVsbGlhcmQKCSogW3dpbjg3ZW0uc3BlY10gT3JpZ2luYWwgYnkgQm9iIEFtc3RhZHQKCSogW1dpbmRvd3MudGNsXSBPcmlnaW5hbCBieSBQZXRlciBNYWNEb25hbGQsIHVwZGF0ZXMgYnkgCglBbGV4YW5kcmUgSnVsbGlhcmQKCSogW2J1aWxkLXNwZWMudHh0XSBPcmlnaW5hbCBieSBCb2IgQW1zdGFkdAoJKiBbaWYxNjMyLlNdIE9yaWdpbmFsIGJ5IEJvYiBBbXN0YWR0LCB1cGRhdGVzIGJ5IEVyaWMgWW91bmdkYWxlCg==