IyBjb25maWd1cmUgb3B0aW9ucwojCiMgU29tZSBjYW4gYmUgb3ZlcnJpZGVuIG9uIHJwbWJ1aWxkIGNvbW1hbmRsaW5lIHdpdGg6CiMgcnBtYnVpbGQgLS1kZWZpbmUgJ3ZhcmlhYmxlIHZhbHVlJwojCgoleyE/d2l0aF9zbm1wOgkJJWRlZmluZSAJd2l0aF9zbm1wCTEgfQoleyE/d2l0aF92dHlzaDoJCSVkZWZpbmUJCXdpdGhfdnR5c2gJMSB9CiV7IT93aXRoX29zcGZfdGU6CSVkZWZpbmUJCXdpdGhfb3NwZl90ZQkxIH0KJXshP3dpdGhfbnNzYToJCSVkZWZpbmUJCXdpdGhfbnNzYQkxIH0KJXshP3dpdGhfb3BhcXVlX2xzYToJJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEgfQoleyE/d2l0aF90Y3BfemVicmE6CSVkZWZpbmUJCXdpdGhfdGNwX3plYnJhCTAgfQoleyE/d2l0aF92dHlzaDoJCSVkZWZpbmUJCXdpdGhfdnR5c2gJMSB9CiV7IT93aXRoX3BhbToJCSVkZWZpbmUJCXdpdGhfcGFtCTEgfQoleyE/d2l0aF9pcHY2OgkJJWRlZmluZQkJd2l0aF9pcHY2CTEgfQoleyE/d2l0aF9vc3BmY2xpZW50OgklZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMSB9CiV7IT93aXRoX29zcGZhcGk6CSVkZWZpbmUJCXdpdGhfb3NwZmFwaQkxIH0KJXshP3dpdGhfaXJkcDoJCSVkZWZpbmUJCXdpdGhfaXJkcAkxIH0KJXshP3dpdGhfaXNpc2Q6CQklZGVmaW5lCQl3aXRoX2lzaXNkCTEgfQoleyE/d2l0aF9zaGFyZWQ6CSVkZWZpbmUJCXdpdGhfc2hhcmVkCTEgfQoleyE/d2l0aF9tdWx0aXBhdGg6CSVkZWZpbmUJCXdpdGhfbXVsdGlwYXRoCTY0IH0KJXshP3F1YWdnYV91c2VyOgklZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EgfQoleyE/dnR5X2dyb3VwOgkJJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eSB9CgojIHBhdGggZGVmaW5lcwolZGVmaW5lCQlfc3lzY29uZmRpcgkvZXRjL3F1YWdnYQolZGVmaW5lCQl6ZWJfc3JjCQkle19idWlsZGRpcn0vJXtuYW1lfS0le3ZlcnNpb259CiVkZWZpbmUJCXplYl9yaF9zcmMJJXt6ZWJfc3JjfS9yZWRoYXQKJWRlZmluZQkJemViX2RvY3MJJXt6ZWJfc3JjfS9kb2MKCiMgZGVmaW5lcyBmb3IgY29uZmlndXJlCiVkZWZpbmUJCV9saWJleGVjZGlyCSV7X2V4ZWNfcHJlZml4fS9saWJleGVjL3F1YWdnYQolZGVmaW5lCQlfbGliZGlyCQkle19leGVjX3ByZWZpeH0vJXtfbGlifS9xdWFnZ2EKJWRlZmluZQkJX2luY2x1ZGVkaXIJJXtfcHJlZml4fS9pbmNsdWRlCiVkZWZpbmUJCV9sb2NhbHN0YXRlZGlyCS92YXIvcnVuL3F1YWdnYQoKIyBtaXNjIGludGVybmFsIGRlZmluZXMKJXshP3F1YWdnYV91aWQ6CQklZGVmaW5lICAgICAgICAgcXVhZ2dhX3VpZCAgICAgIDkyIH0KJXshP3F1YWdnYV9naWQ6CQklZGVmaW5lICAgICAgICAgcXVhZ2dhX2dpZCAgICAgIDkyIH0KJWRlZmluZQkJZGFlbW9uX2xpc3QJemVicmEgcmlwZCBvc3BmZCBiZ3BkCgolaWYgJXt3aXRoX2lwdjZ9CiVkZWZpbmUJCWRhZW1vbnY2X2xpc3QJcmlwbmdkIG9zcGY2ZAolZWxzZQolZGVmaW5lCQlkYWVtb252Nl9saXN0CSIiCiVlbmRpZgoKJWlmICV7d2l0aF9pc2lzZH0KJWRlZmluZQkJZGFlbW9uX290aGVyCWlzaXNkCiVlbHNlCiVkZWZpbmUJCWRhZW1vbl9vdGhlcgkiIgolZW5kaWYKCiVkZWZpbmUJCWFsbF9kYWVtb25zCSV7ZGFlbW9uX2xpc3R9ICV7ZGFlbW9udjZfbGlzdH0gJXtkYWVtb25fb3RoZXJ9IHdhdGNocXVhZ2dhCgojIGFsbG93IGJ1aWxkIGRpciB0byBiZSBrZXB0CiV7IT9rZWVwX2J1aWxkOgkJJWRlZmluZQkJa2VlcF9idWlsZAkwIH0KClN1bW1hcnk6IFJvdXRpbmcgZGFlbW9uCk5hbWU6CQlxdWFnZ2EKVmVyc2lvbjoJQFZFUlNJT05AClJlbGVhc2U6CUBDT05GREFURUAwMQpMaWNlbnNlOglHUEwKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zClNvdXJjZTA6CWh0dHA6Ly93d3cucXVhZ2dhLm5ldC9zbmFwc2hvdHMvY3ZzLyV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuZ3oKVVJMOgkJaHR0cDovL3d3dy5xdWFnZ2EubmV0CiVpZiAle3dpdGhfc25tcH0KQnVpbGRSZXF1aXJlczoJbmV0LXNubXAtZGV2ZWwKUHJlcmVxOgkJbmV0LXNubXAKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CkJ1aWxkUmVxdWlyZXM6CXJlYWRsaW5lIHJlYWRsaW5lLWRldmVsIG5jdXJzZXMgbmN1cnNlcy1kZXZlbApQcmVyZXE6CQlyZWFkbGluZSBuY3Vyc2VzCiVlbmRpZgpCdWlsZFJlcXVpcmVzOgl0ZXhpbmZvIHRldGV4IGF1dG9jb25mIHBhbS1kZXZlbCBwYXRjaCBsaWJjYXAtZGV2ZWwKIyBJbml0c2NyaXB0cyA+IDUuNjAgaXMgcmVxdWlyZWQgZm9yIElQdjYgc3VwcG9ydApQcmVyZXE6CQlpbml0c2NyaXB0cyA+PSA1LjYwClByZXJlcToJCW5jdXJzZXMgcmVhZGxpbmUgcGFtClByZXJlcToJCS9zYmluL2luc3RhbGwtaW5mbwpQcm92aWRlczoJcm91dGluZ2RhZW1vbgpCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290Ck9ic29sZXRlczoJYmlyZCBnYXRlZCBtcnQgemVicmEKCiVkZXNjcmlwdGlvbgpRdWFnZ2EgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgbWFuYWdlcyBUQ1AvSVAgYmFzZWQgcm91dGluZwpwcm90b2NvbC4gSXQgdGFrZXMgbXVsdGktc2VydmVyIGFuZCBtdWx0aS10aHJlYWQgYXBwcm9hY2ggdG8gcmVzb2x2ZQp0aGUgY3VycmVudCBjb21wbGV4aXR5IG9mIHRoZSBJbnRlcm5ldC4KClF1YWdnYSBzdXBwb3J0cyBCR1A0LCBCR1A0KywgT1NQRnYyLCBPU1BGdjMsIFJJUHYxLCBSSVB2MiwgYW5kIFJJUG5nLgoKUXVhZ2dhIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBSb3V0ZSBTZXJ2ZXIgYW5kIGEgUm91dGUgUmVmbGVjdG9yLiBJdCBpcwpub3QgYSB0b29sa2l0LCBpdCBwcm92aWRlcyBmdWxsIHJvdXRpbmcgcG93ZXIgdW5kZXIgYSBuZXcgYXJjaGl0ZWN0dXJlLgpRdWFnZ2EgYnkgZGVzaWduIGhhcyBhIHByb2Nlc3MgZm9yIGVhY2ggcHJvdG9jb2wuCgpRdWFnZ2EgaXMgYSBmb3JrIG9mIEdOVSBaZWJyYS4KCiVwYWNrYWdlIGNvbnRyaWIKU3VtbWFyeTogY29udHJpYiB0b29scyBmb3IgcXVhZ2dhCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGNvbnRyaWIKQ29udHJpYnV0ZWQvM3JkIHBhcnR5IHRvb2xzIHdoaWNoIG1heSBiZSBvZiB1c2Ugd2l0aCBxdWFnZ2EuCgolcGFja2FnZSBkZXZlbApTdW1tYXJ5OiBIZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBmb3IgcXVhZ2dhIGRldmVsb3BtZW50Ckdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGRldmVsClRoZSBxdWFnZ2EtZGV2ZWwgcGFja2FnZSBjb250YWlucyB0aGUgaGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgbmVjY2Vzc2FyeSBmb3IKZGV2ZWxvcGluZyBPU1BGLUFQSSBhbmQgcXVhZ2dhIGFwcGxpY2F0aW9ucy4KCiVwcmVwCiVzZXR1cCAgLXEKCiVidWlsZAoKIyBGb3Igc3RhbmRhcmQgZ2NjIHZlcmJvc2l0eSwgdW5jb21tZW50IHRoZXNlIGxpbmVzOgojQ0ZMQUdTPSIle29wdGZsYWdzfSAtV2FsbCAtV3NpZ24tY29tcGFyZSAtV3BvaW50ZXItYXJpdGgiCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV2JhZC1mdW5jdGlvbi1jYXN0IC1Xd3JpdGUtc3RyaW5ncyIKCiMgRm9yIHVsdHJhIGdjYyB2ZXJib3NpdHksIHVuY29tbWVudCB0aGVzZSBsaW5lcyBhbHNvOgojQ0ZMQUdTPSIke0NGTEFHU30gLVcgLVdjYXN0LXF1YWwgLVdzdHJpY3QtcHJvdG90eXBlcyIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLW5vcmV0dXJuIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVd1bnJlYWNoYWJsZS1jb2RlIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdwYWNrZWQgLVdwYWRkZWQiCgolY29uZmlndXJlIFwKJWlmICEle3dpdGhfc2hhcmVkfQoJLS1kaXNhYmxlLXNoYXJlZCBcCiVlbmRpZgolaWYgJXt3aXRoX2lwdjZ9CgktLWVuYWJsZS1pcHY2IFwKJWVuZGlmCiVpZiAle3dpdGhfc25tcH0KCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV7d2l0aF9tdWx0aXBhdGh9CgktLWVuYWJsZS1tdWx0aXBhdGg9JXt3aXRoX211bHRpcGF0aH0gXAolZW5kaWYKJWlmICV7d2l0aF90Y3BfemVicmF9CgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV7d2l0aF9uc3NhfQoJLS1lbmFibGUtbnNzYSBcCiVlbmRpZgolaWYgJXt3aXRoX29wYXF1ZV9sc2F9CgktLWVuYWJsZS1vcGFxdWUtbHNhIFwKJWVuZGlmCiVpZiAle3dpdGhfb3NwZl90ZX0KCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KCS0tZW5hYmxlLXZ0eXNoIFwKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmNsaWVudH0KCS0tZW5hYmxlLW9zcGZjbGllbnQ9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZjbGllbnQ9bm9cCiVlbmRpZgolaWYgJXt3aXRoX29zcGZhcGl9CgktLWVuYWJsZS1vc3BmYXBpPXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmYXBpPW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfaXJkcH0KCS0tZW5hYmxlLWlyZHA9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLWlyZHA9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KCS0tZW5hYmxlLWlzaXNkIFwKJWVsc2UKCS0tZGlzYWJsZS1pc2lzZCBcCiVlbmRpZgolaWYgJXt3aXRoX3BhbX0KCS0td2l0aC1saWJwYW0gXAolZW5kaWYKJWlmICVxdWFnZ2FfdXNlcgoJLS1lbmFibGUtdXNlcj0lcXVhZ2dhX3VzZXIgXAoJLS1lbmFibGUtZ3JvdXA9JXF1YWdnYV91c2VyIFwKJWVuZGlmCiVpZiAldnR5X2dyb3VwCgktLWVuYWJsZS12dHktZ3JvdXA9JXZ0eV9ncm91cCBcCiVlbmRpZgotLWVuYWJsZS1uZXRsaW5rIC0tZW5hYmxlLWdjYy1yZHluYW1pYwoKbWFrZSAlez9fc21wX21mbGFnc30gTUFLRUlORk89Im1ha2VpbmZvIC0tbm8tc3BsaXQiCgpwdXNoZCBkb2MKbWFrZWluZm8gLS1uby1zcGxpdCAtLWh0bWwgLW8gcXVhZ2dhLmh0bWwgcXVhZ2dhLnRleGkKcG9wZAoKJWluc3RhbGwKcm0gLXJmICRSUE1fQlVJTERfUk9PVAoKaW5zdGFsbCAtZCAkUlBNX0JVSUxEX1JPT1QvZXRjL3tyYy5kL2luaXQuZCxzeXNjb25maWcsbG9ncm90YXRlLmQscGFtLmR9IFwKCSRSUE1fQlVJTERfUk9PVC92YXIvbG9nL3F1YWdnYSAkUlBNX0JVSUxEX1JPT1Qle19pbmZvZGlyfQoKbWFrZSBpbnN0YWxsIFwKCURFU1RESVI9JFJQTV9CVUlMRF9ST09UCgojIFJlbW92ZSB0aGlzIGZpbGUsIGFzIGl0IGlzIHVuaW5zdGFsbGVkIGFuZCBjYXVzZXMgZXJyb3JzIHdoZW4gYnVpbGRpbmcgb24gUkg5CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvdXNyL3NoYXJlL2luZm8vZGlyCgojIGluc3RhbGwgZXRjIHNvdXJjZXMKZm9yIGRhZW1vbiBpbiAle2FsbF9kYWVtb25zfSA7IGRvCglpZiBbIHgiJHtkYWVtb259IiAhPSB4IiIgXSA7IHRoZW4KCQlpbnN0YWxsICV7emViX3JoX3NyY30vJHtkYWVtb259LmluaXQgXAoJCQkkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufQoJZmkKZG9uZQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnBhbSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnN5c2NvbmZpZyBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKaW5zdGFsbCAtZCAtbTc1MCAgJFJQTV9CVUlMRF9ST09UL3Zhci9ydW4vcXVhZ2dhCgolcHJlCiMgYWRkIHZ0eV9ncm91cAolaWYgJXZ0eV9ncm91cApncm91cGFkZCAtciAldnR5X2dyb3VwIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgojIGFkZCBxdWFnZ2EgdXNlciBhbmQgZ3JvdXAKJWlmICVxdWFnZ2FfdXNlcgovdXNyL3NiaW4vZ3JvdXBhZGQgLWcgJXF1YWdnYV9naWQgcXVhZ2dhIDI+IC9kZXYvbnVsbCB8fCA6Ci91c3Ivc2Jpbi91c2VyYWRkICAtdSAlcXVhZ2dhX3VpZCAtZyAlcXVhZ2dhX2dpZCBcCiAtTSAtciAtcyAvc2Jpbi9ub2xvZ2luIC1jICJRdWFnZ2Egcm91dGluZyBzdWl0ZSIgXAogLWQgJV9sb2NhbHN0YXRlZGlyICVxdWFnZ2FfdXNlciAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgXAogICAgICAhICVfX3NlZCAtZSAncy8jLiokLy8nIC9ldGMvc2VydmljZXMgfCAlX19ncmVwIC13cSAkMSA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcG5nZCAgIDI2MDMvdGNwICJSSVBuZ2QgdnR5IgolZW5kaWYKemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmZCAgICAyNjA0L3RjcCAiT1NQRmQgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGJncGQgICAgIDI2MDUvdGNwICJCR1BkIHZ0eSIKJWlmICV7d2l0aF9pcHY2fQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGY2ZCAgIDI2MDYvdGNwICJPU1BGNmQgdnR5IgolZW5kaWYKJWlmICV7d2l0aF9vc3BmYXBpfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgaXNpc2QgICAgMjYwOC90Y3AgIklTSVNkIHZ0eSIKJWVuZGlmCgpmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkvc2Jpbi9jaGtjb25maWcgLS1hZGQgJHtkYWVtb259CmRvbmUKCi9zYmluL2luc3RhbGwtaW5mbyAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiMgQ3JlYXRlIGR1bW15IGZpbGVzIGlmIHRoZXkgZG9uJ3QgZXhpc3Qgc28gYmFzaWMgZnVuY3Rpb25zIGNhbiBiZSB1c2VkLgppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZiBdOyB0aGVuCgllY2hvICJob3N0bmFtZSBgaG9zdG5hbWVgIiA+ICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCmZpCmlmIFsgISAtZSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mIF07IHRoZW4KCXRvdWNoICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKCWNobW9kIDY0MCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCmZpCgolcG9zdHVuCmlmIFsgIiQxIiAtZ2UgMSBdOyB0aGVuCgkjIEZpbmQgb3V0IHdoaWNoIGRhZW1vbnMgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJaWYgWyAtZiAvdmFyL2xvY2svc3Vic3lzLyRkYWVtb24gXTsgdGhlbgoJCQlldmFsIHJlc3RhcnRfJGRhZW1vbj15ZXMKCQllbHNlCgkJCWV2YWwgcmVzdGFydF8kZGFlbW9uPW5vCgkJZmkKCWRvbmUKCSMgUmVuYW1lIHJlc3RhcnQgZmxhZ3MgZm9yIGRhZW1vbnMgaGFuZGxlZCBzcGVjaWFsbHkuCglydW5uaW5nX3plYnJhPSIkcmVzdGFydF96ZWJyYSIKCXJlc3RhcnRfemVicmE9bm8KCXJ1bm5pbmdfd2F0Y2hxdWFnZ2E9IiRyZXN0YXJ0X3dhdGNocXVhZ2dhIgoJcmVzdGFydF93YXRjaHF1YWdnYT1ubwoJIyBTdG9wIHdhdGNocXVhZ2dhIGZpcnN0LgoJWyAiJHJ1bm5pbmdfd2F0Y2hxdWFnZ2EiID0geWVzIF0gJiYgXAoJCS9ldGMvcmMuZC9pbml0LmQvd2F0Y2hxdWFnZ2Egc3RvcCA+L2Rldi9udWxsIDI+JjEKCSMgU3RvcCBhbGwgZGFlbW9ucyBvdGhlciB0aGFuIHplYnJhIGFuZCB3YXRjaHF1YWdnYS4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQlldmFsIHJlc3RhcnQ9XCRyZXN0YXJ0XyR7ZGFlbW9ufQoJCVsgIiRyZXN0YXJ0IiA9IHllcyBdICYmIFwKCQkJL2V0Yy9yYy5kL2luaXQuZC8kZGFlbW9uIHN0b3AgPi9kZXYvbnVsbCAyPiYxCglkb25lCgkjIFJlc3RhcnQgemVicmEuCglbICIkcnVubmluZ196ZWJyYSIgPSB5ZXMgXSAmJiBcCgkJL2V0Yy9yYy5kL2luaXQuZC96ZWJyYSByZXN0YXJ0ID4vZGV2L251bGwgMj4mMQoJIyBTdGFydCBhbGwgZGFlbW9ucyBvdGhlciB0aGFuIHplYnJhIGFuZCB3YXRjaHF1YWdnYS4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQlldmFsIHJlc3RhcnQ9XCRyZXN0YXJ0XyR7ZGFlbW9ufQoJCVsgIiRyZXN0YXJ0IiA9IHllcyBdICYmIFwKCQkJL2V0Yy9yYy5kL2luaXQuZC8kZGFlbW9uIHN0YXJ0ID4vZGV2L251bGwgMj4mMQoJZG9uZQoJIyBTdGFydCB3YXRjaHF1YWdnYSBsYXN0LgoJIyBBdm9pZCBwb3N0dW4gc2NyaXB0bGV0IGVycm9yIGlmIHdhdGNocXVhZ2dhIGlzIG5vdCBydW5uaW5nLiAKCVsgIiRydW5uaW5nX3dhdGNocXVhZ2dhIiA9IHllcyBdICYmIFwKCQkvZXRjL3JjLmQvaW5pdC5kL3dhdGNocXVhZ2dhIHN0YXJ0ID4vZGV2L251bGwgMj4mMSB8fCA6CmZpCgolcHJldW4KaWYgWyAiJDEiID0gIjAiIF07IHRoZW4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQkvZXRjL3JjLmQvaW5pdC5kLyR7ZGFlbW9ufSBzdG9wICA+L2Rldi9udWxsIDI+JjEKCQkvc2Jpbi9jaGtjb25maWcgLS1kZWwgJHtkYWVtb259Cglkb25lCgkvc2Jpbi9pbnN0YWxsLWluZm8gLS1kZWxldGUgJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCmZpCgolY2xlYW4KJWlmICEle2tlZXBfYnVpbGR9CnJtIC1yZiAkUlBNX0JVSUxEX1JPT1QKJWVuZGlmCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3F1YWdnYS5odG1sCiVkb2MgZG9jL21wbHMKJWRvYyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBSRVBPUlRJTkctQlVHUyBTRVJWSUNFUyBUT0RPCiVpZiAle3F1YWdnYV91c2VyfQolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL2xvZy9xdWFnZ2EgCiVkaXIgJWF0dHIoNzUxLCVxdWFnZ2FfdXNlciwlcXVhZ2dhX3VzZXIpIC92YXIvcnVuL3F1YWdnYQolZWxzZQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpICV7X3N5c2NvbmZkaXJ9CiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9sb2cvcXVhZ2dhCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgL3Vzci9zaGFyZS9pbmZvCiVkaXIgJWF0dHIoNzUwLHJvb3Qscm9vdCkgL3Zhci9ydW4vcXVhZ2dhCiVlbmRpZgolaWYgJXt2dHlfZ3JvdXB9CiVhdHRyKDc1MCwlcXVhZ2dhX3VzZXIsJXZ0eV9ncm91cCkgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZi5zYW1wbGUKJWVuZGlmCiV7X2luZm9kaXJ9LyppbmZvKgole19tYW5kaXJ9L21hbiovKgole19zYmluZGlyfS96ZWJyYQole19zYmluZGlyfS9vc3BmZAole19zYmluZGlyfS9yaXBkCiV7X3NiaW5kaXJ9L2JncGQKJXtfc2JpbmRpcn0vd2F0Y2hxdWFnZ2EKJWlmICV7d2l0aF9pcHY2fQole19zYmluZGlyfS9yaXBuZ2QKJXtfc2JpbmRpcn0vb3NwZjZkCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQole19zYmluZGlyfS9pc2lzZAolZW5kaWYKJWRpciAlYXR0cig3NTUscm9vdCxyb290KSAle19saWJkaXJ9CiVpZiAle3dpdGhfc2hhcmVkfQole19saWJkaXJ9L2xpYiouc28KJXtfbGliZGlyfS9saWIqLnNvLioKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CiV7X2JpbmRpcn0vKgolZW5kaWYKJWNvbmZpZyAvZXRjL3F1YWdnYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9zeXNjb25maWcvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3BhbS5kL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgJWF0dHIoNjQwLHJvb3Qscm9vdCkgL2V0Yy9sb2dyb3RhdGUuZC8qCgolZmlsZXMgY29udHJpYgolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyB0b29scwoKJWZpbGVzIGRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290KQolaWYgJXt3aXRoX29zcGZjbGllbnR9CiV7X3NiaW5kaXJ9L29zcGZjbGllbnQKJWVuZGlmCiV7X2xpYmRpcn0vKi5hCiV7X2xpYmRpcn0vKi5sYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0KJXtfaW5jbHVkZWRpcn0vJW5hbWUvKi5oCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfS9vc3BmZAole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmZC8qLmgKJWlmICV7d2l0aF9vc3BmYXBpfQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0vb3NwZmFwaQole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmYXBpLyouaAolZW5kaWYKCiVjaGFuZ2Vsb2cKJWNoYW5nZWxvZwoqIFdlZCBKYW4gMTIgMjAwNSBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSBvbiBwYWNrYWdlIHVwZ3JhZGUsIGltcGxlbWVudCBjYXJlZnVsLCBwaGFzZWQgcmVzdGFydCBsb2dpYwotIHVzZSBnY2MgLXJkeW5hbWljIGZsYWcgd2hlbiBsaW5raW5nIGZvciBiZXR0ZXIgYmFja3RyYWNlcwoKKiBXZWQgRGVjIDIyIDIwMDQgQW5kcmV3IEouIFNjaG9yciA8YWpzY2hvcnJAYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0gZGFlbW9udjZfbGlzdCBzaG91bGQgY29udGFpbiBvbmx5IElQdjYgZGFlbW9ucwoKKiBXZWQgRGVjIDIyIDIwMDQgQW5kcmV3IEouIFNjaG9yciA8YWpzY2hvcnJAYWx1bW5pLnByaW5jZXRvbi5lZHU+Ci0gd2F0Y2hxdWFnZ2EgYWRkZWQKLSBvbiB1cGdyYWRlLCBhbGwgZGFlbW9ucyBzaG91bGQgYmUgY29uZHJlc3RhcnQnZWQKLSBvbiByZW1vdmFsLCBhbGwgZGFlbW9ucyBzaG91bGQgYmUgc3RvcHBlZAoKKiBNb24gTm92IDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVzZSBtYWtlaW5mbyAtLWh0bWwgdG8gZ2VuZXJhdGUgcXVhZ2dhLmh0bWwKCiogU3VuIE5vdiAwNyAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggd2l0aF9pcHY2IHNldCB0byAwIGJ1aWxkCgoqIFNhdCBPY3QgMjMgMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gVXBkYXRlIHRvIDAuOTcuMgoKKiBTYXQgT2N0IDIzIDIwMDQgQW5kcmV3IEouIFNjaG9yciA8YXNjaG9yckB0ZWxlbWV0cnktaW52ZXN0bWVudHMuY29tPgotIE1ha2UgZGlyZWN0b3JpZXMgYmUgb3duZWQgYnkgdGhlIHBhY2thZ2VzIGNvbmNlcm5lZAotIFVwZGF0ZSBsb2dyb3RhdGUgc2NyaXB0cyB0byB1c2UgY29ycmVjdCBwYXRoIHRvIGtpbGxhbGwgYW5kIHVzZSBwaWQgZmlsZXMKCiogRnJpIE9jdCAwOCAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBVcGRhdGUgdG8gMC45Ny4wCgoqIFdlZCBTZXAgMTUgMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gYnVpbGQgc25tcCBzdXBwb3J0IGJ5IGRlZmF1bHQKLSBidWlsZCBpcmRwIHN1cHBvcnQKLSBidWlsZCB3aXRoIHNoYXJlZCBsaWJzCi0gZGV2ZWwgc3VicGFja2FnZSBmb3IgYXJjaGl2ZXMgYW5kIGhlYWRlcnMKCiogVGh1IEphbiAwOCAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGVkIHN5c2NvbmZpZyBmaWxlcyB0byBzcGVjaWZ5IGxvY2FsIGRpcgotIGFkZGVkIG9zcGZfZHVtcC5jIGNyYXNoIHF1aWNrIGZpeCBwYXRjaAotIGFkZGVkIG9zcGZkIHBlcnNpc3RlbnQgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcGF0Y2gKCiogVHVlIERlYyAzMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBzeW5jIHRvIENWUwotIGludGVncmF0ZSBSSCBzeXNjb25maWcgcGF0Y2ggdG8gc3BlY2lmeSBkYWVtb24gb3B0aW9ucyAoUkgpCi0gZGVmYXVsdCB0byBoYXZlIHZ0eSBsaXN0ZW4gb25seSB0byAxMjcuMSAoUkgpCi0gYWRkIHVzZXIgd2l0aCBmaXhlZCBVSUQvR0lEIChSSCkKLSBjcmVhdGUgdXNlciB3aXRoIHNoZWxsIC9zYmluL25vbG9naW4gcmF0aGVyIHRoYW4gL2Jpbi9mYWxzZSAoUkgpCi0gc3RvcCBkYWVtb25zIG9uIHVuaW5zdGFsbCAoUkgpCi0gZGVsZXRlIGluZm8gZmlsZSBvbiAlcHJldW4sIG5vdCAlcG9zdHVuIHRvIGF2b2lkIGRlbGV0aW9uIG9uIHVwZ3JhZGUuIChSSCkKLSBpc2lzZCBhZGRlZAotIGNsZWFudXAgdGFza3MgY2FycmllZCBvdXQgZm9yIGV2ZXJ5IGRhZW1vbgoKKiBTdW4gTm92IDIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IC1kZXZlbCBwYWNrYWdlIHRvIGluY2x1ZGUgYWxsIGZpbGVzCi0gU3luYyB0byAwLjk2LjQKCiogVHVlIEF1ZyAxMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBSZW5hbWVkIHRvIFF1YWdnYQotIFN5bmMgdG8gUXVhZ2dhIHJlbGVhc2UgMC45NgoKKiBUdWUgTWFyIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHplYnJhIHByaXZpbGVnZXMgc3VwcG9ydAoKKiBNb24gTWFyIDE4IDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCBtZW0gbGVhayBpbiAnc2hvdyB0aHJlYWQgY3B1JwotIFJhbHBoIEtlbGxlcidzIE9TUEYtQVBJCi0gQW1pcjogRml4IGNvbmZpZ3VyZS5hYyBmb3IgbmV0LXNubXAKCiogU2F0IE1hciAxIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIG9zcGZkIElPUyBwcmVmaXggdG8gaW50ZXJmYWNlIG1hdGNoaW5nIGZvciAnbmV0d29yaycgc3RhdGVtZW50Ci0gdGVtcG9yYXJ5IGZpeCBmb3IgUHRQIGFuZCBJUHY2Ci0gc3luYyB0byB6ZWJyYS5vcmcgQ1ZTCgoqIE1vbiBKYW4gMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gdXBkYXRlIHRvIGxhdGVzdCBjdnMKLSBZb24ncyAic2hvdyB0aHJlYWQgY3B1IiBwYXRjaCAtIDE3MjE3Ci0gd2FsayB1cCB0cmVlIC0gMTcyMTgKLSBvc3BmZCBOU1NBIGZpeGVzIC0gMTY2ODEKLSBvc3BmZCBuc20gZml4ZXMgLSAxNjgyNAotIG9zcGZkIE9MU0EgZml4ZXMgYW5kIG5ldyBmZWF0dXJlIC0gMTY4MjMgCi0gS0FNRSBhbmQgaWZpbmRleCBmaXhlcyAtIDE2NTI1Ci0gc3BlYyBmaWxlIGNoYW5nZXMgdG8gYWxsb3cgcmVkaGF0IGZpbGVzIHRvIGJlIGluIHRyZWUKCiogU2F0IERlYyAyOCAyMDAyIEFsZXhhbmRlciBIb29nZXJodWlzIDxhbGV4aEBpaGF0ZW50LmNvbT4KLSBBZGRlZCBjb25kaXRpb25hbHMgZm9yIGJ1aWxkaW5nIHdpdGgob3V0KSBJUHY2LCB2dHlzaCwgUklQLCBCR1AKLSBGaXhlZCB1cCBzb21lIGJ1aWxkIHJlcXVpcmVtZW50cyAocGF0Y2gpCi0gQWRkZWQgY29uZGl0aW9uYWwgYnVpbGQgcmVxdWlyZW1lbnRzIGZvciB2dHlzaCAvIHNubXAKLSBBZGRlZCBjb25kaXRpb25hbCB0byAlZmlsZXMgZm9yICVfYmluZGlyIGRlcGVuZGluZyBvbiB2dHlzaAoKKiBNb24gTm92IDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCBHcmVnIFRyb3hlbCdzIG1kNSBidWZmZXIgY29weS9kdXAgZml4Ci0gYWRkIFJJUHYxIGZpeAotIGFkZCBGcmFuaydzIG11bHRpY2FzdCBmbGFnIGZpeAoKKiBXZWQgT2N0IDA5IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIHRpbWVzdGFtcGVkIGNyeXB0X3NlcW51bSBwYXRjaAotIG9pLT5vbl93cml0ZV9xIGZpeAoKKiBNb24gU2VwIDMwIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCB2dHlzaCAnd3JpdGUtY29uZmlnIChpbnRlZ3JhdGVkfGRhZW1vbiknIHBhdGNoCi0gYWx3YXlzICdtYWtlIHJlYnVpbGQnIGluIHZ0eXNoLyB0byBjYXRjaCBuZXcgY29tbWFuZHMKCiogRnJpIFNlcCAxMyAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIDAuOTNiCgoqIFdlZCBTZXAgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkICIvc2Jpbi9pcCByb3V0ZSBmbHVzaCBwcm90byB6ZWJyYSIgdG8gemVicmEgUkggaW5pdCBvbiBzdGFydHVwCgoqIFNhdCBBdWcgMjQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBjdXJyZW50IENWUwotIGFkZCBPU1BGIHBvaW50IHRvIG11bHRpcG9pbnQgcGF0Y2gKLSBhZGQgT1NQRiBidWdmaXhlcwotIGFkZCBCR1AgaGFzaCBvcHRpbWlzYXRpb24gcGF0Y2gKCiogRnJpIEp1biAxNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIDAuOTMtcHJlMSAvIENWUwotIGFkZCBsaW5rIHN0YXRlIGRldGVjdGlvbiBzdXBwb3J0Ci0gYWRkIGdlbmVyaWMgUHRQIGFuZCBSRkMzMDIxIHN1cHBvcnQKLSB2YXJpb3VzIGJ1ZyBmaXhlcwoKKiBUaHUgQXVnIDA5IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS02Ci0gRml4IGJ1ZyAjNTEzMzYKCiogV2VkIEF1ZyAgMSAyMDAxIFRyb25kIEVpdmluZCBHbG9tc3L4ZCA8dGVnQHJlZGhhdC5jb20+IDAuOTFhLTUKLSBVc2UgZ2VuZXJpYyBpbml0c2NyaXB0IHN0cmluZ3MgaW5zdGVhZCBvZiBpbml0c2NyaXB0IHNwZWNpZmljCiAgKCAiU3RhcnRpbmcgZm9vOiAiIC0+ICJTdGFydGluZyAkcHJvZzoiICkKCiogRnJpIEp1bCAyNyAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNAotIEJ1bXAgdGhlIHJlbGVhc2Ugd2hlbiByZWJ1aWxkaW5nIGludG8gdGhlIGRpc3QuCgoqIFR1ZSBGZWIgIDYgMjAwMSBUaW0gUG93ZXJzIDx0aW1wQHJlZGhhdC5jb20+Ci0gYnVpbHQgZm9yIFBvd2VydG9vbHMKCiogU3VuIEZlYiAgNCAyMDAxIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+IAotIEhhY2tlZCB1cCBmcm9tIFBMRCBMaW51eCAwLjkwLTEsIE1hbmRyYWtlIDAuOTAtMW1kayBhbmQgb25lIGZyb20gemVicmEub3JnLgotIFVwZGF0ZSB0byAwLjkxYQotIFZlcnkgaGVhdnkgbW9kaWZpY2F0aW9ucyB0byBpbml0LmQvKiwgLnNwZWMsIHBhbSwgaTE4biwgbG9ncm90YXRlLCBldGMuCi0gU2hvdWxkIGJlIHF1aXRlIFJlZCBIYXQnaXNxdWUgbm93Lgo=