IyBjb25maWd1cmUgb3B0aW9ucwojCiMgU29tZSBjYW4gYmUgb3ZlcnJpZGVuIG9uIHJwbWJ1aWxkIGNvbW1hbmRsaW5lIHdpdGg6CiMgcnBtYnVpbGQgLS1kZWZpbmUgJ3ZhcmlhYmxlIHZhbHVlJwojCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBRdWFnZ2EgY29uZmlndXJlIG9wdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIHdpdGgtZmVhdHVyZSBvcHRpb25zCiV7IT93aXRoX3NubXA6CQklZGVmaW5lIHdpdGhfc25tcAkxIH0KJXshP3dpdGhfdnR5c2g6CQklZGVmaW5lCXdpdGhfdnR5c2gJMSB9CiV7IT93aXRoX29zcGZfdGU6CSVkZWZpbmUJd2l0aF9vc3BmX3RlCTEgfQoleyE/d2l0aF9uc3NhOgkJJWRlZmluZQl3aXRoX25zc2EJMSB9CiV7IT93aXRoX29wYXF1ZV9sc2E6CSVkZWZpbmUJd2l0aF9vcGFxdWVfbHNhIDEgfQoleyE/d2l0aF90Y3BfemVicmE6CSVkZWZpbmUJd2l0aF90Y3BfemVicmEJMCB9CiV7IT93aXRoX3Z0eXNoOgkJJWRlZmluZQl3aXRoX3Z0eXNoCTEgfQoleyE/d2l0aF9wYW06CQklZGVmaW5lCXdpdGhfcGFtCTEgfQoleyE/d2l0aF9pcHY2OgkJJWRlZmluZQl3aXRoX2lwdjYJMSB9CiV7IT93aXRoX29zcGZjbGllbnQ6CSVkZWZpbmUJd2l0aF9vc3BmY2xpZW50IDEgfQoleyE/d2l0aF9vc3BmYXBpOgklZGVmaW5lCXdpdGhfb3NwZmFwaQkxIH0KJXshP3dpdGhfaXJkcDoJCSVkZWZpbmUJd2l0aF9pcmRwCTEgfQoleyE/d2l0aF9ydGFkdjoJCSVkZWZpbmUJd2l0aF9ydGFkdgkxIH0KJXshP3dpdGhfaXNpc2Q6CQklZGVmaW5lCXdpdGhfaXNpc2QJMSB9CiV7IT93aXRoX3NoYXJlZDoJJWRlZmluZQl3aXRoX3NoYXJlZAkxIH0KJXshP3dpdGhfbXVsdGlwYXRoOgklZGVmaW5lCXdpdGhfbXVsdGlwYXRoCTY0IH0KJXshP3F1YWdnYV91c2VyOgklZGVmaW5lCXF1YWdnYV91c2VyCXF1YWdnYSB9CiV7IT92dHlfZ3JvdXA6CQklZGVmaW5lCXZ0eV9ncm91cAlxdWFnZ2F2dHkgfQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgZGlzdHJvIHNwZWNpZmljIHR3ZWFrcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIGRlZmF1bHQgZGlzdHJvLiBPdmVycmlkZSB3aXRoIHJwbWJ1aWxkIC1EICJkaXN0IFhYWCIgCiV7ZXhwYW5kOiAlJWRlZmluZSBkZWZhdWx0X2Rpc3QgJShycG0gLXEgLS1xZiAnZmMlJXtWRVJTSU9OfScgZmVkb3JhLXJlbGVhc2UgfCBncmVwIC12ICdub3QgaW5zdGFsbGVkJyl9CiV7IT9kaXN0OgkJJWRlZmluZQkJZGlzdAkle2RlZmF1bHRfZGlzdH19CgojIGFzIGRpc3Ryb3MgY2hhbmdlIHBhY2thZ2VzIHdlIGRlcGVuZCBvbiwgb3VyIFJlcXVpcmVzIGhhdmUgdG8gY2hhbmdlLCBzYWRseS4KJWRlZmluZSBxdWFnZ2FfYnVpbGRyZXFzIHRleGkyaHRtbCB0ZXhpbmZvIHRldGV4IGF1dG9jb25mIHBhbS1kZXZlbAolZGVmaW5lIHF1YWdnYV9idWlsZHJlcXMgJXtxdWFnZ2FfYnVpbGRyZXFzfSBwYXRjaCBsaWJjYXAtZGV2ZWwKCiMgRkM0IGFuZCA1IHNwbGl0IHRleGkyaHRtbCBvdXQgb2YgdGV0ZXggcGFja2FnZS4KJWlmICIlZGlzdCIgIT0gImZjMiIgfHwgIiVkaXN0IiAhPSAiZmMzIgolZGVmaW5lICBxdWFnZ2FfYnVpbGRyZXFzICV7cXVhZ2dhX2J1aWxkcmVxc30gdGV4aTJodG1sCiVlbmRpZgoKIyBwYW1fc3RhY2sgaXMgZGVwcmVjYXRlZCBpbiBGQzUKIyBkZWZhdWx0IHRvIHBhbV9zdGFjaywgZGVmYXVsdCBzaG91bGQgYmUgY2hhbmdlZCBsYXRlci4KJWlmICIlZGlzdCIgPT0gImZjNCIgfHwgIiVkaXN0IiA9PSAiZmMzIgolZGVmaW5lCXF1YWdnYV9wYW1fc291cmNlIHF1YWdnYS5wYW0uc3RhY2sKJWVsc2UKJWRlZmluZQlxdWFnZ2FfcGFtX3NvdXJjZSBxdWFnZ2EucGFtCiVlbmRpZgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBtaXNjIGludGVybmFsIGRlZmluZXMKJXshP3F1YWdnYV91aWQ6CQklZGVmaW5lICAgICAgICAgcXVhZ2dhX3VpZCAgICAgIDkyIH0KJXshP3F1YWdnYV9naWQ6CQklZGVmaW5lICAgICAgICAgcXVhZ2dhX2dpZCAgICAgIDkyIH0KJWRlZmluZQkJZGFlbW9uX2xpc3QJemVicmEgcmlwZCBvc3BmZCBiZ3BkCgolaWYgJXt3aXRoX2lwdjZ9CiVkZWZpbmUJCWRhZW1vbnY2X2xpc3QJcmlwbmdkIGJhYmVsZCBvc3BmNmQKJWVsc2UKJWRlZmluZQkJZGFlbW9udjZfbGlzdAkiIgolZW5kaWYKCiVpZiAle3dpdGhfaXNpc2R9CiVkZWZpbmUJCWRhZW1vbl9vdGhlcglpc2lzZAolZWxzZQolZGVmaW5lCQlkYWVtb25fb3RoZXIJIiIKJWVuZGlmCgolZGVmaW5lCQlhbGxfZGFlbW9ucwkle2RhZW1vbl9saXN0fSAle2RhZW1vbnY2X2xpc3R9ICV7ZGFlbW9uX290aGVyfSB3YXRjaHF1YWdnYQoKIyBhbGxvdyBidWlsZCBkaXIgdG8gYmUga2VwdAoleyE/a2VlcF9idWlsZDoJCSVkZWZpbmUJCWtlZXBfYnVpbGQJMCB9CgojcmVsZWFzZSBzdWItcmV2aXNpb24gKHRoZSB0d28gZGlnaXRzIGFmdGVyIHRoZSBDT05GREFURSkKJXshP3JlbGVhc2VfcmV2OgklZGVmaW5lCQlyZWxlYXNlX3JldgkwMSB9CgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAJXtyZWxlYXNlX3Jldn0KTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cucXVhZ2dhLm5ldAolaWYgJXt3aXRoX3NubXB9CkJ1aWxkUmVxdWlyZXM6CW5ldC1zbm1wLWRldmVsClJlcXVpcmVzKHByZSk6CQluZXQtc25tcAolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KQnVpbGRSZXF1aXJlczoJcmVhZGxpbmUgcmVhZGxpbmUtZGV2ZWwgbmN1cnNlcyBuY3Vyc2VzLWRldmVsClJlcXVpcmVzKHByZSk6CQluY3Vyc2VzCiVlbmRpZgpCdWlsZFJlcXVpcmVzOgl0ZXhpbmZvIHRldGV4IGF1dG9jb25mIHBhbS1kZXZlbCBwYXRjaCBsaWJjYXAtZGV2ZWwgdGV0ZXgKIyBJbml0c2NyaXB0cyA+IDUuNjAgaXMgcmVxdWlyZWQgZm9yIElQdjYgc3VwcG9ydApSZXF1aXJlcyhwcmUpOgkJaW5pdHNjcmlwdHMgPj0gNS42MApSZXF1aXJlcyhwcmUpOgkJbmN1cnNlcyBwYW0KUmVxdWlyZXMocHJlKToJCS9zYmluL2luc3RhbGwtaW5mbwpQcm92aWRlczoJcm91dGluZ2RhZW1vbgpCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290Ck9ic29sZXRlczoJYmlyZCBnYXRlZCBtcnQgemVicmEKCiVkZXNjcmlwdGlvbgpRdWFnZ2EgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgbWFuYWdlcyBUQ1AvSVAgYmFzZWQgcm91dGluZwpwcm90b2NvbC4gSXQgdGFrZXMgbXVsdGktc2VydmVyIGFuZCBtdWx0aS10aHJlYWQgYXBwcm9hY2ggdG8gcmVzb2x2ZQp0aGUgY3VycmVudCBjb21wbGV4aXR5IG9mIHRoZSBJbnRlcm5ldC4KClF1YWdnYSBzdXBwb3J0cyBCR1A0LCBCR1A0KywgT1NQRnYyLCBPU1BGdjMsIFJJUHYxLCBSSVB2MiwgYW5kIFJJUG5nLgoKUXVhZ2dhIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBSb3V0ZSBTZXJ2ZXIgYW5kIGEgUm91dGUgUmVmbGVjdG9yLiBJdCBpcwpub3QgYSB0b29sa2l0LCBpdCBwcm92aWRlcyBmdWxsIHJvdXRpbmcgcG93ZXIgdW5kZXIgYSBuZXcgYXJjaGl0ZWN0dXJlLgpRdWFnZ2EgYnkgZGVzaWduIGhhcyBhIHByb2Nlc3MgZm9yIGVhY2ggcHJvdG9jb2wuCgpRdWFnZ2EgaXMgYSBmb3JrIG9mIEdOVSBaZWJyYS4KCiVwYWNrYWdlIGNvbnRyaWIKU3VtbWFyeTogY29udHJpYiB0b29scyBmb3IgcXVhZ2dhCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGNvbnRyaWIKQ29udHJpYnV0ZWQvM3JkIHBhcnR5IHRvb2xzIHdoaWNoIG1heSBiZSBvZiB1c2Ugd2l0aCBxdWFnZ2EuCgolcGFja2FnZSBkZXZlbApTdW1tYXJ5OiBIZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBmb3IgcXVhZ2dhIGRldmVsb3BtZW50Ckdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGRldmVsClRoZSBxdWFnZ2EtZGV2ZWwgcGFja2FnZSBjb250YWlucyB0aGUgaGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgbmVjY2Vzc2FyeSBmb3IKZGV2ZWxvcGluZyBPU1BGLUFQSSBhbmQgcXVhZ2dhIGFwcGxpY2F0aW9ucy4KCiVwcmVwCiVzZXR1cCAgLXEKCiVidWlsZAoKIyBGb3Igc3RhbmRhcmQgZ2NjIHZlcmJvc2l0eSwgdW5jb21tZW50IHRoZXNlIGxpbmVzOgojQ0ZMQUdTPSIle29wdGZsYWdzfSAtV2FsbCAtV3NpZ24tY29tcGFyZSAtV3BvaW50ZXItYXJpdGgiCiNDRkxBR1M9IiR7Q0ZMQUdTfSAtV2JhZC1mdW5jdGlvbi1jYXN0IC1Xd3JpdGUtc3RyaW5ncyIKCiMgRm9yIHVsdHJhIGdjYyB2ZXJib3NpdHksIHVuY29tbWVudCB0aGVzZSBsaW5lcyBhbHNvOgojQ0ZMQUdTPSIke0NGTEFHU30gLVcgLVdjYXN0LXF1YWwgLVdzdHJpY3QtcHJvdG90eXBlcyIKI0NGTEFHUz0iJHtDRkxBR1N9IC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdtaXNzaW5nLW5vcmV0dXJuIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVd1bnJlYWNoYWJsZS1jb2RlIgojQ0ZMQUdTPSIke0NGTEFHU30gLVdwYWNrZWQgLVdwYWRkZWQiCgolY29uZmlndXJlIFwKJWlmICEle3dpdGhfc2hhcmVkfQoJLS1kaXNhYmxlLXNoYXJlZCBcCiVlbmRpZgolaWYgJXt3aXRoX2lwdjZ9CgktLWVuYWJsZS1pcHY2IFwKJWVuZGlmCiVpZiAle3dpdGhfc25tcH0KCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV7d2l0aF9tdWx0aXBhdGh9CgktLWVuYWJsZS1tdWx0aXBhdGg9JXt3aXRoX211bHRpcGF0aH0gXAolZW5kaWYKJWlmICV7d2l0aF90Y3BfemVicmF9CgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV7d2l0aF9uc3NhfQoJLS1lbmFibGUtbnNzYSBcCiVlbmRpZgolaWYgJXt3aXRoX29wYXF1ZV9sc2F9CgktLWVuYWJsZS1vcGFxdWUtbHNhIFwKJWVuZGlmCiVpZiAle3dpdGhfb3NwZl90ZX0KCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KCS0tZW5hYmxlLXZ0eXNoIFwKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmNsaWVudH0KCS0tZW5hYmxlLW9zcGZjbGllbnQ9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZjbGllbnQ9bm9cCiVlbmRpZgolaWYgJXt3aXRoX29zcGZhcGl9CgktLWVuYWJsZS1vc3BmYXBpPXllcyBcCiVlbHNlCgktLWVuYWJsZS1vc3BmYXBpPW5vIFwKJWVuZGlmCiVpZiAle3dpdGhfaXJkcH0KCS0tZW5hYmxlLWlyZHA9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLWlyZHA9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9ydGFkdn0KCS0tZW5hYmxlLXJ0YWR2PXllcyBcCiVlbHNlCgktLWVuYWJsZS1ydGFkdj1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQoJLS1lbmFibGUtaXNpc2QgXAolZWxzZQoJLS1kaXNhYmxlLWlzaXNkIFwKJWVuZGlmCiVpZiAle3dpdGhfcGFtfQoJLS13aXRoLWxpYnBhbSBcCiVlbmRpZgolaWYgJXF1YWdnYV91c2VyCgktLWVuYWJsZS11c2VyPSVxdWFnZ2FfdXNlciBcCgktLWVuYWJsZS1ncm91cD0lcXVhZ2dhX3VzZXIgXAolZW5kaWYKJWlmICV2dHlfZ3JvdXAKCS0tZW5hYmxlLXZ0eS1ncm91cD0ldnR5X2dyb3VwIFwKJWVuZGlmCi0tZW5hYmxlLW5ldGxpbmsgLS1lbmFibGUtZ2NjLXJkeW5hbWljCgptYWtlICV7P19zbXBfbWZsYWdzfSBNQUtFSU5GTz0ibWFrZWluZm8gLS1uby1zcGxpdCIKCnB1c2hkIGRvYwp0ZXhpMmh0bWwgLW51bWJlciBxdWFnZ2EudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvcXVhZ2dhICRSUE1fQlVJTERfUk9PVCV7X2luZm9kaXJ9CgptYWtlIGluc3RhbGwgXAoJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKCiMgUmVtb3ZlIHRoaXMgZmlsZSwgYXMgaXQgaXMgdW5pbnN0YWxsZWQgYW5kIGNhdXNlcyBlcnJvcnMgd2hlbiBidWlsZGluZyBvbiBSSDkKcm0gLXJmICRSUE1fQlVJTERfUk9PVC91c3Ivc2hhcmUvaW5mby9kaXIKCiMgaW5zdGFsbCBldGMgc291cmNlcwpmb3IgZGFlbW9uIGluICV7YWxsX2RhZW1vbnN9IDsgZG8KCWlmIFsgeCIke2RhZW1vbn0iICE9IHgiIiBdIDsgdGhlbgoJCWluc3RhbGwgJXt6ZWJfcmhfc3JjfS8ke2RhZW1vbn0uaW5pdCBcCgkJCSRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259CglmaQpkb25lCmluc3RhbGwgLW02NDQgJXt6ZWJfcmhfc3JjfS8le3F1YWdnYV9wYW1fc291cmNlfSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnN5c2NvbmZpZyBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKaW5zdGFsbCAtZCAtbTc1MCAgJFJQTV9CVUlMRF9ST09UL3Zhci9ydW4vcXVhZ2dhCgolcHJlCiMgYWRkIHZ0eV9ncm91cAolaWYgJXZ0eV9ncm91cAppZiBnZXRlbnQgZ3JvdXAgJXZ0eV9ncm91cCA+IC9kZXYvbnVsbCA7IHRoZW4gOiA7IGVsc2UgXAogL3Vzci9zYmluL2dyb3VwYWRkIC1yICV2dHlfZ3JvdXAgPiAvZGV2L251bGwgfHwgOiA7IGZpCiVlbmRpZgoKIyBhZGQgcXVhZ2dhIHVzZXIgYW5kIGdyb3VwCiVpZiAlcXVhZ2dhX3VzZXIKIyBFbnN1cmUgdGhhdCBxdWFnZ2FfZ2lkIGdldHMgY29ycmVjdGx5IGFsbG9jYXRlZAppZiBnZXRlbnQgZ3JvdXAgJXF1YWdnYV91c2VyID4vZGV2L251bGw7IHRoZW4gOiA7IGVsc2UgXAogL3Vzci9zYmluL2dyb3VwYWRkIC1nICVxdWFnZ2FfZ2lkICVxdWFnZ2FfdXNlciA+IC9kZXYvbnVsbCB8fCA6IDsgXApmaQppZiBnZXRlbnQgcGFzc3dkICVxdWFnZ2FfdXNlciA+L2Rldi9udWxsIDsgdGhlbiA6IDsgZWxzZSBcCiAvdXNyL3NiaW4vdXNlcmFkZCAgLXUgJXF1YWdnYV91aWQgLWcgJXF1YWdnYV9naWQgXAogIC1NIC1yIC1zIC9zYmluL25vbG9naW4gLWMgIlF1YWdnYSByb3V0aW5nIHN1aXRlIiBcCiAgLWQgJV9sb2NhbHN0YXRlZGlyICVxdWFnZ2FfdXNlciAyPiAvZGV2L251bGwgfHwgOiA7IFwKZmkKJWVuZGlmCgolcG9zdAojIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgPHNlcnZpY2UgbmFtZT4gPHBvcnQvcHJvdG8+IDxjb21tZW50PgojIGUuZy4gemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgKCkKewogICMgQWRkIHBvcnQgL2V0Yy9zZXJ2aWNlcyBlbnRyeSBpZiBpdCBpc24ndCBhbHJlYWR5IHRoZXJlIAogIGlmIFsgLWYgL2V0Yy9zZXJ2aWNlcyBdICYmIFwKICAgICAgISAlX19zZWQgLWUgJ3MvIy4qJC8vJyAvZXRjL3NlcnZpY2VzIHwgJV9fZ3JlcCAtd3EgJDEgOyB0aGVuCiAgICBlY2hvICIkMQkJJDIJCQkjICQzIiAgPj4gL2V0Yy9zZXJ2aWNlcwogIGZpCn0KCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmEgICAgMjYwMS90Y3AgInplYnJhIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBkICAgICAyNjAyL3RjcCAiUklQZCB2dHkiCiVpZiAle3dpdGhfaXB2Nn0KemVicmFfc3BlY19hZGRfc2VydmljZSByaXBuZ2QgICAyNjAzL3RjcCAiUklQbmdkIHZ0eSIKJWVuZGlmCnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmQgICAgMjYwNC90Y3AgIk9TUEZkIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSBiZ3BkICAgICAyNjA1L3RjcCAiQkdQZCB2dHkiCiVpZiAle3dpdGhfaXB2Nn0KemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmNmQgICAyNjA2L3RjcCAiT1NQRjZkIHZ0eSIKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmFwaX0KemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmYXBpICAyNjA3L3RjcCAiT1NQRi1BUEkiCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGlzaXNkICAgIDI2MDgvdGNwICJJU0lTZCB2dHkiCiVlbmRpZgoKZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJL3NiaW4vY2hrY29uZmlnIC0tYWRkICR7ZGFlbW9ufQpkb25lCgovc2Jpbi9pbnN0YWxsLWluZm8gJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgojIENyZWF0ZSBkdW1teSBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0IHNvIGJhc2ljIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYgXTsgdGhlbgoJZWNobyAiaG9zdG5hbWUgYGhvc3RuYW1lYCIgPiAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCiVpZiAle3F1YWdnYV91c2VyfQoJY2hvd24gJXF1YWdnYV91c2VyOiVxdWFnZ2FfdXNlciAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCiVlbmRpZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYKZmkKaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYgXTsgdGhlbgoJdG91Y2ggJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgoJY2htb2QgNjQwICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYKZmkKCiVwb3N0dW4KaWYgWyAiJDEiIC1nZSAxIF07IHRoZW4KCSMgRmluZCBvdXQgd2hpY2ggZGFlbW9ucyBuZWVkIHRvIGJlIHJlc3RhcnRlZC4KCWZvciBkYWVtb24gaW4gJWFsbF9kYWVtb25zIDsgZG8KCQlpZiBbIC1mIC92YXIvbG9jay9zdWJzeXMvJGRhZW1vbiBdOyB0aGVuCgkJCWV2YWwgcmVzdGFydF8kZGFlbW9uPXllcwoJCWVsc2UKCQkJZXZhbCByZXN0YXJ0XyRkYWVtb249bm8KCQlmaQoJZG9uZQoJIyBSZW5hbWUgcmVzdGFydCBmbGFncyBmb3IgZGFlbW9ucyBoYW5kbGVkIHNwZWNpYWxseS4KCXJ1bm5pbmdfemVicmE9IiRyZXN0YXJ0X3plYnJhIgoJcmVzdGFydF96ZWJyYT1ubwoJcnVubmluZ193YXRjaHF1YWdnYT0iJHJlc3RhcnRfd2F0Y2hxdWFnZ2EiCglyZXN0YXJ0X3dhdGNocXVhZ2dhPW5vCgkjIFN0b3Agd2F0Y2hxdWFnZ2EgZmlyc3QuCglbICIkcnVubmluZ193YXRjaHF1YWdnYSIgPSB5ZXMgXSAmJiBcCgkJL2V0Yy9yYy5kL2luaXQuZC93YXRjaHF1YWdnYSBzdG9wID4vZGV2L251bGwgMj4mMQoJIyBTdG9wIGFsbCBkYWVtb25zIG90aGVyIHRoYW4gemVicmEgYW5kIHdhdGNocXVhZ2dhLgoJZm9yIGRhZW1vbiBpbiAlYWxsX2RhZW1vbnMgOyBkbwoJCWV2YWwgcmVzdGFydD1cJHJlc3RhcnRfJHtkYWVtb259CgkJWyAiJHJlc3RhcnQiID0geWVzIF0gJiYgXAoJCQkvZXRjL3JjLmQvaW5pdC5kLyRkYWVtb24gc3RvcCA+L2Rldi9udWxsIDI+JjEKCWRvbmUKCSMgUmVzdGFydCB6ZWJyYS4KCVsgIiRydW5uaW5nX3plYnJhIiA9IHllcyBdICYmIFwKCQkvZXRjL3JjLmQvaW5pdC5kL3plYnJhIHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCgkjIFN0YXJ0IGFsbCBkYWVtb25zIG90aGVyIHRoYW4gemVicmEgYW5kIHdhdGNocXVhZ2dhLgoJZm9yIGRhZW1vbiBpbiAlYWxsX2RhZW1vbnMgOyBkbwoJCWV2YWwgcmVzdGFydD1cJHJlc3RhcnRfJHtkYWVtb259CgkJWyAiJHJlc3RhcnQiID0geWVzIF0gJiYgXAoJCQkvZXRjL3JjLmQvaW5pdC5kLyRkYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCglkb25lCgkjIFN0YXJ0IHdhdGNocXVhZ2dhIGxhc3QuCgkjIEF2b2lkIHBvc3R1biBzY3JpcHRsZXQgZXJyb3IgaWYgd2F0Y2hxdWFnZ2EgaXMgbm90IHJ1bm5pbmcuIAoJWyAiJHJ1bm5pbmdfd2F0Y2hxdWFnZ2EiID0geWVzIF0gJiYgXAoJCS9ldGMvcmMuZC9pbml0LmQvd2F0Y2hxdWFnZ2Egc3RhcnQgPi9kZXYvbnVsbCAyPiYxIHx8IDoKZmkKL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgoKJXByZXVuCmlmIFsgIiQxIiA9ICIwIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVhbGxfZGFlbW9ucyA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gc3RvcCAgPi9kZXYvbnVsbCAyPiYxCgkJL3NiaW4vY2hrY29uZmlnIC0tZGVsICR7ZGFlbW9ufQoJZG9uZQoJL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgpmaQoKJWNsZWFuCiVpZiAhJXtrZWVwX2J1aWxkfQpybSAtcmYgJFJQTV9CVUlMRF9ST09UCiVlbmRpZgoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jICovKi5zYW1wbGUqIEFVVEhPUlMgQ09QWUlORwolZG9jIGRvYy9xdWFnZ2EuaHRtbAolZG9jIGRvYy9tcGxzCiVkb2MgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgUkVQT1JUSU5HLUJVR1MgU0VSVklDRVMgVE9ETwolaWYgJXtxdWFnZ2FfdXNlcn0KJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9sb2cvcXVhZ2dhIAolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL3J1bi9xdWFnZ2EKJWVsc2UKJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvbG9nL3F1YWdnYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpIC91c3Ivc2hhcmUvaW5mbwolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvcnVuL3F1YWdnYQolZW5kaWYKJWlmICV7dnR5X2dyb3VwfQolYXR0cig3NTAsJXF1YWdnYV91c2VyLCV2dHlfZ3JvdXApICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYuc2FtcGxlCiVlbmRpZgole19pbmZvZGlyfS8qaW5mbyoKJXtfbWFuZGlyfS9tYW4qLyoKJXtfc2JpbmRpcn0vemVicmEKJXtfc2JpbmRpcn0vb3NwZmQKJXtfc2JpbmRpcn0vcmlwZAole19zYmluZGlyfS9iZ3BkCiV7X3NiaW5kaXJ9L3dhdGNocXVhZ2dhCiVpZiAle3dpdGhfaXB2Nn0KJXtfc2JpbmRpcn0vcmlwbmdkCiV7X3NiaW5kaXJ9L29zcGY2ZAole19zYmluZGlyfS9iYWJlbGQKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CiV7X3NiaW5kaXJ9L2lzaXNkCiVlbmRpZgolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2xpYmRpcn0KJWlmICV7d2l0aF9zaGFyZWR9CiVkaXIgJXtfbGliZGlyfQole19saWJkaXJ9L2xpYiouc28KJXtfbGliZGlyfS9saWIqLnNvLioKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CiV7X2JpbmRpcn0vKgolZW5kaWYKJWNvbmZpZyAvZXRjL3F1YWdnYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9zeXNjb25maWcvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3BhbS5kL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgJWF0dHIoNjQwLHJvb3Qscm9vdCkgL2V0Yy9sb2dyb3RhdGUuZC8qCgolZmlsZXMgY29udHJpYgolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyB0b29scwoKJWZpbGVzIGRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290KQolaWYgJXt3aXRoX29zcGZjbGllbnR9CiV7X3NiaW5kaXJ9L29zcGZjbGllbnQKJWVuZGlmCiV7X2xpYmRpcn0vKi5hCiV7X2xpYmRpcn0vKi5sYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0KJXtfaW5jbHVkZWRpcn0vJW5hbWUvKi5oCiVkaXIgJWF0dHIoNzU1LHJvb3Qscm9vdCkgJXtfaW5jbHVkZWRpcn0vJXtuYW1lfS9vc3BmZAole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmZC8qLmgKJWlmICV7d2l0aF9vc3BmYXBpfQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpICV7X2luY2x1ZGVkaXJ9LyV7bmFtZX0vb3NwZmFwaQole19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmYXBpLyouaAolZW5kaWYKCiVjaGFuZ2Vsb2cKKiBUaHUgU2VwIDEyIDIwMDUgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFN0ZWFsIHNvbWUgY2hhbmdlcyBmcm9tIEZlZG9yYSBzcGVjIGZpbGU6Ci0gQWRkIHdpdGhfcnRhZHYgdmFyaWFibGUKLSBUZXN0IGZvciBncm91cHMvdXNlcnMgd2l0aCBnZXRlbnQgYmVmb3JlIGdyb3VwL3VzZXIgYWRkaW5nCi0gUmVhZGxpbmUgbmVlZCBub3QgYmUgYW4gZXhwbGljaXQgcHJlcmVxdWlzaXRlCi0gaW5zdGFsbC1pbmZvIGRlbGV0ZSBzaG91bGQgYmUgcG9zdHVuLCBub3QgcHJldW4KCiogV2VkIEphbiAxMiAyMDA1IEFuZHJldyBKLiBTY2hvcnIgPGFqc2Nob3JyQGFsdW1uaS5wcmluY2V0b24uZWR1PgotIG9uIHBhY2thZ2UgdXBncmFkZSwgaW1wbGVtZW50IGNhcmVmdWwsIHBoYXNlZCByZXN0YXJ0IGxvZ2ljCi0gdXNlIGdjYyAtcmR5bmFtaWMgZmxhZyB3aGVuIGxpbmtpbmcgZm9yIGJldHRlciBiYWNrdHJhY2VzCgoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSBkYWVtb252Nl9saXN0IHNob3VsZCBjb250YWluIG9ubHkgSVB2NiBkYWVtb25zCgoqIFdlZCBEZWMgMjIgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhanNjaG9yckBhbHVtbmkucHJpbmNldG9uLmVkdT4KLSB3YXRjaHF1YWdnYSBhZGRlZAotIG9uIHVwZ3JhZGUsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBjb25kcmVzdGFydCdlZAotIG9uIHJlbW92YWwsIGFsbCBkYWVtb25zIHNob3VsZCBiZSBzdG9wcGVkCgoqIE1vbiBOb3YgMDggMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gVXNlIG1ha2VpbmZvIC0taHRtbCB0byBnZW5lcmF0ZSBxdWFnZ2EuaHRtbAoKKiBTdW4gTm92IDA3IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCB3aXRoX2lwdjYgc2V0IHRvIDAgYnVpbGQKCiogU2F0IE9jdCAyMyAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBVcGRhdGUgdG8gMC45Ny4yCgoqIFNhdCBPY3QgMjMgMjAwNCBBbmRyZXcgSi4gU2Nob3JyIDxhc2Nob3JyQHRlbGVtZXRyeS1pbnZlc3RtZW50cy5jb20+Ci0gTWFrZSBkaXJlY3RvcmllcyBiZSBvd25lZCBieSB0aGUgcGFja2FnZXMgY29uY2VybmVkCi0gVXBkYXRlIGxvZ3JvdGF0ZSBzY3JpcHRzIHRvIHVzZSBjb3JyZWN0IHBhdGggdG8ga2lsbGFsbCBhbmQgdXNlIHBpZCBmaWxlcwoKKiBGcmkgT2N0IDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFVwZGF0ZSB0byAwLjk3LjAKCiogV2VkIFNlcCAxNSAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBidWlsZCBzbm1wIHN1cHBvcnQgYnkgZGVmYXVsdAotIGJ1aWxkIGlyZHAgc3VwcG9ydAotIGJ1aWxkIHdpdGggc2hhcmVkIGxpYnMKLSBkZXZlbCBzdWJwYWNrYWdlIGZvciBhcmNoaXZlcyBhbmQgaGVhZGVycwoKKiBUaHUgSmFuIDA4IDIwMDQgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZWQgc3lzY29uZmlnIGZpbGVzIHRvIHNwZWNpZnkgbG9jYWwgZGlyCi0gYWRkZWQgb3NwZl9kdW1wLmMgY3Jhc2ggcXVpY2sgZml4IHBhdGNoCi0gYWRkZWQgb3NwZmQgcGVyc2lzdGVudCBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBwYXRjaAoKKiBUdWUgRGVjIDMwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHN5bmMgdG8gQ1ZTCi0gaW50ZWdyYXRlIFJIIHN5c2NvbmZpZyBwYXRjaCB0byBzcGVjaWZ5IGRhZW1vbiBvcHRpb25zIChSSCkKLSBkZWZhdWx0IHRvIGhhdmUgdnR5IGxpc3RlbiBvbmx5IHRvIDEyNy4xIChSSCkKLSBhZGQgdXNlciB3aXRoIGZpeGVkIFVJRC9HSUQgKFJIKQotIGNyZWF0ZSB1c2VyIHdpdGggc2hlbGwgL3NiaW4vbm9sb2dpbiByYXRoZXIgdGhhbiAvYmluL2ZhbHNlIChSSCkKLSBzdG9wIGRhZW1vbnMgb24gdW5pbnN0YWxsIChSSCkKLSBkZWxldGUgaW5mbyBmaWxlIG9uICVwcmV1biwgbm90ICVwb3N0dW4gdG8gYXZvaWQgZGVsZXRpb24gb24gdXBncmFkZS4gKFJIKQotIGlzaXNkIGFkZGVkCi0gY2xlYW51cCB0YXNrcyBjYXJyaWVkIG91dCBmb3IgZXZlcnkgZGFlbW9uCgoqIFN1biBOb3YgMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggLWRldmVsIHBhY2thZ2UgdG8gaW5jbHVkZSBhbGwgZmlsZXMKLSBTeW5jIHRvIDAuOTYuNAoKKiBUdWUgQXVnIDEyIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIFJlbmFtZWQgdG8gUXVhZ2dhCi0gU3luYyB0byBRdWFnZ2EgcmVsZWFzZSAwLjk2CgoqIFR1ZSBNYXIgMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gemVicmEgcHJpdmlsZWdlcyBzdXBwb3J0CgoqIE1vbiBNYXIgMTggMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IG1lbSBsZWFrIGluICdzaG93IHRocmVhZCBjcHUnCi0gUmFscGggS2VsbGVyJ3MgT1NQRi1BUEkKLSBBbWlyOiBGaXggY29uZmlndXJlLmFjIGZvciBuZXQtc25tcAoKKiBTYXQgTWFyIDEgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gb3NwZmQgSU9TIHByZWZpeCB0byBpbnRlcmZhY2UgbWF0Y2hpbmcgZm9yICduZXR3b3JrJyBzdGF0ZW1lbnQKLSB0ZW1wb3JhcnkgZml4IGZvciBQdFAgYW5kIElQdjYKLSBzeW5jIHRvIHplYnJhLm9yZyBDVlMKCiogTW9uIEphbiAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGUgdG8gbGF0ZXN0IGN2cwotIFlvbidzICJzaG93IHRocmVhZCBjcHUiIHBhdGNoIC0gMTcyMTcKLSB3YWxrIHVwIHRyZWUgLSAxNzIxOAotIG9zcGZkIE5TU0EgZml4ZXMgLSAxNjY4MQotIG9zcGZkIG5zbSBmaXhlcyAtIDE2ODI0Ci0gb3NwZmQgT0xTQSBmaXhlcyBhbmQgbmV3IGZlYXR1cmUgLSAxNjgyMyAKLSBLQU1FIGFuZCBpZmluZGV4IGZpeGVzIC0gMTY1MjUKLSBzcGVjIGZpbGUgY2hhbmdlcyB0byBhbGxvdyByZWRoYXQgZmlsZXMgdG8gYmUgaW4gdHJlZQoKKiBTYXQgRGVjIDI4IDIwMDIgQWxleGFuZGVyIEhvb2dlcmh1aXMgPGFsZXhoQGloYXRlbnQuY29tPgotIEFkZGVkIGNvbmRpdGlvbmFscyBmb3IgYnVpbGRpbmcgd2l0aChvdXQpIElQdjYsIHZ0eXNoLCBSSVAsIEJHUAotIEZpeGVkIHVwIHNvbWUgYnVpbGQgcmVxdWlyZW1lbnRzIChwYXRjaCkKLSBBZGRlZCBjb25kaXRpb25hbCBidWlsZCByZXF1aXJlbWVudHMgZm9yIHZ0eXNoIC8gc25tcAotIEFkZGVkIGNvbmRpdGlvbmFsIHRvICVmaWxlcyBmb3IgJV9iaW5kaXIgZGVwZW5kaW5nIG9uIHZ0eXNoCgoqIE1vbiBOb3YgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIEdyZWcgVHJveGVsJ3MgbWQ1IGJ1ZmZlciBjb3B5L2R1cCBmaXgKLSBhZGQgUklQdjEgZml4Ci0gYWRkIEZyYW5rJ3MgbXVsdGljYXN0IGZsYWcgZml4CgoqIFdlZCBPY3QgMDkgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gdGltZXN0YW1wZWQgY3J5cHRfc2VxbnVtIHBhdGNoCi0gb2ktPm9uX3dyaXRlX3EgZml4CgoqIE1vbiBTZXAgMzAgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkIHZ0eXNoICd3cml0ZS1jb25maWcgKGludGVncmF0ZWR8ZGFlbW9uKScgcGF0Y2gKLSBhbHdheXMgJ21ha2UgcmVidWlsZCcgaW4gdnR5c2gvIHRvIGNhdGNoIG5ldyBjb21tYW5kcwoKKiBGcmkgU2VwIDEzIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45M2IKCiogV2VkIFNlcCAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgIi9zYmluL2lwIHJvdXRlIGZsdXNoIHByb3RvIHplYnJhIiB0byB6ZWJyYSBSSCBpbml0IG9uIHN0YXJ0dXAKCiogU2F0IEF1ZyAyNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGN1cnJlbnQgQ1ZTCi0gYWRkIE9TUEYgcG9pbnQgdG8gbXVsdGlwb2ludCBwYXRjaAotIGFkZCBPU1BGIGJ1Z2ZpeGVzCi0gYWRkIEJHUCBoYXNoIG9wdGltaXNhdGlvbiBwYXRjaAoKKiBGcmkgSnVuIDE0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gMC45My1wcmUxIC8gQ1ZTCi0gYWRkIGxpbmsgc3RhdGUgZGV0ZWN0aW9uIHN1cHBvcnQKLSBhZGQgZ2VuZXJpYyBQdFAgYW5kIFJGQzMwMjEgc3VwcG9ydAotIHZhcmlvdXMgYnVnIGZpeGVzCgoqIFRodSBBdWcgMDkgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTYKLSBGaXggYnVnICM1MTMzNgoKKiBXZWQgQXVnICAxIDIwMDEgVHJvbmQgRWl2aW5kIEdsb21zcvhkIDx0ZWdAcmVkaGF0LmNvbT4gMC45MWEtNQotIFVzZSBnZW5lcmljIGluaXRzY3JpcHQgc3RyaW5ncyBpbnN0ZWFkIG9mIGluaXRzY3JpcHQgc3BlY2lmaWMKICAoICJTdGFydGluZyBmb286ICIgLT4gIlN0YXJ0aW5nICRwcm9nOiIgKQoKKiBGcmkgSnVsIDI3IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS00Ci0gQnVtcCB0aGUgcmVsZWFzZSB3aGVuIHJlYnVpbGRpbmcgaW50byB0aGUgZGlzdC4KCiogVHVlIEZlYiAgNiAyMDAxIFRpbSBQb3dlcnMgPHRpbXBAcmVkaGF0LmNvbT4KLSBidWlsdCBmb3IgUG93ZXJ0b29scwoKKiBTdW4gRmViICA0IDIwMDEgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4gCi0gSGFja2VkIHVwIGZyb20gUExEIExpbnV4IDAuOTAtMSwgTWFuZHJha2UgMC45MC0xbWRrIGFuZCBvbmUgZnJvbSB6ZWJyYS5vcmcuCi0gVXBkYXRlIHRvIDAuOTFhCi0gVmVyeSBoZWF2eSBtb2RpZmljYXRpb25zIHRvIGluaXQuZC8qLCAuc3BlYywgcGFtLCBpMThuLCBsb2dyb3RhdGUsIGV0Yy4KLSBTaG91bGQgYmUgcXVpdGUgUmVkIEhhdCdpc3F1ZSBub3cuCg==